Warning: Permanently added '2620:52:3:1:dead:beef:cafe:c28d' (ED25519) to the list of known hosts.

You can reproduce this build on your computer by running:

  sudo dnf install copr-rpmbuild
  /usr/bin/copr-rpmbuild --verbose --drop-resultdir --task-url https://copr.fedorainfracloud.org/backend/get-build-task/8333581-fedora-39-ppc64le --chroot fedora-39-ppc64le


Version: 1.2
PID: 9237
Logging PID: 9238
Task:
{'allow_user_ssh': False,
 'appstream': True,
 'background': True,
 'bootstrap': 'on',
 'build_id': 8333581,
 'buildroot_pkgs': [],
 'chroot': 'fedora-39-ppc64le',
 'enable_net': True,
 'fedora_review': False,
 'git_hash': '5d6042a9e4c7deb08b445c57b0e985d6091baef4',
 'git_repo': 'https://copr-dist-git.fedorainfracloud.org/git/phracek/PyCharm/pycharm-community',
 'isolation': 'default',
 'memory_reqs': 2048,
 'package_name': 'pycharm-community',
 'package_version': '2024.3-3',
 'project_dirname': 'PyCharm',
 'project_name': 'PyCharm',
 'project_owner': 'phracek',
 'repo_priority': None,
 'repos': [{'baseurl': 'https://download.copr.fedorainfracloud.org/results/phracek/PyCharm/fedora-39-ppc64le/',
            'id': 'copr_base',
            'name': 'Copr repository',
            'priority': None}],
 'sandbox': 'phracek/PyCharm--https://api.github.com/users/phracek',
 'source_json': {},
 'source_type': None,
 'ssh_public_keys': None,
 'storage': None,
 'submitter': 'https://api.github.com/users/phracek',
 'tags': [],
 'task_id': '8333581-fedora-39-ppc64le',
 'timeout': 18000,
 'uses_devel_repo': False,
 'with_opts': [],
 'without_opts': []}

Running: git clone https://copr-dist-git.fedorainfracloud.org/git/phracek/PyCharm/pycharm-community /var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community --depth 500 --no-single-branch --recursive

cmd: ['git', 'clone', 'https://copr-dist-git.fedorainfracloud.org/git/phracek/PyCharm/pycharm-community', '/var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community', '--depth', '500', '--no-single-branch', '--recursive']
cwd: .
rc: 0
stdout: 
stderr: Cloning into '/var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community'...

Running: git checkout 5d6042a9e4c7deb08b445c57b0e985d6091baef4 --

cmd: ['git', 'checkout', '5d6042a9e4c7deb08b445c57b0e985d6091baef4', '--']
cwd: /var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community
rc: 0
stdout: 
stderr: Note: switching to '5d6042a9e4c7deb08b445c57b0e985d6091baef4'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 5d6042a automatic import of pycharm-community

Running: dist-git-client sources

cmd: ['dist-git-client', 'sources']
cwd: /var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community
rc: 0
stdout: 
stderr: INFO: Reading stdout from command: git rev-parse --abbrev-ref HEAD
INFO: Reading stdout from command: git rev-parse HEAD
INFO: Reading sources specification file: sources
INFO: Downloading pycharm-community-2024.3.tar.gz
INFO: Reading stdout from command: curl --help all
INFO: Calling: curl -H Pragma: -o pycharm-community-2024.3.tar.gz --location --connect-timeout 60 --retry 3 --retry-delay 10 --remote-time --show-error --fail --retry-all-errors https://copr-dist-git.fedorainfracloud.org/repo/pkgs/phracek/PyCharm/pycharm-community/pycharm-community-2024.3.tar.gz/md5/d53e084703a3f068163574a54fd36a2f/pycharm-community-2024.3.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
/usr/bin/tail: /var/lib/copr-rpmbuild/main.log: file truncated
100  682M  100  682M    0     0  17.8M      0  0:00:38  0:00:38 --:--:-- 19.9M
INFO: Reading stdout from command: md5sum pycharm-community-2024.3.tar.gz

Running (timeout=18000): unbuffer mock --spec /var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community/pycharm-community.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1733142711.527732 -r /var/lib/copr-rpmbuild/results/configs/child.cfg
INFO: mock.py version 5.9 starting (python version = 3.13.0, NVR = mock-5.9-1.fc41), args: /usr/libexec/mock/mock --spec /var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community/pycharm-community.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1733142711.527732 -r /var/lib/copr-rpmbuild/results/configs/child.cfg
Start(bootstrap): init plugins
INFO: tmpfs initialized
INFO: selinux enabled
INFO: chroot_scan: initialized
INFO: compress_logs: initialized
Finish(bootstrap): init plugins
Start: init plugins
INFO: tmpfs initialized
INFO: selinux enabled
INFO: chroot_scan: initialized
INFO: compress_logs: initialized
Finish: init plugins
INFO: Signal handler active
Start: run
INFO: Start(/var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community/pycharm-community.spec)  Config(fedora-39-ppc64le)
Start: clean chroot
Finish: clean chroot
Mock Version: 5.9
INFO: Mock Version: 5.9
Start(bootstrap): chroot init
INFO: mounting tmpfs at /var/lib/mock/fedora-39-ppc64le-bootstrap-1733142711.527732/root.
INFO: calling preinit hooks
INFO: enabled root cache
INFO: enabled package manager cache
Start(bootstrap): cleaning package manager metadata
Finish(bootstrap): cleaning package manager metadata
INFO: Package manager dnf4 detected and used (fallback)
Start(bootstrap): installing dnf tooling
No matches found for the following disable plugin patterns: local, spacewalk, versionlock
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Copr repository                                  33 kB/s | 3.6 kB     00:00    
fedora                                           17 MB/s |  31 MB     00:01    
updates                                         4.8 MB/s |  11 MB     00:02    
Dependencies resolved.
======================================================================================
 Package                           Arch     Version                     Repo      Size
======================================================================================
Installing:
 python3-dnf                       noarch   4.21.1-1.fc39               updates  620 k
 python3-dnf-plugins-core          noarch   4.9.0-1.fc39                updates  320 k
Installing dependencies:
 alternatives                      ppc64le  1.26-1.fc39                 updates   41 k
 audit-libs                        ppc64le  3.1.5-1.fc39                updates  141 k
 basesystem                        noarch   11-18.fc39                  fedora   7.2 k
 bash                              ppc64le  5.2.26-1.fc39               updates  1.9 M
 bzip2-libs                        ppc64le  1.0.8-16.fc39               fedora    47 k
 ca-certificates                   noarch   2024.2.69_v8.0.401-1.0.fc39 updates  871 k
 coreutils                         ppc64le  9.3-7.fc39                  updates  1.4 M
 coreutils-common                  ppc64le  9.3-7.fc39                  updates  2.1 M
 crypto-policies                   noarch   20231204-1.git1e3a2e4.fc39  updates  100 k
 curl                              ppc64le  8.2.1-5.fc39                updates  347 k
 cyrus-sasl-lib                    ppc64le  2.1.28-11.fc39              fedora   877 k
 dbus-libs                         ppc64le  1:1.14.10-1.fc39            fedora   177 k
 dnf-data                          noarch   4.21.1-1.fc39               updates   39 k
 elfutils-default-yama-scope       noarch   0.192-4.fc39                updates   12 k
 elfutils-libelf                   ppc64le  0.192-4.fc39                updates  217 k
 elfutils-libs                     ppc64le  0.192-4.fc39                updates  304 k
 expat                             ppc64le  2.6.3-1.fc39                updates  120 k
 fedora-gpg-keys                   noarch   39-2                        updates  130 k
 fedora-release                    noarch   39-36                       updates  8.6 k
 fedora-release-common             noarch   39-36                       updates   19 k
 fedora-release-identity-basic     noarch   39-36                       updates  9.4 k
 fedora-repos                      noarch   39-2                        updates  9.3 k
 file-libs                         ppc64le  5.44-5.fc39                 fedora   742 k
 filesystem                        ppc64le  3.18-6.fc39                 fedora   1.1 M
 findutils                         ppc64le  1:4.9.0-6.fc39              updates  539 k
 gawk                              ppc64le  5.2.2-2.fc39                fedora   1.1 M
 gdbm-libs                         ppc64le  1:1.23-4.fc39               fedora    62 k
 glib2                             ppc64le  2.78.6-1.fc39               updates  2.9 M
 glibc                             ppc64le  2.38-19.fc39                updates  2.2 M
 glibc-common                      ppc64le  2.38-19.fc39                updates  358 k
 glibc-minimal-langpack            ppc64le  2.38-19.fc39                updates   65 k
 gmp                               ppc64le  1:6.2.1-5.fc39              fedora   304 k
 gnupg2                            ppc64le  2.4.4-1.fc39                updates  2.9 M
 gnutls                            ppc64le  3.8.6-1.fc39                updates  1.1 M
 grep                              ppc64le  3.11-3.fc39                 fedora   308 k
 ima-evm-utils                     ppc64le  1.5-2.fc39                  fedora    67 k
 json-c                            ppc64le  0.17-1.fc39                 fedora    49 k
 keyutils-libs                     ppc64le  1.6.3-1.fc39                updates   33 k
 krb5-libs                         ppc64le  1.21.3-2.fc39               updates  853 k
 libacl                            ppc64le  2.3.1-9.fc39                updates   26 k
 libarchive                        ppc64le  3.7.1-3.fc39                updates  476 k
 libassuan                         ppc64le  2.5.6-2.fc39                fedora    71 k
 libattr                           ppc64le  2.5.1-8.fc39                fedora    19 k
 libb2                             ppc64le  0.98.1-9.fc39               fedora    25 k
 libblkid                          ppc64le  2.39.4-1.fc39               updates  134 k
 libbrotli                         ppc64le  1.1.0-1.fc39                fedora   380 k
 libcap                            ppc64le  2.48-9.fc39                 updates   73 k
 libcap-ng                         ppc64le  0.8.3-8.fc39                fedora    33 k
 libcom_err                        ppc64le  1.47.0-2.fc39               fedora    27 k
 libcomps                          ppc64le  0.1.20-1.fc39               updates   84 k
 libcurl                           ppc64le  8.2.1-5.fc39                updates  358 k
 libdnf                            ppc64le  0.73.3-1.fc39               updates  684 k
 libeconf                          ppc64le  0.5.2-2.fc39                updates   34 k
 libevent                          ppc64le  2.1.12-9.fc39               fedora   275 k
 libffi                            ppc64le  3.4.4-4.fc39                fedora    38 k
 libfsverity                       ppc64le  1.4-10.fc39                 fedora    20 k
 libgcc                            ppc64le  13.3.1-3.fc39               updates  115 k
 libgcrypt                         ppc64le  1.10.2-2.fc39               fedora   592 k
 libgomp                           ppc64le  13.3.1-3.fc39               updates  343 k
 libgpg-error                      ppc64le  1.47-2.fc39                 fedora   240 k
 libidn2                           ppc64le  2.3.7-1.fc39                updates  122 k
 libksba                           ppc64le  1.6.4-2.fc39                fedora   174 k
 libmodulemd                       ppc64le  2.15.0-5.fc39               fedora   232 k
 libmount                          ppc64le  2.39.4-1.fc39               updates  176 k
 libnghttp2                        ppc64le  1.55.1-5.fc39               updates   85 k
 libnsl2                           ppc64le  2.0.0-6.fc39                fedora    32 k
 libpsl                            ppc64le  0.21.2-4.fc39               fedora    65 k
 librepo                           ppc64le  1.19.0-1.fc39               updates  107 k
 libselinux                        ppc64le  3.5-5.fc39                  fedora   100 k
 libsemanage                       ppc64le  3.5-4.fc39                  fedora   131 k
 libsepol                          ppc64le  3.5-2.fc39                  fedora   356 k
 libsigsegv                        ppc64le  2.14-5.fc39                 fedora    28 k
 libsmartcols                      ppc64le  2.39.4-1.fc39               updates   73 k
 libsolv                           ppc64le  0.7.30-1.fc39               updates  482 k
 libssh                            ppc64le  0.10.6-2.fc39               updates  240 k
 libssh-config                     noarch   0.10.6-2.fc39               updates  9.0 k
 libstdc++                         ppc64le  13.3.1-3.fc39               updates  1.0 M
 libtasn1                          ppc64le  4.19.0-3.fc39               fedora    80 k
 libtirpc                          ppc64le  1.3.6-0.fc39                updates  108 k
 libtool-ltdl                      ppc64le  2.4.7-7.fc39                fedora    40 k
 libunistring                      ppc64le  1.1-5.fc39                  fedora   578 k
 libuuid                           ppc64le  2.39.4-1.fc39               updates   29 k
 libverto                          ppc64le  0.3.2-6.fc39                fedora    22 k
 libxcrypt                         ppc64le  4.4.36-2.fc39               fedora   132 k
 libxml2                           ppc64le  2.10.4-3.fc39               fedora   780 k
 libyaml                           ppc64le  0.2.5-12.fc39               fedora    69 k
 libzstd                           ppc64le  1.5.6-1.fc39                updates  339 k
 lua-libs                          ppc64le  5.4.6-3.fc39                fedora   149 k
 lz4-libs                          ppc64le  1.9.4-4.fc39                fedora    85 k
 mpdecimal                         ppc64le  2.5.1-7.fc39                fedora   104 k
 mpfr                              ppc64le  4.2.0-3.fc39                fedora   353 k
 ncurses-base                      noarch   6.4-7.20230520.fc39.1       updates   88 k
 ncurses-libs                      ppc64le  6.4-7.20230520.fc39.1       updates  380 k
 nettle                            ppc64le  3.9.1-2.fc39                fedora   460 k
 npth                              ppc64le  1.6-14.fc39                 fedora    25 k
 openldap                          ppc64le  2.6.7-1.fc39                updates  287 k
 openssl-libs                      ppc64le  1:3.1.4-4.fc39              updates  2.3 M
 p11-kit                           ppc64le  0.25.5-1.fc39               updates  519 k
 p11-kit-trust                     ppc64le  0.25.5-1.fc39               updates  153 k
 pcre2                             ppc64le  10.42-1.fc39.2              fedora   241 k
 pcre2-syntax                      noarch   10.42-1.fc39.2              fedora   143 k
 popt                              ppc64le  1.19-3.fc39                 fedora    71 k
 publicsuffix-list-dafsa           noarch   20240107-1.fc39             updates   58 k
 python-pip-wheel                  noarch   23.2.1-2.fc39               updates  1.5 M
 python3                           ppc64le  3.12.7-1.fc39               updates   28 k
 python3-dateutil                  noarch   1:2.8.2-10.fc39             fedora   355 k
 python3-dbus                      ppc64le  1.3.2-4.fc39                fedora   161 k
 python3-distro                    noarch   1.8.0-6.fc39                fedora    49 k
 python3-hawkey                    ppc64le  0.73.3-1.fc39               updates  104 k
 python3-libcomps                  ppc64le  0.1.20-1.fc39               updates   52 k
 python3-libdnf                    ppc64le  0.73.3-1.fc39               updates  847 k
 python3-libs                      ppc64le  3.12.7-1.fc39               updates  9.3 M
 python3-rpm                       ppc64le  4.19.1.1-1.fc39             updates   71 k
 python3-six                       noarch   1.16.0-12.fc39              fedora    41 k
 python3-systemd                   ppc64le  235-5.fc39                  fedora   108 k
 readline                          ppc64le  8.2-6.fc39                  updates  229 k
 rpm                               ppc64le  4.19.1.1-1.fc39             updates  539 k
 rpm-build-libs                    ppc64le  4.19.1.1-1.fc39             updates  102 k
 rpm-libs                          ppc64le  4.19.1.1-1.fc39             updates  356 k
 rpm-sequoia                       ppc64le  1.7.0-1.fc39                updates  1.6 M
 rpm-sign-libs                     ppc64le  4.19.1.1-1.fc39             updates   26 k
 sed                               ppc64le  4.8-14.fc39                 fedora   312 k
 setup                             noarch   2.14.4-1.fc39               fedora   154 k
 shadow-utils                      ppc64le  2:4.14.0-2.fc39             updates  1.3 M
 sqlite-libs                       ppc64le  3.42.0-7.fc39               fedora   789 k
 systemd-libs                      ppc64le  254.20-1.fc39               updates  727 k
 tpm2-tss                          ppc64le  4.0.2-1.fc39                updates  366 k
 tzdata                            noarch   2024a-2.fc39                updates  715 k
 xz-libs                           ppc64le  5.4.4-1.fc39                fedora   121 k
 zchunk-libs                       ppc64le  1.5.1-1.fc39                updates   57 k
 zlib                              ppc64le  1.2.13-4.fc39               fedora   100 k

Transaction Summary
======================================================================================
Install  133 Packages

Total download size: 59 M
Installed size: 279 M
Downloading Packages:
(1/133): basesystem-11-18.fc39.noarch.rpm       160 kB/s | 7.2 kB     00:00    
(2/133): dbus-libs-1.14.10-1.fc39.ppc64le.rpm   709 kB/s | 177 kB     00:00    
(3/133): cyrus-sasl-lib-2.1.28-11.fc39.ppc64le. 2.0 MB/s | 877 kB     00:00    
(4/133): bzip2-libs-1.0.8-16.fc39.ppc64le.rpm   107 kB/s |  47 kB     00:00    
(5/133): file-libs-5.44-5.fc39.ppc64le.rpm      859 kB/s | 742 kB     00:00    
(6/133): filesystem-3.18-6.fc39.ppc64le.rpm     1.4 MB/s | 1.1 MB     00:00    
(7/133): gdbm-libs-1.23-4.fc39.ppc64le.rpm      1.2 MB/s |  62 kB     00:00    
(8/133): gawk-5.2.2-2.fc39.ppc64le.rpm          1.2 MB/s | 1.1 MB     00:00    
(9/133): gmp-6.2.1-5.fc39.ppc64le.rpm           1.6 MB/s | 304 kB     00:00    
(10/133): json-c-0.17-1.fc39.ppc64le.rpm        1.4 MB/s |  49 kB     00:00    
(11/133): grep-3.11-3.fc39.ppc64le.rpm          1.4 MB/s | 308 kB     00:00    
(12/133): ima-evm-utils-1.5-2.fc39.ppc64le.rpm  1.1 MB/s |  67 kB     00:00    
(13/133): libattr-2.5.1-8.fc39.ppc64le.rpm      1.0 MB/s |  19 kB     00:00    
(14/133): libb2-0.98.1-9.fc39.ppc64le.rpm       1.2 MB/s |  25 kB     00:00    
(15/133): libassuan-2.5.6-2.fc39.ppc64le.rpm    1.4 MB/s |  71 kB     00:00    
(16/133): libcom_err-1.47.0-2.fc39.ppc64le.rpm  1.5 MB/s |  27 kB     00:00    
(17/133): libcap-ng-0.8.3-8.fc39.ppc64le.rpm    833 kB/s |  33 kB     00:00    
(18/133): libffi-3.4.4-4.fc39.ppc64le.rpm       925 kB/s |  38 kB     00:00    
(19/133): libfsverity-1.4-10.fc39.ppc64le.rpm   889 kB/s |  20 kB     00:00    
(20/133): libevent-2.1.12-9.fc39.ppc64le.rpm    1.6 MB/s | 275 kB     00:00    
(21/133): libbrotli-1.1.0-1.fc39.ppc64le.rpm    1.7 MB/s | 380 kB     00:00    
(22/133): libksba-1.6.4-2.fc39.ppc64le.rpm      1.9 MB/s | 174 kB     00:00    
(23/133): libgpg-error-1.47-2.fc39.ppc64le.rpm  1.4 MB/s | 240 kB     00:00    
(24/133): libnsl2-2.0.0-6.fc39.ppc64le.rpm      938 kB/s |  32 kB     00:00    
(25/133): libmodulemd-2.15.0-5.fc39.ppc64le.rpm 2.4 MB/s | 232 kB     00:00    
(26/133): libpsl-0.21.2-4.fc39.ppc64le.rpm      2.0 MB/s |  65 kB     00:00    
(27/133): libselinux-3.5-5.fc39.ppc64le.rpm     2.1 MB/s | 100 kB     00:00    
(28/133): libgcrypt-1.10.2-2.fc39.ppc64le.rpm   1.6 MB/s | 592 kB     00:00    
(29/133): libsigsegv-2.14-5.fc39.ppc64le.rpm    1.3 MB/s |  28 kB     00:00    
(30/133): libsemanage-3.5-4.fc39.ppc64le.rpm    2.0 MB/s | 131 kB     00:00    
(31/133): libtool-ltdl-2.4.7-7.fc39.ppc64le.rpm 1.3 MB/s |  40 kB     00:00    
(32/133): libtasn1-4.19.0-3.fc39.ppc64le.rpm    1.9 MB/s |  80 kB     00:00    
(33/133): libverto-0.3.2-6.fc39.ppc64le.rpm     1.1 MB/s |  22 kB     00:00    
(34/133): libsepol-3.5-2.fc39.ppc64le.rpm       2.7 MB/s | 356 kB     00:00    
(35/133): libxcrypt-4.4.36-2.fc39.ppc64le.rpm   2.2 MB/s | 132 kB     00:00    
(36/133): libyaml-0.2.5-12.fc39.ppc64le.rpm     1.7 MB/s |  69 kB     00:00    
(37/133): lua-libs-5.4.6-3.fc39.ppc64le.rpm     1.8 MB/s | 149 kB     00:00    
(38/133): libunistring-1.1-5.fc39.ppc64le.rpm   2.5 MB/s | 578 kB     00:00    
(39/133): lz4-libs-1.9.4-4.fc39.ppc64le.rpm     2.0 MB/s |  85 kB     00:00    
(40/133): libxml2-2.10.4-3.fc39.ppc64le.rpm     3.4 MB/s | 780 kB     00:00    
(41/133): mpdecimal-2.5.1-7.fc39.ppc64le.rpm    1.9 MB/s | 104 kB     00:00    
(42/133): npth-1.6-14.fc39.ppc64le.rpm          1.4 MB/s |  25 kB     00:00    
(43/133): pcre2-10.42-1.fc39.2.ppc64le.rpm      2.5 MB/s | 241 kB     00:00    
(44/133): mpfr-4.2.0-3.fc39.ppc64le.rpm         2.3 MB/s | 353 kB     00:00    
(45/133): nettle-3.9.1-2.fc39.ppc64le.rpm       3.4 MB/s | 460 kB     00:00    
(46/133): popt-1.19-3.fc39.ppc64le.rpm          1.8 MB/s |  71 kB     00:00    
(47/133): pcre2-syntax-10.42-1.fc39.2.noarch.rp 2.2 MB/s | 143 kB     00:00    
(48/133): python3-distro-1.8.0-6.fc39.noarch.rp 2.4 MB/s |  49 kB     00:00    
(49/133): python3-dbus-1.3.2-4.fc39.ppc64le.rpm 3.0 MB/s | 161 kB     00:00    
(50/133): python3-six-1.16.0-12.fc39.noarch.rpm 1.9 MB/s |  41 kB     00:00    
(51/133): python3-dateutil-2.8.2-10.fc39.noarch 3.5 MB/s | 355 kB     00:00    
(52/133): python3-systemd-235-5.fc39.ppc64le.rp 2.7 MB/s | 108 kB     00:00    
(53/133): setup-2.14.4-1.fc39.noarch.rpm        2.2 MB/s | 154 kB     00:00    
(54/133): xz-libs-5.4.4-1.fc39.ppc64le.rpm      3.4 MB/s | 121 kB     00:00    
(55/133): sed-4.8-14.fc39.ppc64le.rpm           2.3 MB/s | 312 kB     00:00    
(56/133): zlib-1.2.13-4.fc39.ppc64le.rpm        2.9 MB/s | 100 kB     00:00    
(57/133): sqlite-libs-3.42.0-7.fc39.ppc64le.rpm 2.3 MB/s | 789 kB     00:00    
(58/133): alternatives-1.26-1.fc39.ppc64le.rpm  156 kB/s |  41 kB     00:00    
(59/133): audit-libs-3.1.5-1.fc39.ppc64le.rpm   317 kB/s | 141 kB     00:00    
(60/133): ca-certificates-2024.2.69_v8.0.401-1. 1.5 MB/s | 871 kB     00:00    
(61/133): coreutils-9.3-7.fc39.ppc64le.rpm      2.7 MB/s | 1.4 MB     00:00    
(62/133): bash-5.2.26-1.fc39.ppc64le.rpm        2.3 MB/s | 1.9 MB     00:00    
(63/133): crypto-policies-20231204-1.git1e3a2e4 1.2 MB/s | 100 kB     00:00    
(64/133): coreutils-common-9.3-7.fc39.ppc64le.r 7.2 MB/s | 2.1 MB     00:00    
(65/133): curl-8.2.1-5.fc39.ppc64le.rpm         3.8 MB/s | 347 kB     00:00    
(66/133): dnf-data-4.21.1-1.fc39.noarch.rpm     472 kB/s |  39 kB     00:00    
(67/133): elfutils-default-yama-scope-0.192-4.f 155 kB/s |  12 kB     00:00    
(68/133): expat-2.6.3-1.fc39.ppc64le.rpm        1.5 MB/s | 120 kB     00:00    
(69/133): elfutils-libs-0.192-4.fc39.ppc64le.rp 1.7 MB/s | 304 kB     00:00    
(70/133): fedora-gpg-keys-39-2.noarch.rpm       1.6 MB/s | 130 kB     00:00    
(71/133): fedora-release-39-36.noarch.rpm       116 kB/s | 8.6 kB     00:00    
(72/133): fedora-release-common-39-36.noarch.rp 249 kB/s |  19 kB     00:00    
(73/133): fedora-release-identity-basic-39-36.n 120 kB/s | 9.4 kB     00:00    
(74/133): fedora-repos-39-2.noarch.rpm          115 kB/s | 9.3 kB     00:00    
(75/133): findutils-4.9.0-6.fc39.ppc64le.rpm    4.9 MB/s | 539 kB     00:00    
(76/133): elfutils-libelf-0.192-4.fc39.ppc64le. 376 kB/s | 217 kB     00:00    
(77/133): glibc-2.38-19.fc39.ppc64le.rpm        9.3 MB/s | 2.2 MB     00:00    
(78/133): glibc-common-2.38-19.fc39.ppc64le.rpm 3.2 MB/s | 358 kB     00:00    
(79/133): glib2-2.78.6-1.fc39.ppc64le.rpm       7.7 MB/s | 2.9 MB     00:00    
(80/133): glibc-minimal-langpack-2.38-19.fc39.p 826 kB/s |  65 kB     00:00    
(81/133): keyutils-libs-1.6.3-1.fc39.ppc64le.rp 172 kB/s |  33 kB     00:00    
(82/133): gnutls-3.8.6-1.fc39.ppc64le.rpm       4.5 MB/s | 1.1 MB     00:00    
(83/133): gnupg2-2.4.4-1.fc39.ppc64le.rpm       8.2 MB/s | 2.9 MB     00:00    
(84/133): krb5-libs-1.21.3-2.fc39.ppc64le.rpm   8.3 MB/s | 853 kB     00:00    
(85/133): libacl-2.3.1-9.fc39.ppc64le.rpm       354 kB/s |  26 kB     00:00    
(86/133): libblkid-2.39.4-1.fc39.ppc64le.rpm    1.7 MB/s | 134 kB     00:00    
(87/133): libcap-2.48-9.fc39.ppc64le.rpm        969 kB/s |  73 kB     00:00    
(88/133): libarchive-3.7.1-3.fc39.ppc64le.rpm   4.0 MB/s | 476 kB     00:00    
(89/133): libcomps-0.1.20-1.fc39.ppc64le.rpm    1.1 MB/s |  84 kB     00:00    
(90/133): libcurl-8.2.1-5.fc39.ppc64le.rpm      3.7 MB/s | 358 kB     00:00    
(91/133): libeconf-0.5.2-2.fc39.ppc64le.rpm     438 kB/s |  34 kB     00:00    
(92/133): libdnf-0.73.3-1.fc39.ppc64le.rpm      4.8 MB/s | 684 kB     00:00    
(93/133): libgcc-13.3.1-3.fc39.ppc64le.rpm      1.4 MB/s | 115 kB     00:00    
(94/133): libidn2-2.3.7-1.fc39.ppc64le.rpm      1.3 MB/s | 122 kB     00:00    
(95/133): libmount-2.39.4-1.fc39.ppc64le.rpm    2.0 MB/s | 176 kB     00:00    
(96/133): libnghttp2-1.55.1-5.fc39.ppc64le.rpm  1.0 MB/s |  85 kB     00:00    
(97/133): librepo-1.19.0-1.fc39.ppc64le.rpm     1.3 MB/s | 107 kB     00:00    
(98/133): libsmartcols-2.39.4-1.fc39.ppc64le.rp 904 kB/s |  73 kB     00:00    
(99/133): libsolv-0.7.30-1.fc39.ppc64le.rpm     4.7 MB/s | 482 kB     00:00    
(100/133): libssh-0.10.6-2.fc39.ppc64le.rpm     2.4 MB/s | 240 kB     00:00    
(101/133): libssh-config-0.10.6-2.fc39.noarch.r 117 kB/s | 9.0 kB     00:00    
(102/133): libstdc++-13.3.1-3.fc39.ppc64le.rpm  4.6 MB/s | 1.0 MB     00:00    
(103/133): libgomp-13.3.1-3.fc39.ppc64le.rpm    571 kB/s | 343 kB     00:00    
(104/133): libuuid-2.39.4-1.fc39.ppc64le.rpm    389 kB/s |  29 kB     00:00    
(105/133): ncurses-base-6.4-7.20230520.fc39.1.n 1.1 MB/s |  88 kB     00:00    
(106/133): ncurses-libs-6.4-7.20230520.fc39.1.p 3.3 MB/s | 380 kB     00:00    
(107/133): openldap-2.6.7-1.fc39.ppc64le.rpm    2.6 MB/s | 287 kB     00:00    
(108/133): libtirpc-1.3.6-0.fc39.ppc64le.rpm    157 kB/s | 108 kB     00:00    
(109/133): openssl-libs-3.1.4-4.fc39.ppc64le.rp 8.1 MB/s | 2.3 MB     00:00    
(110/133): p11-kit-trust-0.25.5-1.fc39.ppc64le. 1.7 MB/s | 153 kB     00:00    
(111/133): publicsuffix-list-dafsa-20240107-1.f 685 kB/s |  58 kB     00:00    
(112/133): libzstd-1.5.6-1.fc39.ppc64le.rpm     404 kB/s | 339 kB     00:00    
(113/133): python3-3.12.7-1.fc39.ppc64le.rpm    228 kB/s |  28 kB     00:00    
(114/133): python-pip-wheel-23.2.1-2.fc39.noarc 7.1 MB/s | 1.5 MB     00:00    
(115/133): python3-dnf-plugins-core-4.9.0-1.fc3 1.2 MB/s | 320 kB     00:00    
(116/133): python3-hawkey-0.73.3-1.fc39.ppc64le 1.2 MB/s | 104 kB     00:00    
(117/133): python3-libcomps-0.1.20-1.fc39.ppc64 619 kB/s |  52 kB     00:00    
(118/133): python3-libdnf-0.73.3-1.fc39.ppc64le 3.8 MB/s | 847 kB     00:00    
(119/133): python3-dnf-4.21.1-1.fc39.noarch.rpm 707 kB/s | 620 kB     00:00    
(120/133): python3-rpm-4.19.1.1-1.fc39.ppc64le. 485 kB/s |  71 kB     00:00    
(121/133): readline-8.2-6.fc39.ppc64le.rpm      813 kB/s | 229 kB     00:00    
(122/133): python3-libs-3.12.7-1.fc39.ppc64le.r  12 MB/s | 9.3 MB     00:00    
(123/133): rpm-build-libs-4.19.1.1-1.fc39.ppc64 1.3 MB/s | 102 kB     00:00    
(124/133): rpm-libs-4.19.1.1-1.fc39.ppc64le.rpm 1.4 MB/s | 356 kB     00:00    
(125/133): rpm-4.19.1.1-1.fc39.ppc64le.rpm      1.0 MB/s | 539 kB     00:00    
(126/133): rpm-sign-libs-4.19.1.1-1.fc39.ppc64l 282 kB/s |  26 kB     00:00    
(127/133): rpm-sequoia-1.7.0-1.fc39.ppc64le.rpm 8.4 MB/s | 1.6 MB     00:00    
(128/133): systemd-libs-254.20-1.fc39.ppc64le.r 5.8 MB/s | 727 kB     00:00    
(129/133): tpm2-tss-4.0.2-1.fc39.ppc64le.rpm    3.7 MB/s | 366 kB     00:00    
(130/133): tzdata-2024a-2.fc39.noarch.rpm       5.5 MB/s | 715 kB     00:00    
(131/133): zchunk-libs-1.5.1-1.fc39.ppc64le.rpm 723 kB/s |  57 kB     00:00    
(132/133): shadow-utils-4.14.0-2.fc39.ppc64le.r 1.5 MB/s | 1.3 MB     00:00    
(133/133): p11-kit-0.25.5-1.fc39.ppc64le.rpm    120 kB/s | 519 kB     00:04    
--------------------------------------------------------------------------------
Total                                           5.6 MB/s |  59 MB     00:10     
fedora                                          1.6 MB/s | 1.6 kB     00:00    
Importing GPG key 0x18B8E74C:
 Userid     : "Fedora (39) <fedora-39-primary@fedoraproject.org>"
 Fingerprint: E8F2 3996 F232 1864 0CB4 4CBE 75CF 5AC4 18B8 E74C
 From       : /usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-39-primary
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Running scriptlet: filesystem-3.18-6.fc39.ppc64le                         1/1 
  Preparing        :                                                        1/1 
  Installing       : libgcc-13.3.1-3.fc39.ppc64le                         1/133 
  Running scriptlet: libgcc-13.3.1-3.fc39.ppc64le                         1/133 
  Installing       : crypto-policies-20231204-1.git1e3a2e4.fc39.noarc     2/133 
  Running scriptlet: crypto-policies-20231204-1.git1e3a2e4.fc39.noarc     2/133 
  Installing       : tzdata-2024a-2.fc39.noarch                           3/133 
  Installing       : publicsuffix-list-dafsa-20240107-1.fc39.noarch       4/133 
  Installing       : ncurses-base-6.4-7.20230520.fc39.1.noarch            5/133 
  Installing       : libssh-config-0.10.6-2.fc39.noarch                   6/133 
  Installing       : fedora-release-identity-basic-39-36.noarch           7/133 
  Installing       : fedora-gpg-keys-39-2.noarch                          8/133 
  Installing       : fedora-repos-39-2.noarch                             9/133 
  Installing       : fedora-release-common-39-36.noarch                  10/133 
  Installing       : fedora-release-39-36.noarch                         11/133 
  Installing       : setup-2.14.4-1.fc39.noarch                          12/133 
warning: /etc/hosts created as /etc/hosts.rpmnew

  Running scriptlet: setup-2.14.4-1.fc39.noarch                          12/133 
  Installing       : filesystem-3.18-6.fc39.ppc64le                      13/133 
  Installing       : basesystem-11-18.fc39.noarch                        14/133 
  Installing       : glibc-minimal-langpack-2.38-19.fc39.ppc64le         15/133 
  Installing       : glibc-common-2.38-19.fc39.ppc64le                   16/133 
  Running scriptlet: glibc-2.38-19.fc39.ppc64le                          17/133 
  Installing       : glibc-2.38-19.fc39.ppc64le                          17/133 
  Running scriptlet: glibc-2.38-19.fc39.ppc64le                          17/133 
  Installing       : ncurses-libs-6.4-7.20230520.fc39.1.ppc64le          18/133 
  Installing       : bash-5.2.26-1.fc39.ppc64le                          19/133 
  Running scriptlet: bash-5.2.26-1.fc39.ppc64le                          19/133 
  Installing       : zlib-1.2.13-4.fc39.ppc64le                          20/133 
  Installing       : bzip2-libs-1.0.8-16.fc39.ppc64le                    21/133 
  Installing       : xz-libs-5.4.4-1.fc39.ppc64le                        22/133 
  Installing       : libzstd-1.5.6-1.fc39.ppc64le                        23/133 
  Installing       : gmp-1:6.2.1-5.fc39.ppc64le                          24/133 
  Installing       : libxml2-2.10.4-3.fc39.ppc64le                       25/133 
  Installing       : sqlite-libs-3.42.0-7.fc39.ppc64le                   26/133 
  Installing       : libgpg-error-1.47-2.fc39.ppc64le                    27/133 
  Installing       : popt-1.19-3.fc39.ppc64le                            28/133 
  Installing       : libcap-2.48-9.fc39.ppc64le                          29/133 
  Installing       : libuuid-2.39.4-1.fc39.ppc64le                       30/133 
  Installing       : readline-8.2-6.fc39.ppc64le                         31/133 
  Installing       : libattr-2.5.1-8.fc39.ppc64le                        32/133 
  Installing       : libacl-2.3.1-9.fc39.ppc64le                         33/133 
  Installing       : libffi-3.4.4-4.fc39.ppc64le                         34/133 
  Installing       : libtasn1-4.19.0-3.fc39.ppc64le                      35/133 
  Installing       : p11-kit-0.25.5-1.fc39.ppc64le                       36/133 
  Installing       : libunistring-1.1-5.fc39.ppc64le                     37/133 
  Installing       : libidn2-2.3.7-1.fc39.ppc64le                        38/133 
  Installing       : libxcrypt-4.4.36-2.fc39.ppc64le                     39/133 
  Installing       : libstdc++-13.3.1-3.fc39.ppc64le                     40/133 
  Installing       : elfutils-libelf-0.192-4.fc39.ppc64le                41/133 
  Installing       : gdbm-libs-1:1.23-4.fc39.ppc64le                     42/133 
  Installing       : json-c-0.17-1.fc39.ppc64le                          43/133 
  Installing       : libcom_err-1.47.0-2.fc39.ppc64le                    44/133 
  Installing       : libsepol-3.5-2.fc39.ppc64le                         45/133 
  Installing       : lua-libs-5.4.6-3.fc39.ppc64le                       46/133 
  Installing       : lz4-libs-1.9.4-4.fc39.ppc64le                       47/133 
  Installing       : systemd-libs-254.20-1.fc39.ppc64le                  48/133 
  Installing       : expat-2.6.3-1.fc39.ppc64le                          49/133 
  Installing       : keyutils-libs-1.6.3-1.fc39.ppc64le                  50/133 
  Installing       : libgomp-13.3.1-3.fc39.ppc64le                       51/133 
  Installing       : libsmartcols-2.39.4-1.fc39.ppc64le                  52/133 
  Installing       : libb2-0.98.1-9.fc39.ppc64le                         53/133 
  Installing       : libcomps-0.1.20-1.fc39.ppc64le                      54/133 
  Installing       : dbus-libs-1:1.14.10-1.fc39.ppc64le                  55/133 
  Installing       : cyrus-sasl-lib-2.1.28-11.fc39.ppc64le               56/133 
  Installing       : libpsl-0.21.2-4.fc39.ppc64le                        57/133 
  Installing       : libblkid-2.39.4-1.fc39.ppc64le                      58/133 
  Installing       : libassuan-2.5.6-2.fc39.ppc64le                      59/133 
  Installing       : libgcrypt-1.10.2-2.fc39.ppc64le                     60/133 
  Installing       : libksba-1.6.4-2.fc39.ppc64le                        61/133 
  Installing       : mpfr-4.2.0-3.fc39.ppc64le                           62/133 
  Installing       : nettle-3.9.1-2.fc39.ppc64le                         63/133 
  Installing       : file-libs-5.44-5.fc39.ppc64le                       64/133 
  Installing       : elfutils-default-yama-scope-0.192-4.fc39.noarch     65/133 
  Running scriptlet: elfutils-default-yama-scope-0.192-4.fc39.noarch     65/133 
  Installing       : elfutils-libs-0.192-4.fc39.ppc64le                  66/133 
  Installing       : libbrotli-1.1.0-1.fc39.ppc64le                      67/133 
  Installing       : libcap-ng-0.8.3-8.fc39.ppc64le                      68/133 
  Installing       : audit-libs-3.1.5-1.fc39.ppc64le                     69/133 
  Installing       : libsigsegv-2.14-5.fc39.ppc64le                      70/133 
  Installing       : gawk-5.2.2-2.fc39.ppc64le                           71/133 
  Installing       : libtool-ltdl-2.4.7-7.fc39.ppc64le                   72/133 
  Installing       : libverto-0.3.2-6.fc39.ppc64le                       73/133 
  Installing       : libyaml-0.2.5-12.fc39.ppc64le                       74/133 
  Installing       : mpdecimal-2.5.1-7.fc39.ppc64le                      75/133 
  Installing       : npth-1.6-14.fc39.ppc64le                            76/133 
  Installing       : alternatives-1.26-1.fc39.ppc64le                    77/133 
  Installing       : p11-kit-trust-0.25.5-1.fc39.ppc64le                 78/133 
  Running scriptlet: p11-kit-trust-0.25.5-1.fc39.ppc64le                 78/133 
  Installing       : gnutls-3.8.6-1.fc39.ppc64le                         79/133 
  Installing       : libeconf-0.5.2-2.fc39.ppc64le                       80/133 
  Installing       : libnghttp2-1.55.1-5.fc39.ppc64le                    81/133 
  Installing       : dnf-data-4.21.1-1.fc39.noarch                       82/133 
warning: /etc/dnf/dnf.conf created as /etc/dnf/dnf.conf.rpmnew

  Installing       : coreutils-common-9.3-7.fc39.ppc64le                 83/133 
  Installing       : pcre2-syntax-10.42-1.fc39.2.noarch                  84/133 
  Installing       : pcre2-10.42-1.fc39.2.ppc64le                        85/133 
  Installing       : libselinux-3.5-5.fc39.ppc64le                       86/133 
  Installing       : sed-4.8-14.fc39.ppc64le                             87/133 
  Installing       : libsemanage-3.5-4.fc39.ppc64le                      88/133 
  Installing       : shadow-utils-2:4.14.0-2.fc39.ppc64le                89/133 
  Installing       : findutils-1:4.9.0-6.fc39.ppc64le                    90/133 
  Installing       : libmount-2.39.4-1.fc39.ppc64le                      91/133 
  Installing       : glib2-2.78.6-1.fc39.ppc64le                         92/133 
  Installing       : grep-3.11-3.fc39.ppc64le                            93/133 
  Installing       : openssl-libs-1:3.1.4-4.fc39.ppc64le                 94/133 
  Installing       : coreutils-9.3-7.fc39.ppc64le                        95/133 
  Running scriptlet: ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noar    96/133 
  Installing       : ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noar    96/133 
  Running scriptlet: ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noar    96/133 
  Installing       : krb5-libs-1.21.3-2.fc39.ppc64le                     97/133 
  Installing       : libtirpc-1.3.6-0.fc39.ppc64le                       98/133 
  Running scriptlet: tpm2-tss-4.0.2-1.fc39.ppc64le                       99/133 
useradd: Warning: missing or non-executable shell '/usr/sbin/nologin'

  Installing       : tpm2-tss-4.0.2-1.fc39.ppc64le                       99/133 
  Installing       : zchunk-libs-1.5.1-1.fc39.ppc64le                   100/133 
  Installing       : ima-evm-utils-1.5-2.fc39.ppc64le                   101/133 
  Installing       : libnsl2-2.0.0-6.fc39.ppc64le                       102/133 
  Installing       : libssh-0.10.6-2.fc39.ppc64le                       103/133 
  Installing       : python-pip-wheel-23.2.1-2.fc39.noarch              104/133 
  Installing       : python3-libs-3.12.7-1.fc39.ppc64le                 105/133 
  Installing       : python3-3.12.7-1.fc39.ppc64le                      106/133 
  Installing       : python3-dbus-1.3.2-4.fc39.ppc64le                  107/133 
  Installing       : python3-distro-1.8.0-6.fc39.noarch                 108/133 
  Installing       : python3-six-1.16.0-12.fc39.noarch                  109/133 
  Installing       : python3-dateutil-1:2.8.2-10.fc39.noarch            110/133 
  Installing       : python3-systemd-235-5.fc39.ppc64le                 111/133 
  Installing       : python3-libcomps-0.1.20-1.fc39.ppc64le             112/133 
  Installing       : libevent-2.1.12-9.fc39.ppc64le                     113/133 
  Installing       : openldap-2.6.7-1.fc39.ppc64le                      114/133 
  Installing       : libcurl-8.2.1-5.fc39.ppc64le                       115/133 
  Installing       : curl-8.2.1-5.fc39.ppc64le                          116/133 
  Installing       : gnupg2-2.4.4-1.fc39.ppc64le                        117/133 
  Installing       : libfsverity-1.4-10.fc39.ppc64le                    118/133 
  Installing       : libarchive-3.7.1-3.fc39.ppc64le                    119/133 
  Installing       : rpm-sequoia-1.7.0-1.fc39.ppc64le                   120/133 
  Installing       : rpm-libs-4.19.1.1-1.fc39.ppc64le                   121/133 
  Installing       : libmodulemd-2.15.0-5.fc39.ppc64le                  122/133 
  Installing       : libsolv-0.7.30-1.fc39.ppc64le                      123/133 
  Installing       : librepo-1.19.0-1.fc39.ppc64le                      124/133 
  Installing       : libdnf-0.73.3-1.fc39.ppc64le                       125/133 
  Installing       : python3-libdnf-0.73.3-1.fc39.ppc64le               126/133 
  Installing       : python3-hawkey-0.73.3-1.fc39.ppc64le               127/133 
  Installing       : rpm-build-libs-4.19.1.1-1.fc39.ppc64le             128/133 
  Installing       : rpm-sign-libs-4.19.1.1-1.fc39.ppc64le              129/133 
  Installing       : python3-rpm-4.19.1.1-1.fc39.ppc64le                130/133 
  Installing       : python3-dnf-4.21.1-1.fc39.noarch                   131/133 
  Installing       : python3-dnf-plugins-core-4.9.0-1.fc39.noarch       132/133 
  Running scriptlet: rpm-4.19.1.1-1.fc39.ppc64le                        133/133 
  Installing       : rpm-4.19.1.1-1.fc39.ppc64le                        133/133 
  Running scriptlet: filesystem-3.18-6.fc39.ppc64le                     133/133 
  Running scriptlet: ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noar   133/133 
  Running scriptlet: rpm-4.19.1.1-1.fc39.ppc64le                        133/133 
Installed products updated.

Installed:
  alternatives-1.26-1.fc39.ppc64le                                              
  audit-libs-3.1.5-1.fc39.ppc64le                                               
  basesystem-11-18.fc39.noarch                                                  
  bash-5.2.26-1.fc39.ppc64le                                                    
  bzip2-libs-1.0.8-16.fc39.ppc64le                                              
  ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noarch                            
  coreutils-9.3-7.fc39.ppc64le                                                  
  coreutils-common-9.3-7.fc39.ppc64le                                           
  crypto-policies-20231204-1.git1e3a2e4.fc39.noarch                             
  curl-8.2.1-5.fc39.ppc64le                                                     
  cyrus-sasl-lib-2.1.28-11.fc39.ppc64le                                         
  dbus-libs-1:1.14.10-1.fc39.ppc64le                                            
  dnf-data-4.21.1-1.fc39.noarch                                                 
  elfutils-default-yama-scope-0.192-4.fc39.noarch                               
  elfutils-libelf-0.192-4.fc39.ppc64le                                          
  elfutils-libs-0.192-4.fc39.ppc64le                                            
  expat-2.6.3-1.fc39.ppc64le                                                    
  fedora-gpg-keys-39-2.noarch                                                   
  fedora-release-39-36.noarch                                                   
  fedora-release-common-39-36.noarch                                            
  fedora-release-identity-basic-39-36.noarch                                    
  fedora-repos-39-2.noarch                                                      
  file-libs-5.44-5.fc39.ppc64le                                                 
  filesystem-3.18-6.fc39.ppc64le                                                
  findutils-1:4.9.0-6.fc39.ppc64le                                              
  gawk-5.2.2-2.fc39.ppc64le                                                     
  gdbm-libs-1:1.23-4.fc39.ppc64le                                               
  glib2-2.78.6-1.fc39.ppc64le                                                   
  glibc-2.38-19.fc39.ppc64le                                                    
  glibc-common-2.38-19.fc39.ppc64le                                             
  glibc-minimal-langpack-2.38-19.fc39.ppc64le                                   
  gmp-1:6.2.1-5.fc39.ppc64le                                                    
  gnupg2-2.4.4-1.fc39.ppc64le                                                   
  gnutls-3.8.6-1.fc39.ppc64le                                                   
  grep-3.11-3.fc39.ppc64le                                                      
  ima-evm-utils-1.5-2.fc39.ppc64le                                              
  json-c-0.17-1.fc39.ppc64le                                                    
  keyutils-libs-1.6.3-1.fc39.ppc64le                                            
  krb5-libs-1.21.3-2.fc39.ppc64le                                               
  libacl-2.3.1-9.fc39.ppc64le                                                   
  libarchive-3.7.1-3.fc39.ppc64le                                               
  libassuan-2.5.6-2.fc39.ppc64le                                                
  libattr-2.5.1-8.fc39.ppc64le                                                  
  libb2-0.98.1-9.fc39.ppc64le                                                   
  libblkid-2.39.4-1.fc39.ppc64le                                                
  libbrotli-1.1.0-1.fc39.ppc64le                                                
  libcap-2.48-9.fc39.ppc64le                                                    
  libcap-ng-0.8.3-8.fc39.ppc64le                                                
  libcom_err-1.47.0-2.fc39.ppc64le                                              
  libcomps-0.1.20-1.fc39.ppc64le                                                
  libcurl-8.2.1-5.fc39.ppc64le                                                  
  libdnf-0.73.3-1.fc39.ppc64le                                                  
  libeconf-0.5.2-2.fc39.ppc64le                                                 
  libevent-2.1.12-9.fc39.ppc64le                                                
  libffi-3.4.4-4.fc39.ppc64le                                                   
  libfsverity-1.4-10.fc39.ppc64le                                               
  libgcc-13.3.1-3.fc39.ppc64le                                                  
  libgcrypt-1.10.2-2.fc39.ppc64le                                               
  libgomp-13.3.1-3.fc39.ppc64le                                                 
  libgpg-error-1.47-2.fc39.ppc64le                                              
  libidn2-2.3.7-1.fc39.ppc64le                                                  
  libksba-1.6.4-2.fc39.ppc64le                                                  
  libmodulemd-2.15.0-5.fc39.ppc64le                                             
  libmount-2.39.4-1.fc39.ppc64le                                                
  libnghttp2-1.55.1-5.fc39.ppc64le                                              
  libnsl2-2.0.0-6.fc39.ppc64le                                                  
  libpsl-0.21.2-4.fc39.ppc64le                                                  
  librepo-1.19.0-1.fc39.ppc64le                                                 
  libselinux-3.5-5.fc39.ppc64le                                                 
  libsemanage-3.5-4.fc39.ppc64le                                                
  libsepol-3.5-2.fc39.ppc64le                                                   
  libsigsegv-2.14-5.fc39.ppc64le                                                
  libsmartcols-2.39.4-1.fc39.ppc64le                                            
  libsolv-0.7.30-1.fc39.ppc64le                                                 
  libssh-0.10.6-2.fc39.ppc64le                                                  
  libssh-config-0.10.6-2.fc39.noarch                                            
  libstdc++-13.3.1-3.fc39.ppc64le                                               
  libtasn1-4.19.0-3.fc39.ppc64le                                                
  libtirpc-1.3.6-0.fc39.ppc64le                                                 
  libtool-ltdl-2.4.7-7.fc39.ppc64le                                             
  libunistring-1.1-5.fc39.ppc64le                                               
  libuuid-2.39.4-1.fc39.ppc64le                                                 
  libverto-0.3.2-6.fc39.ppc64le                                                 
  libxcrypt-4.4.36-2.fc39.ppc64le                                               
  libxml2-2.10.4-3.fc39.ppc64le                                                 
  libyaml-0.2.5-12.fc39.ppc64le                                                 
  libzstd-1.5.6-1.fc39.ppc64le                                                  
  lua-libs-5.4.6-3.fc39.ppc64le                                                 
  lz4-libs-1.9.4-4.fc39.ppc64le                                                 
  mpdecimal-2.5.1-7.fc39.ppc64le                                                
  mpfr-4.2.0-3.fc39.ppc64le                                                     
  ncurses-base-6.4-7.20230520.fc39.1.noarch                                     
  ncurses-libs-6.4-7.20230520.fc39.1.ppc64le                                    
  nettle-3.9.1-2.fc39.ppc64le                                                   
  npth-1.6-14.fc39.ppc64le                                                      
  openldap-2.6.7-1.fc39.ppc64le                                                 
  openssl-libs-1:3.1.4-4.fc39.ppc64le                                           
  p11-kit-0.25.5-1.fc39.ppc64le                                                 
  p11-kit-trust-0.25.5-1.fc39.ppc64le                                           
  pcre2-10.42-1.fc39.2.ppc64le                                                  
  pcre2-syntax-10.42-1.fc39.2.noarch                                            
  popt-1.19-3.fc39.ppc64le                                                      
  publicsuffix-list-dafsa-20240107-1.fc39.noarch                                
  python-pip-wheel-23.2.1-2.fc39.noarch                                         
  python3-3.12.7-1.fc39.ppc64le                                                 
  python3-dateutil-1:2.8.2-10.fc39.noarch                                       
  python3-dbus-1.3.2-4.fc39.ppc64le                                             
  python3-distro-1.8.0-6.fc39.noarch                                            
  python3-dnf-4.21.1-1.fc39.noarch                                              
  python3-dnf-plugins-core-4.9.0-1.fc39.noarch                                  
  python3-hawkey-0.73.3-1.fc39.ppc64le                                          
  python3-libcomps-0.1.20-1.fc39.ppc64le                                        
  python3-libdnf-0.73.3-1.fc39.ppc64le                                          
  python3-libs-3.12.7-1.fc39.ppc64le                                            
  python3-rpm-4.19.1.1-1.fc39.ppc64le                                           
  python3-six-1.16.0-12.fc39.noarch                                             
  python3-systemd-235-5.fc39.ppc64le                                            
  readline-8.2-6.fc39.ppc64le                                                   
  rpm-4.19.1.1-1.fc39.ppc64le                                                   
  rpm-build-libs-4.19.1.1-1.fc39.ppc64le                                        
  rpm-libs-4.19.1.1-1.fc39.ppc64le                                              
  rpm-sequoia-1.7.0-1.fc39.ppc64le                                              
  rpm-sign-libs-4.19.1.1-1.fc39.ppc64le                                         
  sed-4.8-14.fc39.ppc64le                                                       
  setup-2.14.4-1.fc39.noarch                                                    
  shadow-utils-2:4.14.0-2.fc39.ppc64le                                          
  sqlite-libs-3.42.0-7.fc39.ppc64le                                             
  systemd-libs-254.20-1.fc39.ppc64le                                            
  tpm2-tss-4.0.2-1.fc39.ppc64le                                                 
  tzdata-2024a-2.fc39.noarch                                                    
  xz-libs-5.4.4-1.fc39.ppc64le                                                  
  zchunk-libs-1.5.1-1.fc39.ppc64le                                              
  zlib-1.2.13-4.fc39.ppc64le                                                    

Complete!
Finish(bootstrap): installing dnf tooling
Start(bootstrap): creating root cache
Finish(bootstrap): creating root cache
Finish(bootstrap): chroot init
Start: chroot init
INFO: mounting tmpfs at /var/lib/mock/fedora-39-ppc64le-1733142711.527732/root.
INFO: calling preinit hooks
INFO: enabled root cache
INFO: enabled package manager cache
Start: cleaning package manager metadata
Finish: cleaning package manager metadata
INFO: enabled HW Info plugin
INFO: Package manager dnf4 detected and used (direct choice)
INFO: Buildroot is handled by package management installed into bootstrap:
  rpm-4.19.1.1-1.fc39.ppc64le
  rpm-sequoia-1.7.0-1.fc39.ppc64le
  python3-dnf-4.21.1-1.fc39.noarch
  python3-dnf-plugins-core-4.9.0-1.fc39.noarch
Start: installing minimal buildroot with dnf
No matches found for the following disable plugin patterns: local, spacewalk, versionlock
Copr repository                                 2.7 MB/s | 401 kB     00:00    
fedora                                           20 MB/s |  83 MB     00:04    
updates                                          16 MB/s |  39 MB     00:02    
Last metadata expiration check: 0:00:01 ago on Mon Dec  2 12:33:02 2024.
Dependencies resolved.
======================================================================================
 Package                           Arch     Version                     Repo      Size
======================================================================================
Installing group/module packages:
 bash                              ppc64le  5.2.26-1.fc39               updates  1.9 M
 bzip2                             ppc64le  1.0.8-16.fc39               fedora    53 k
 coreutils                         ppc64le  9.3-7.fc39                  updates  1.4 M
 cpio                              ppc64le  2.14-4.fc39                 fedora   286 k
 diffutils                         ppc64le  3.10-3.fc39                 fedora   408 k
 fedora-release-common             noarch   39-36                       updates   19 k
 findutils                         ppc64le  1:4.9.0-6.fc39              updates  539 k
 gawk                              ppc64le  5.2.2-2.fc39                fedora   1.1 M
 glibc-minimal-langpack            ppc64le  2.38-19.fc39                updates   65 k
 grep                              ppc64le  3.11-3.fc39                 fedora   308 k
 gzip                              ppc64le  1.12-6.fc39                 fedora   170 k
 info                              ppc64le  7.0.3-3.fc39                fedora   200 k
 patch                             ppc64le  2.7.6-22.fc39               fedora   137 k
 redhat-rpm-config                 noarch   266-1.fc39                  updates   78 k
 rpm-build                         ppc64le  4.19.1.1-1.fc39             updates   80 k
 sed                               ppc64le  4.8-14.fc39                 fedora   312 k
 shadow-utils                      ppc64le  2:4.14.0-2.fc39             updates  1.3 M
 tar                               ppc64le  2:1.35-2.fc39               fedora   884 k
 unzip                             ppc64le  6.0-62.fc39                 fedora   190 k
 util-linux                        ppc64le  2.39.4-1.fc39               updates  1.3 M
 which                             ppc64le  2.21-40.fc39                fedora    43 k
 xz                                ppc64le  5.4.4-1.fc39                fedora   559 k
Installing dependencies:
 alternatives                      ppc64le  1.26-1.fc39                 updates   41 k
 ansible-srpm-macros               noarch   1-12.fc39                   updates   21 k
 audit-libs                        ppc64le  3.1.5-1.fc39                updates  141 k
 authselect                        ppc64le  1.4.3-1.fc39                fedora   151 k
 authselect-libs                   ppc64le  1.4.3-1.fc39                fedora   253 k
 basesystem                        noarch   11-18.fc39                  fedora   7.2 k
 binutils                          ppc64le  2.40-14.fc39                updates  6.4 M
 binutils-gold                     ppc64le  2.40-14.fc39                updates  1.1 M
 bzip2-libs                        ppc64le  1.0.8-16.fc39               fedora    47 k
 ca-certificates                   noarch   2024.2.69_v8.0.401-1.0.fc39 updates  871 k
 coreutils-common                  ppc64le  9.3-7.fc39                  updates  2.1 M
 cracklib                          ppc64le  2.9.11-2.fc39               fedora    96 k
 crypto-policies                   noarch   20231204-1.git1e3a2e4.fc39  updates  100 k
 curl                              ppc64le  8.2.1-5.fc39                updates  347 k
 cyrus-sasl-lib                    ppc64le  2.1.28-11.fc39              fedora   877 k
 debugedit                         ppc64le  5.0-12.fc39                 updates   81 k
 dwz                               ppc64le  0.15-3.fc39                 fedora   147 k
 ed                                ppc64le  1.19-4.fc39                 fedora    81 k
 efi-srpm-macros                   noarch   5-9.fc39                    fedora    22 k
 elfutils                          ppc64le  0.192-4.fc39                updates  598 k
 elfutils-debuginfod-client        ppc64le  0.192-4.fc39                updates   46 k
 elfutils-default-yama-scope       noarch   0.192-4.fc39                updates   12 k
 elfutils-libelf                   ppc64le  0.192-4.fc39                updates  217 k
 elfutils-libs                     ppc64le  0.192-4.fc39                updates  304 k
 fedora-gpg-keys                   noarch   39-2                        updates  130 k
 fedora-release                    noarch   39-36                       updates  8.6 k
 fedora-release-identity-basic     noarch   39-36                       updates  9.4 k
 fedora-repos                      noarch   39-2                        updates  9.3 k
 file                              ppc64le  5.44-5.fc39                 fedora    50 k
 file-libs                         ppc64le  5.44-5.fc39                 fedora   742 k
 filesystem                        ppc64le  3.18-6.fc39                 fedora   1.1 M
 fonts-srpm-macros                 noarch   1:2.0.5-12.fc39             fedora    26 k
 forge-srpm-macros                 noarch   0.3.1-1.fc39                updates   19 k
 fpc-srpm-macros                   noarch   1.3-8.fc39                  fedora   7.4 k
 gdb-minimal                       ppc64le  15.1-1.fc39                 updates  4.3 M
 gdbm-libs                         ppc64le  1:1.23-4.fc39               fedora    62 k
 ghc-srpm-macros                   noarch   1.6.1-2.fc39                fedora   7.8 k
 glibc                             ppc64le  2.38-19.fc39                updates  2.2 M
 glibc-common                      ppc64le  2.38-19.fc39                updates  358 k
 glibc-gconv-extra                 ppc64le  2.38-19.fc39                updates  2.0 M
 gmp                               ppc64le  1:6.2.1-5.fc39              fedora   304 k
 gnat-srpm-macros                  noarch   6-3.fc39                    fedora   8.8 k
 go-srpm-macros                    noarch   3.5.0-1.fc39                updates   28 k
 jansson                           ppc64le  2.13.1-7.fc39               fedora    49 k
 json-c                            ppc64le  0.17-1.fc39                 fedora    49 k
 kernel-srpm-macros                noarch   1.0-20.fc39                 fedora    10 k
 keyutils-libs                     ppc64le  1.6.3-1.fc39                updates   33 k
 krb5-libs                         ppc64le  1.21.3-2.fc39               updates  853 k
 libacl                            ppc64le  2.3.1-9.fc39                updates   26 k
 libarchive                        ppc64le  3.7.1-3.fc39                updates  476 k
 libattr                           ppc64le  2.5.1-8.fc39                fedora    19 k
 libblkid                          ppc64le  2.39.4-1.fc39               updates  134 k
 libbrotli                         ppc64le  1.1.0-1.fc39                fedora   380 k
 libcap                            ppc64le  2.48-9.fc39                 updates   73 k
 libcap-ng                         ppc64le  0.8.3-8.fc39                fedora    33 k
 libcom_err                        ppc64le  1.47.0-2.fc39               fedora    27 k
 libcurl                           ppc64le  8.2.1-5.fc39                updates  358 k
 libdb                             ppc64le  5.3.28-56.fc39              fedora   838 k
 libeconf                          ppc64le  0.5.2-2.fc39                updates   34 k
 libevent                          ppc64le  2.1.12-9.fc39               fedora   275 k
 libfdisk                          ppc64le  2.39.4-1.fc39               updates  178 k
 libffi                            ppc64le  3.4.4-4.fc39                fedora    38 k
 libgcc                            ppc64le  13.3.1-3.fc39               updates  115 k
 libgomp                           ppc64le  13.3.1-3.fc39               updates  343 k
 libidn2                           ppc64le  2.3.7-1.fc39                updates  122 k
 libmount                          ppc64le  2.39.4-1.fc39               updates  176 k
 libnghttp2                        ppc64le  1.55.1-5.fc39               updates   85 k
 libnsl2                           ppc64le  2.0.0-6.fc39                fedora    32 k
 libpkgconf                        ppc64le  1.9.5-2.fc39                fedora    42 k
 libpsl                            ppc64le  0.21.2-4.fc39               fedora    65 k
 libpwquality                      ppc64le  1.4.5-6.fc39                fedora   123 k
 librtas                           ppc64le  2.0.4-3.fc39                fedora    70 k
 libselinux                        ppc64le  3.5-5.fc39                  fedora   100 k
 libsemanage                       ppc64le  3.5-4.fc39                  fedora   131 k
 libsepol                          ppc64le  3.5-2.fc39                  fedora   356 k
 libsigsegv                        ppc64le  2.14-5.fc39                 fedora    28 k
 libsmartcols                      ppc64le  2.39.4-1.fc39               updates   73 k
 libssh                            ppc64le  0.10.6-2.fc39               updates  240 k
 libssh-config                     noarch   0.10.6-2.fc39               updates  9.0 k
 libstdc++                         ppc64le  13.3.1-3.fc39               updates  1.0 M
 libtasn1                          ppc64le  4.19.0-3.fc39               fedora    80 k
 libtirpc                          ppc64le  1.3.6-0.fc39                updates  108 k
 libtool-ltdl                      ppc64le  2.4.7-7.fc39                fedora    40 k
 libunistring                      ppc64le  1.1-5.fc39                  fedora   578 k
 libutempter                       ppc64le  1.2.1-10.fc39               fedora    27 k
 libuuid                           ppc64le  2.39.4-1.fc39               updates   29 k
 libverto                          ppc64le  0.3.2-6.fc39                fedora    22 k
 libxcrypt                         ppc64le  4.4.36-2.fc39               fedora   132 k
 libxml2                           ppc64le  2.10.4-3.fc39               fedora   780 k
 libzstd                           ppc64le  1.5.6-1.fc39                updates  339 k
 lua-libs                          ppc64le  5.4.6-3.fc39                fedora   149 k
 lua-srpm-macros                   noarch   1-13.fc39                   updates  8.7 k
 lz4-libs                          ppc64le  1.9.4-4.fc39                fedora    85 k
 mpfr                              ppc64le  4.2.0-3.fc39                fedora   353 k
 ncurses-base                      noarch   6.4-7.20230520.fc39.1       updates   88 k
 ncurses-libs                      ppc64le  6.4-7.20230520.fc39.1       updates  380 k
 ocaml-srpm-macros                 noarch   8-2.fc39                    fedora    14 k
 openblas-srpm-macros              noarch   2-14.fc39                   fedora   7.5 k
 openldap                          ppc64le  2.6.7-1.fc39                updates  287 k
 openssl-libs                      ppc64le  1:3.1.4-4.fc39              updates  2.3 M
 p11-kit                           ppc64le  0.25.5-1.fc39               updates  519 k
 p11-kit-trust                     ppc64le  0.25.5-1.fc39               updates  153 k
 package-notes-srpm-macros         noarch   0.5-9.fc39                  fedora    11 k
 pam                               ppc64le  1.5.3-3.fc39                updates  586 k
 pam-libs                          ppc64le  1.5.3-3.fc39                updates   63 k
 pcre2                             ppc64le  10.42-1.fc39.2              fedora   241 k
 pcre2-syntax                      noarch   10.42-1.fc39.2              fedora   143 k
 perl-srpm-macros                  noarch   1-51.fc39                   fedora   8.0 k
 pkgconf                           ppc64le  1.9.5-2.fc39                fedora    43 k
 pkgconf-m4                        noarch   1.9.5-2.fc39                fedora    14 k
 pkgconf-pkg-config                ppc64le  1.9.5-2.fc39                fedora   9.6 k
 popt                              ppc64le  1.19-3.fc39                 fedora    71 k
 publicsuffix-list-dafsa           noarch   20240107-1.fc39             updates   58 k
 pyproject-srpm-macros             noarch   1.16.0-1.fc39               updates   14 k
 python-srpm-macros                noarch   3.12-8.fc39                 updates   23 k
 qt5-srpm-macros                   noarch   5.15.14-2.fc39              updates  8.9 k
 qt6-srpm-macros                   noarch   6.6.2-1.fc39                updates  8.9 k
 readline                          ppc64le  8.2-6.fc39                  updates  229 k
 rpm                               ppc64le  4.19.1.1-1.fc39             updates  539 k
 rpm-build-libs                    ppc64le  4.19.1.1-1.fc39             updates  102 k
 rpm-libs                          ppc64le  4.19.1.1-1.fc39             updates  356 k
 rpm-sequoia                       ppc64le  1.7.0-1.fc39                updates  1.6 M
 rpmautospec-rpm-macros            noarch   0.7.3-1.fc39                updates   11 k
 rust-srpm-macros                  noarch   26.3-1.fc39                 updates   13 k
 setup                             noarch   2.14.4-1.fc39               fedora   154 k
 sqlite-libs                       ppc64le  3.42.0-7.fc39               fedora   789 k
 systemd-libs                      ppc64le  254.20-1.fc39               updates  727 k
 util-linux-core                   ppc64le  2.39.4-1.fc39               updates  550 k
 xxhash-libs                       ppc64le  0.8.2-4.fc39                updates   37 k
 xz-libs                           ppc64le  5.4.4-1.fc39                fedora   121 k
 zip                               ppc64le  3.0-39.fc39                 fedora   274 k
 zlib                              ppc64le  1.2.13-4.fc39               fedora   100 k
 zstd                              ppc64le  1.5.6-1.fc39                updates  506 k
Installing Groups:
 Buildsystem building group                                                           

Transaction Summary
======================================================================================
Install  155 Packages

Total download size: 57 M
Installed size: 326 M
Downloading Packages:
(1/155): basesystem-11-18.fc39.noarch.rpm       162 kB/s | 7.2 kB     00:00    
(2/155): authselect-1.4.3-1.fc39.ppc64le.rpm    1.5 MB/s | 151 kB     00:00    
(3/155): bzip2-1.0.8-16.fc39.ppc64le.rpm        854 kB/s |  53 kB     00:00    
(4/155): bzip2-libs-1.0.8-16.fc39.ppc64le.rpm   2.5 MB/s |  47 kB     00:00    
(5/155): authselect-libs-1.4.3-1.fc39.ppc64le.r 1.9 MB/s | 253 kB     00:00    
(6/155): cracklib-2.9.11-2.fc39.ppc64le.rpm     4.3 MB/s |  96 kB     00:00    
(7/155): cpio-2.14-4.fc39.ppc64le.rpm           4.1 MB/s | 286 kB     00:00    
(8/155): diffutils-3.10-3.fc39.ppc64le.rpm      7.4 MB/s | 408 kB     00:00    
(9/155): cyrus-sasl-lib-2.1.28-11.fc39.ppc64le.  11 MB/s | 877 kB     00:00    
(10/155): dwz-0.15-3.fc39.ppc64le.rpm           4.3 MB/s | 147 kB     00:00    
(11/155): ed-1.19-4.fc39.ppc64le.rpm            4.0 MB/s |  81 kB     00:00    
(12/155): efi-srpm-macros-5-9.fc39.noarch.rpm   792 kB/s |  22 kB     00:00    
(13/155): file-5.44-5.fc39.ppc64le.rpm          1.7 MB/s |  50 kB     00:00    
(14/155): fonts-srpm-macros-2.0.5-12.fc39.noarc 848 kB/s |  26 kB     00:00    
(15/155): file-libs-5.44-5.fc39.ppc64le.rpm      11 MB/s | 742 kB     00:00    
(16/155): filesystem-3.18-6.fc39.ppc64le.rpm     18 MB/s | 1.1 MB     00:00    
(17/155): fpc-srpm-macros-1.3-8.fc39.noarch.rpm 263 kB/s | 7.4 kB     00:00    
(18/155): gdbm-libs-1.23-4.fc39.ppc64le.rpm     2.6 MB/s |  62 kB     00:00    
(19/155): ghc-srpm-macros-1.6.1-2.fc39.noarch.r 327 kB/s | 7.8 kB     00:00    
(20/155): gnat-srpm-macros-6-3.fc39.noarch.rpm  328 kB/s | 8.8 kB     00:00    
(21/155): gmp-6.2.1-5.fc39.ppc64le.rpm          9.9 MB/s | 304 kB     00:00    
(22/155): gawk-5.2.2-2.fc39.ppc64le.rpm          13 MB/s | 1.1 MB     00:00    
(23/155): grep-3.11-3.fc39.ppc64le.rpm           11 MB/s | 308 kB     00:00    
(24/155): gzip-1.12-6.fc39.ppc64le.rpm          6.2 MB/s | 170 kB     00:00    
(25/155): info-7.0.3-3.fc39.ppc64le.rpm         7.4 MB/s | 200 kB     00:00    
(26/155): jansson-2.13.1-7.fc39.ppc64le.rpm     2.2 MB/s |  49 kB     00:00    
(27/155): json-c-0.17-1.fc39.ppc64le.rpm        2.2 MB/s |  49 kB     00:00    
(28/155): kernel-srpm-macros-1.0-20.fc39.noarch 599 kB/s |  10 kB     00:00    
(29/155): libattr-2.5.1-8.fc39.ppc64le.rpm      906 kB/s |  19 kB     00:00    
(30/155): libbrotli-1.1.0-1.fc39.ppc64le.rpm     14 MB/s | 380 kB     00:00    
(31/155): libcap-ng-0.8.3-8.fc39.ppc64le.rpm    1.4 MB/s |  33 kB     00:00    
(32/155): libcom_err-1.47.0-2.fc39.ppc64le.rpm  1.1 MB/s |  27 kB     00:00    
(33/155): libevent-2.1.12-9.fc39.ppc64le.rpm    9.2 MB/s | 275 kB     00:00    
(34/155): libffi-3.4.4-4.fc39.ppc64le.rpm       1.5 MB/s |  38 kB     00:00    
(35/155): libnsl2-2.0.0-6.fc39.ppc64le.rpm      1.4 MB/s |  32 kB     00:00    
(36/155): libdb-5.3.28-56.fc39.ppc64le.rpm       14 MB/s | 838 kB     00:00    
(37/155): libpkgconf-1.9.5-2.fc39.ppc64le.rpm   2.0 MB/s |  42 kB     00:00    
(38/155): libpsl-0.21.2-4.fc39.ppc64le.rpm      2.5 MB/s |  65 kB     00:00    
(39/155): libpwquality-1.4.5-6.fc39.ppc64le.rpm 5.3 MB/s | 123 kB     00:00    
(40/155): librtas-2.0.4-3.fc39.ppc64le.rpm      2.8 MB/s |  70 kB     00:00    
(41/155): libsemanage-3.5-4.fc39.ppc64le.rpm    6.0 MB/s | 131 kB     00:00    
(42/155): libselinux-3.5-5.fc39.ppc64le.rpm     3.9 MB/s | 100 kB     00:00    
(43/155): libsigsegv-2.14-5.fc39.ppc64le.rpm    1.4 MB/s |  28 kB     00:00    
(44/155): libtasn1-4.19.0-3.fc39.ppc64le.rpm    3.6 MB/s |  80 kB     00:00    
(45/155): libsepol-3.5-2.fc39.ppc64le.rpm       7.1 MB/s | 356 kB     00:00    
(46/155): libtool-ltdl-2.4.7-7.fc39.ppc64le.rpm 1.9 MB/s |  40 kB     00:00    
(47/155): libunistring-1.1-5.fc39.ppc64le.rpm    18 MB/s | 578 kB     00:00    
(48/155): libutempter-1.2.1-10.fc39.ppc64le.rpm 1.0 MB/s |  27 kB     00:00    
(49/155): libverto-0.3.2-6.fc39.ppc64le.rpm     990 kB/s |  22 kB     00:00    
(50/155): libxcrypt-4.4.36-2.fc39.ppc64le.rpm   5.3 MB/s | 132 kB     00:00    
(51/155): lua-libs-5.4.6-3.fc39.ppc64le.rpm     5.3 MB/s | 149 kB     00:00    
(52/155): lz4-libs-1.9.4-4.fc39.ppc64le.rpm     3.4 MB/s |  85 kB     00:00    
(53/155): mpfr-4.2.0-3.fc39.ppc64le.rpm          13 MB/s | 353 kB     00:00    
(54/155): libxml2-2.10.4-3.fc39.ppc64le.rpm      10 MB/s | 780 kB     00:00    
(55/155): ocaml-srpm-macros-8-2.fc39.noarch.rpm 527 kB/s |  14 kB     00:00    
(56/155): openblas-srpm-macros-2-14.fc39.noarch 378 kB/s | 7.5 kB     00:00    
(57/155): package-notes-srpm-macros-0.5-9.fc39. 536 kB/s |  11 kB     00:00    
(58/155): patch-2.7.6-22.fc39.ppc64le.rpm       6.0 MB/s | 137 kB     00:00    
(59/155): pcre2-10.42-1.fc39.2.ppc64le.rpm       11 MB/s | 241 kB     00:00    
(60/155): pcre2-syntax-10.42-1.fc39.2.noarch.rp 5.9 MB/s | 143 kB     00:00    
(61/155): perl-srpm-macros-1-51.fc39.noarch.rpm 350 kB/s | 8.0 kB     00:00    
(62/155): pkgconf-1.9.5-2.fc39.ppc64le.rpm      2.3 MB/s |  43 kB     00:00    
(63/155): pkgconf-m4-1.9.5-2.fc39.noarch.rpm    572 kB/s |  14 kB     00:00    
(64/155): popt-1.19-3.fc39.ppc64le.rpm          3.1 MB/s |  71 kB     00:00    
(65/155): pkgconf-pkg-config-1.9.5-2.fc39.ppc64 362 kB/s | 9.6 kB     00:00    
(66/155): setup-2.14.4-1.fc39.noarch.rpm        6.9 MB/s | 154 kB     00:00    
(67/155): sed-4.8-14.fc39.ppc64le.rpm            10 MB/s | 312 kB     00:00    
(68/155): unzip-6.0-62.fc39.ppc64le.rpm         6.3 MB/s | 190 kB     00:00    
(69/155): tar-1.35-2.fc39.ppc64le.rpm            15 MB/s | 884 kB     00:00    
(70/155): sqlite-libs-3.42.0-7.fc39.ppc64le.rpm 9.4 MB/s | 789 kB     00:00    
(71/155): which-2.21-40.fc39.ppc64le.rpm        1.6 MB/s |  43 kB     00:00    
(72/155): xz-libs-5.4.4-1.fc39.ppc64le.rpm      4.4 MB/s | 121 kB     00:00    
(73/155): zip-3.0-39.fc39.ppc64le.rpm           8.8 MB/s | 274 kB     00:00    
(74/155): xz-5.4.4-1.fc39.ppc64le.rpm            13 MB/s | 559 kB     00:00    
(75/155): zlib-1.2.13-4.fc39.ppc64le.rpm        4.2 MB/s | 100 kB     00:00    
(76/155): ansible-srpm-macros-1-12.fc39.noarch.  89 kB/s |  21 kB     00:00    
(77/155): alternatives-1.26-1.fc39.ppc64le.rpm  152 kB/s |  41 kB     00:00    
(78/155): audit-libs-3.1.5-1.fc39.ppc64le.rpm   334 kB/s | 141 kB     00:00    
(79/155): binutils-gold-2.40-14.fc39.ppc64le.rp 3.2 MB/s | 1.1 MB     00:00    
(80/155): bash-5.2.26-1.fc39.ppc64le.rpm        2.6 MB/s | 1.9 MB     00:00    
(81/155): ca-certificates-2024.2.69_v8.0.401-1. 3.2 MB/s | 871 kB     00:00    
(82/155): coreutils-9.3-7.fc39.ppc64le.rpm      5.0 MB/s | 1.4 MB     00:00    
(83/155): crypto-policies-20231204-1.git1e3a2e4 1.2 MB/s | 100 kB     00:00    
(84/155): binutils-2.40-14.fc39.ppc64le.rpm     5.6 MB/s | 6.4 MB     00:01    
(85/155): curl-8.2.1-5.fc39.ppc64le.rpm         3.4 MB/s | 347 kB     00:00    
(86/155): coreutils-common-9.3-7.fc39.ppc64le.r 5.5 MB/s | 2.1 MB     00:00    
(87/155): debugedit-5.0-12.fc39.ppc64le.rpm     1.0 MB/s |  81 kB     00:00    
(88/155): elfutils-0.192-4.fc39.ppc64le.rpm     6.0 MB/s | 598 kB     00:00    
(89/155): elfutils-debuginfod-client-0.192-4.fc 540 kB/s |  46 kB     00:00    
(90/155): elfutils-default-yama-scope-0.192-4.f 155 kB/s |  12 kB     00:00    
(91/155): elfutils-libelf-0.192-4.fc39.ppc64le. 2.2 MB/s | 217 kB     00:00    
(92/155): fedora-gpg-keys-39-2.noarch.rpm       1.5 MB/s | 130 kB     00:00    
(93/155): fedora-release-39-36.noarch.rpm       117 kB/s | 8.6 kB     00:00    
(94/155): elfutils-libs-0.192-4.fc39.ppc64le.rp 1.5 MB/s | 304 kB     00:00    
(95/155): fedora-release-common-39-36.noarch.rp 247 kB/s |  19 kB     00:00    
(96/155): fedora-release-identity-basic-39-36.n 109 kB/s | 9.4 kB     00:00    
(97/155): fedora-repos-39-2.noarch.rpm          126 kB/s | 9.3 kB     00:00    
(98/155): findutils-4.9.0-6.fc39.ppc64le.rpm    4.6 MB/s | 539 kB     00:00    
(99/155): glibc-2.38-19.fc39.ppc64le.rpm         11 MB/s | 2.2 MB     00:00    
(100/155): glibc-common-2.38-19.fc39.ppc64le.rp 3.8 MB/s | 358 kB     00:00    
(101/155): forge-srpm-macros-0.3.1-1.fc39.noarc  43 kB/s |  19 kB     00:00    
(102/155): glibc-minimal-langpack-2.38-19.fc39. 844 kB/s |  65 kB     00:00    
(103/155): glibc-gconv-extra-2.38-19.fc39.ppc64  11 MB/s | 2.0 MB     00:00    
(104/155): go-srpm-macros-3.5.0-1.fc39.noarch.r 375 kB/s |  28 kB     00:00    
(105/155): keyutils-libs-1.6.3-1.fc39.ppc64le.r 442 kB/s |  33 kB     00:00    
(106/155): gdb-minimal-15.1-1.fc39.ppc64le.rpm  6.8 MB/s | 4.3 MB     00:00    
(107/155): krb5-libs-1.21.3-2.fc39.ppc64le.rpm  8.0 MB/s | 853 kB     00:00    
(108/155): libacl-2.3.1-9.fc39.ppc64le.rpm      344 kB/s |  26 kB     00:00    
(109/155): libarchive-3.7.1-3.fc39.ppc64le.rpm  3.4 MB/s | 476 kB     00:00    
(110/155): libcap-2.48-9.fc39.ppc64le.rpm       902 kB/s |  73 kB     00:00    
(111/155): libblkid-2.39.4-1.fc39.ppc64le.rpm   1.6 MB/s | 134 kB     00:00    
(112/155): libeconf-0.5.2-2.fc39.ppc64le.rpm    420 kB/s |  34 kB     00:00    
(113/155): libcurl-8.2.1-5.fc39.ppc64le.rpm     3.9 MB/s | 358 kB     00:00    
(114/155): libfdisk-2.39.4-1.fc39.ppc64le.rpm   1.8 MB/s | 178 kB     00:00    
(115/155): libgcc-13.3.1-3.fc39.ppc64le.rpm     1.4 MB/s | 115 kB     00:00    
(116/155): libgomp-13.3.1-3.fc39.ppc64le.rpm    3.7 MB/s | 343 kB     00:00    
(117/155): libidn2-2.3.7-1.fc39.ppc64le.rpm     1.4 MB/s | 122 kB     00:00    
(118/155): libmount-2.39.4-1.fc39.ppc64le.rpm   2.1 MB/s | 176 kB     00:00    
(119/155): libnghttp2-1.55.1-5.fc39.ppc64le.rpm 1.1 MB/s |  85 kB     00:00    
(120/155): libsmartcols-2.39.4-1.fc39.ppc64le.r 908 kB/s |  73 kB     00:00    
(121/155): libssh-config-0.10.6-2.fc39.noarch.r 120 kB/s | 9.0 kB     00:00    
(122/155): libssh-0.10.6-2.fc39.ppc64le.rpm     2.6 MB/s | 240 kB     00:00    
(123/155): libtirpc-1.3.6-0.fc39.ppc64le.rpm    1.4 MB/s | 108 kB     00:00    
(124/155): libuuid-2.39.4-1.fc39.ppc64le.rpm    376 kB/s |  29 kB     00:00    
(125/155): libzstd-1.5.6-1.fc39.ppc64le.rpm     3.7 MB/s | 339 kB     00:00    
(126/155): lua-srpm-macros-1-13.fc39.noarch.rpm 107 kB/s | 8.7 kB     00:00    
(127/155): libstdc++-13.3.1-3.fc39.ppc64le.rpm  3.5 MB/s | 1.0 MB     00:00    
(128/155): ncurses-base-6.4-7.20230520.fc39.1.n 1.1 MB/s |  88 kB     00:00    
(129/155): ncurses-libs-6.4-7.20230520.fc39.1.p 4.4 MB/s | 380 kB     00:00    
(130/155): openldap-2.6.7-1.fc39.ppc64le.rpm    2.6 MB/s | 287 kB     00:00    
(131/155): p11-kit-0.25.5-1.fc39.ppc64le.rpm    5.6 MB/s | 519 kB     00:00    
(132/155): p11-kit-trust-0.25.5-1.fc39.ppc64le. 1.6 MB/s | 153 kB     00:00    
(133/155): openssl-libs-3.1.4-4.fc39.ppc64le.rp  12 MB/s | 2.3 MB     00:00    
(134/155): pam-1.5.3-3.fc39.ppc64le.rpm         6.2 MB/s | 586 kB     00:00    
(135/155): pam-libs-1.5.3-3.fc39.ppc64le.rpm    788 kB/s |  63 kB     00:00    
(136/155): publicsuffix-list-dafsa-20240107-1.f 762 kB/s |  58 kB     00:00    
(137/155): pyproject-srpm-macros-1.16.0-1.fc39. 185 kB/s |  14 kB     00:00    
(138/155): python-srpm-macros-3.12-8.fc39.noarc 309 kB/s |  23 kB     00:00    
(139/155): qt5-srpm-macros-5.15.14-2.fc39.noarc 119 kB/s | 8.9 kB     00:00    
(140/155): qt6-srpm-macros-6.6.2-1.fc39.noarch. 121 kB/s | 8.9 kB     00:00    
(141/155): redhat-rpm-config-266-1.fc39.noarch. 1.0 MB/s |  78 kB     00:00    
(142/155): rpm-4.19.1.1-1.fc39.ppc64le.rpm      5.8 MB/s | 539 kB     00:00    
(143/155): readline-8.2-6.fc39.ppc64le.rpm      2.2 MB/s | 229 kB     00:00    
(144/155): rpm-build-4.19.1.1-1.fc39.ppc64le.rp 1.0 MB/s |  80 kB     00:00    
(145/155): rpm-build-libs-4.19.1.1-1.fc39.ppc64 1.3 MB/s | 102 kB     00:00    
(146/155): rpm-libs-4.19.1.1-1.fc39.ppc64le.rpm 3.0 MB/s | 356 kB     00:00    
(147/155): rpmautospec-rpm-macros-0.7.3-1.fc39. 137 kB/s |  11 kB     00:00    
(148/155): rust-srpm-macros-26.3-1.fc39.noarch. 156 kB/s |  13 kB     00:00    
(149/155): rpm-sequoia-1.7.0-1.fc39.ppc64le.rpm  10 MB/s | 1.6 MB     00:00    
(150/155): util-linux-2.39.4-1.fc39.ppc64le.rpm 9.3 MB/s | 1.3 MB     00:00    
(151/155): shadow-utils-4.14.0-2.fc39.ppc64le.r 5.1 MB/s | 1.3 MB     00:00    
(152/155): xxhash-libs-0.8.2-4.fc39.ppc64le.rpm 465 kB/s |  37 kB     00:00    
(153/155): systemd-libs-254.20-1.fc39.ppc64le.r 2.2 MB/s | 727 kB     00:00    
(154/155): util-linux-core-2.39.4-1.fc39.ppc64l 3.0 MB/s | 550 kB     00:00    
(155/155): zstd-1.5.6-1.fc39.ppc64le.rpm        3.3 MB/s | 506 kB     00:00    
--------------------------------------------------------------------------------
Total                                            11 MB/s |  57 MB     00:05     
fedora                                          1.6 MB/s | 1.6 kB     00:00    
Importing GPG key 0x18B8E74C:
 Userid     : "Fedora (39) <fedora-39-primary@fedoraproject.org>"
 Fingerprint: E8F2 3996 F232 1864 0CB4 4CBE 75CF 5AC4 18B8 E74C
 From       : /usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-39-primary
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Running scriptlet: filesystem-3.18-6.fc39.ppc64le                         1/1 
  Preparing        :                                                        1/1 
  Installing       : libgcc-13.3.1-3.fc39.ppc64le                         1/155 
  Running scriptlet: libgcc-13.3.1-3.fc39.ppc64le                         1/155 
  Installing       : crypto-policies-20231204-1.git1e3a2e4.fc39.noarc     2/155 
  Running scriptlet: crypto-policies-20231204-1.git1e3a2e4.fc39.noarc     2/155 
  Installing       : fedora-release-identity-basic-39-36.noarch           3/155 
  Installing       : fedora-gpg-keys-39-2.noarch                          4/155 
  Installing       : fedora-repos-39-2.noarch                             5/155 
  Installing       : fedora-release-common-39-36.noarch                   6/155 
  Installing       : fedora-release-39-36.noarch                          7/155 
  Installing       : setup-2.14.4-1.fc39.noarch                           8/155 
warning: /etc/hosts created as /etc/hosts.rpmnew

  Running scriptlet: setup-2.14.4-1.fc39.noarch                           8/155 
  Installing       : filesystem-3.18-6.fc39.ppc64le                       9/155 
  Installing       : basesystem-11-18.fc39.noarch                        10/155 
  Installing       : rust-srpm-macros-26.3-1.fc39.noarch                 11/155 
  Installing       : qt6-srpm-macros-6.6.2-1.fc39.noarch                 12/155 
  Installing       : qt5-srpm-macros-5.15.14-2.fc39.noarch               13/155 
  Installing       : publicsuffix-list-dafsa-20240107-1.fc39.noarch      14/155 
  Installing       : ncurses-base-6.4-7.20230520.fc39.1.noarch           15/155 
  Installing       : glibc-gconv-extra-2.38-19.fc39.ppc64le              16/155 
  Running scriptlet: glibc-gconv-extra-2.38-19.fc39.ppc64le              16/155 
  Installing       : glibc-minimal-langpack-2.38-19.fc39.ppc64le         17/155 
  Installing       : glibc-common-2.38-19.fc39.ppc64le                   18/155 
  Running scriptlet: glibc-2.38-19.fc39.ppc64le                          19/155 
  Installing       : glibc-2.38-19.fc39.ppc64le                          19/155 
  Running scriptlet: glibc-2.38-19.fc39.ppc64le                          19/155 
  Installing       : ncurses-libs-6.4-7.20230520.fc39.1.ppc64le          20/155 
  Installing       : bash-5.2.26-1.fc39.ppc64le                          21/155 
  Running scriptlet: bash-5.2.26-1.fc39.ppc64le                          21/155 
  Installing       : zlib-1.2.13-4.fc39.ppc64le                          22/155 
  Installing       : xz-libs-5.4.4-1.fc39.ppc64le                        23/155 
  Installing       : bzip2-libs-1.0.8-16.fc39.ppc64le                    24/155 
  Installing       : popt-1.19-3.fc39.ppc64le                            25/155 
  Installing       : libstdc++-13.3.1-3.fc39.ppc64le                     26/155 
  Installing       : libuuid-2.39.4-1.fc39.ppc64le                       27/155 
  Installing       : libzstd-1.5.6-1.fc39.ppc64le                        28/155 
  Installing       : elfutils-libelf-0.192-4.fc39.ppc64le                29/155 
  Installing       : libblkid-2.39.4-1.fc39.ppc64le                      30/155 
  Installing       : readline-8.2-6.fc39.ppc64le                         31/155 
  Installing       : gmp-1:6.2.1-5.fc39.ppc64le                          32/155 
  Installing       : libattr-2.5.1-8.fc39.ppc64le                        33/155 
  Installing       : libacl-2.3.1-9.fc39.ppc64le                         34/155 
  Installing       : libxcrypt-4.4.36-2.fc39.ppc64le                     35/155 
  Installing       : libcap-2.48-9.fc39.ppc64le                          36/155 
  Installing       : lz4-libs-1.9.4-4.fc39.ppc64le                       37/155 
  Installing       : libeconf-0.5.2-2.fc39.ppc64le                       38/155 
  Installing       : systemd-libs-254.20-1.fc39.ppc64le                  39/155 
  Installing       : mpfr-4.2.0-3.fc39.ppc64le                           40/155 
  Installing       : dwz-0.15-3.fc39.ppc64le                             41/155 
  Installing       : unzip-6.0-62.fc39.ppc64le                           42/155 
  Installing       : file-libs-5.44-5.fc39.ppc64le                       43/155 
  Installing       : file-5.44-5.fc39.ppc64le                            44/155 
  Installing       : jansson-2.13.1-7.fc39.ppc64le                       45/155 
  Installing       : libcap-ng-0.8.3-8.fc39.ppc64le                      46/155 
  Installing       : audit-libs-3.1.5-1.fc39.ppc64le                     47/155 
  Installing       : pam-libs-1.5.3-3.fc39.ppc64le                       48/155 
  Installing       : libcom_err-1.47.0-2.fc39.ppc64le                    49/155 
  Installing       : libsepol-3.5-2.fc39.ppc64le                         50/155 
  Installing       : libtasn1-4.19.0-3.fc39.ppc64le                      51/155 
  Installing       : libunistring-1.1-5.fc39.ppc64le                     52/155 
  Installing       : libidn2-2.3.7-1.fc39.ppc64le                        53/155 
  Installing       : lua-libs-5.4.6-3.fc39.ppc64le                       54/155 
  Installing       : alternatives-1.26-1.fc39.ppc64le                    55/155 
  Installing       : libsmartcols-2.39.4-1.fc39.ppc64le                  56/155 
  Installing       : libpsl-0.21.2-4.fc39.ppc64le                        57/155 
  Installing       : zip-3.0-39.fc39.ppc64le                             58/155 
  Installing       : zstd-1.5.6-1.fc39.ppc64le                           59/155 
  Installing       : libfdisk-2.39.4-1.fc39.ppc64le                      60/155 
  Installing       : bzip2-1.0.8-16.fc39.ppc64le                         61/155 
  Installing       : libxml2-2.10.4-3.fc39.ppc64le                       62/155 
  Installing       : sqlite-libs-3.42.0-7.fc39.ppc64le                   63/155 
  Installing       : ed-1.19-4.fc39.ppc64le                              64/155 
  Installing       : elfutils-default-yama-scope-0.192-4.fc39.noarch     65/155 
  Running scriptlet: elfutils-default-yama-scope-0.192-4.fc39.noarch     65/155 
  Installing       : cpio-2.14-4.fc39.ppc64le                            66/155 
  Installing       : diffutils-3.10-3.fc39.ppc64le                       67/155 
  Installing       : gdbm-libs-1:1.23-4.fc39.ppc64le                     68/155 
  Installing       : cyrus-sasl-lib-2.1.28-11.fc39.ppc64le               69/155 
  Installing       : json-c-0.17-1.fc39.ppc64le                          70/155 
  Installing       : libbrotli-1.1.0-1.fc39.ppc64le                      71/155 
  Installing       : libdb-5.3.28-56.fc39.ppc64le                        72/155 
  Installing       : libffi-3.4.4-4.fc39.ppc64le                         73/155 
  Installing       : p11-kit-0.25.5-1.fc39.ppc64le                       74/155 
  Installing       : p11-kit-trust-0.25.5-1.fc39.ppc64le                 75/155 
  Running scriptlet: p11-kit-trust-0.25.5-1.fc39.ppc64le                 75/155 
  Installing       : libpkgconf-1.9.5-2.fc39.ppc64le                     76/155 
  Installing       : pkgconf-1.9.5-2.fc39.ppc64le                        77/155 
  Installing       : librtas-2.0.4-3.fc39.ppc64le                        78/155 
  Running scriptlet: librtas-2.0.4-3.fc39.ppc64le                        78/155 
  Installing       : libsigsegv-2.14-5.fc39.ppc64le                      79/155 
  Installing       : gawk-5.2.2-2.fc39.ppc64le                           80/155 
  Installing       : libtool-ltdl-2.4.7-7.fc39.ppc64le                   81/155 
  Installing       : libverto-0.3.2-6.fc39.ppc64le                       82/155 
  Installing       : keyutils-libs-1.6.3-1.fc39.ppc64le                  83/155 
  Installing       : libgomp-13.3.1-3.fc39.ppc64le                       84/155 
  Installing       : libnghttp2-1.55.1-5.fc39.ppc64le                    85/155 
  Installing       : xxhash-libs-0.8.2-4.fc39.ppc64le                    86/155 
  Installing       : libssh-config-0.10.6-2.fc39.noarch                  87/155 
  Installing       : coreutils-common-9.3-7.fc39.ppc64le                 88/155 
  Installing       : ansible-srpm-macros-1-12.fc39.noarch                89/155 
  Installing       : pkgconf-m4-1.9.5-2.fc39.noarch                      90/155 
  Installing       : pkgconf-pkg-config-1.9.5-2.fc39.ppc64le             91/155 
  Installing       : perl-srpm-macros-1-51.fc39.noarch                   92/155 
  Installing       : pcre2-syntax-10.42-1.fc39.2.noarch                  93/155 
  Installing       : pcre2-10.42-1.fc39.2.ppc64le                        94/155 
  Installing       : libselinux-3.5-5.fc39.ppc64le                       95/155 
  Installing       : sed-4.8-14.fc39.ppc64le                             96/155 
  Installing       : grep-3.11-3.fc39.ppc64le                            97/155 
  Installing       : findutils-1:4.9.0-6.fc39.ppc64le                    98/155 
  Installing       : xz-5.4.4-1.fc39.ppc64le                             99/155 
  Installing       : libmount-2.39.4-1.fc39.ppc64le                     100/155 
  Installing       : util-linux-core-2.39.4-1.fc39.ppc64le              101/155 
  Installing       : openssl-libs-1:3.1.4-4.fc39.ppc64le                102/155 
  Installing       : coreutils-9.3-7.fc39.ppc64le                       103/155 
  Running scriptlet: ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noar   104/155 
  Installing       : ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noar   104/155 
  Running scriptlet: ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noar   104/155 
  Installing       : krb5-libs-1.21.3-2.fc39.ppc64le                    105/155 
  Installing       : libtirpc-1.3.6-0.fc39.ppc64le                      106/155 
  Running scriptlet: authselect-libs-1.4.3-1.fc39.ppc64le               107/155 
  Installing       : authselect-libs-1.4.3-1.fc39.ppc64le               107/155 
  Installing       : gzip-1.12-6.fc39.ppc64le                           108/155 
  Installing       : libarchive-3.7.1-3.fc39.ppc64le                    109/155 
  Installing       : cracklib-2.9.11-2.fc39.ppc64le                     110/155 
  Installing       : libpwquality-1.4.5-6.fc39.ppc64le                  111/155 
  Installing       : authselect-1.4.3-1.fc39.ppc64le                    112/155 
  Installing       : libnsl2-2.0.0-6.fc39.ppc64le                       113/155 
  Installing       : pam-1.5.3-3.fc39.ppc64le                           114/155 
  Installing       : libssh-0.10.6-2.fc39.ppc64le                       115/155 
  Installing       : libevent-2.1.12-9.fc39.ppc64le                     116/155 
  Installing       : openldap-2.6.7-1.fc39.ppc64le                      117/155 
  Installing       : libcurl-8.2.1-5.fc39.ppc64le                       118/155 
  Installing       : elfutils-libs-0.192-4.fc39.ppc64le                 119/155 
  Installing       : elfutils-debuginfod-client-0.192-4.fc39.ppc64le    120/155 
  Installing       : binutils-gold-2.40-14.fc39.ppc64le                 121/155 
  Running scriptlet: binutils-gold-2.40-14.fc39.ppc64le                 121/155 
  Installing       : binutils-2.40-14.fc39.ppc64le                      122/155 
  Running scriptlet: binutils-2.40-14.fc39.ppc64le                      122/155 
  Installing       : elfutils-0.192-4.fc39.ppc64le                      123/155 
  Installing       : gdb-minimal-15.1-1.fc39.ppc64le                    124/155 
  Installing       : debugedit-5.0-12.fc39.ppc64le                      125/155 
  Installing       : curl-8.2.1-5.fc39.ppc64le                          126/155 
  Installing       : rpm-sequoia-1.7.0-1.fc39.ppc64le                   127/155 
  Installing       : rpm-libs-4.19.1.1-1.fc39.ppc64le                   128/155 
  Running scriptlet: rpm-4.19.1.1-1.fc39.ppc64le                        129/155 
  Installing       : rpm-4.19.1.1-1.fc39.ppc64le                        129/155 
  Installing       : efi-srpm-macros-5-9.fc39.noarch                    130/155 
  Installing       : lua-srpm-macros-1-13.fc39.noarch                   131/155 
  Installing       : rpmautospec-rpm-macros-0.7.3-1.fc39.noarch         132/155 
  Installing       : rpm-build-libs-4.19.1.1-1.fc39.ppc64le             133/155 
  Installing       : libsemanage-3.5-4.fc39.ppc64le                     134/155 
  Installing       : shadow-utils-2:4.14.0-2.fc39.ppc64le               135/155 
  Running scriptlet: libutempter-1.2.1-10.fc39.ppc64le                  136/155 
  Installing       : libutempter-1.2.1-10.fc39.ppc64le                  136/155 
  Installing       : patch-2.7.6-22.fc39.ppc64le                        137/155 
  Installing       : tar-2:1.35-2.fc39.ppc64le                          138/155 
  Installing       : package-notes-srpm-macros-0.5-9.fc39.noarch        139/155 
  Installing       : openblas-srpm-macros-2-14.fc39.noarch              140/155 
  Installing       : ocaml-srpm-macros-8-2.fc39.noarch                  141/155 
  Installing       : kernel-srpm-macros-1.0-20.fc39.noarch              142/155 
  Installing       : gnat-srpm-macros-6-3.fc39.noarch                   143/155 
  Installing       : ghc-srpm-macros-1.6.1-2.fc39.noarch                144/155 
  Installing       : fpc-srpm-macros-1.3-8.fc39.noarch                  145/155 
  Installing       : fonts-srpm-macros-1:2.0.5-12.fc39.noarch           146/155 
  Installing       : forge-srpm-macros-0.3.1-1.fc39.noarch              147/155 
  Installing       : go-srpm-macros-3.5.0-1.fc39.noarch                 148/155 
  Installing       : python-srpm-macros-3.12-8.fc39.noarch              149/155 
  Installing       : redhat-rpm-config-266-1.fc39.noarch                150/155 
  Installing       : rpm-build-4.19.1.1-1.fc39.ppc64le                  151/155 
  Installing       : pyproject-srpm-macros-1.16.0-1.fc39.noarch         152/155 
  Installing       : util-linux-2.39.4-1.fc39.ppc64le                   153/155 
  Running scriptlet: util-linux-2.39.4-1.fc39.ppc64le                   153/155 
  Installing       : which-2.21-40.fc39.ppc64le                         154/155 
  Installing       : info-7.0.3-3.fc39.ppc64le                          155/155 
  Running scriptlet: filesystem-3.18-6.fc39.ppc64le                     155/155 
  Running scriptlet: ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noar   155/155 
  Running scriptlet: authselect-libs-1.4.3-1.fc39.ppc64le               155/155 
  Running scriptlet: rpm-4.19.1.1-1.fc39.ppc64le                        155/155 
  Running scriptlet: info-7.0.3-3.fc39.ppc64le                          155/155 
  Verifying        : authselect-1.4.3-1.fc39.ppc64le                      1/155 
  Verifying        : authselect-libs-1.4.3-1.fc39.ppc64le                 2/155 
  Verifying        : basesystem-11-18.fc39.noarch                         3/155 
  Verifying        : bzip2-1.0.8-16.fc39.ppc64le                          4/155 
  Verifying        : bzip2-libs-1.0.8-16.fc39.ppc64le                     5/155 
  Verifying        : cpio-2.14-4.fc39.ppc64le                             6/155 
  Verifying        : cracklib-2.9.11-2.fc39.ppc64le                       7/155 
  Verifying        : cyrus-sasl-lib-2.1.28-11.fc39.ppc64le                8/155 
  Verifying        : diffutils-3.10-3.fc39.ppc64le                        9/155 
  Verifying        : dwz-0.15-3.fc39.ppc64le                             10/155 
  Verifying        : ed-1.19-4.fc39.ppc64le                              11/155 
  Verifying        : efi-srpm-macros-5-9.fc39.noarch                     12/155 
  Verifying        : file-5.44-5.fc39.ppc64le                            13/155 
  Verifying        : file-libs-5.44-5.fc39.ppc64le                       14/155 
  Verifying        : filesystem-3.18-6.fc39.ppc64le                      15/155 
  Verifying        : fonts-srpm-macros-1:2.0.5-12.fc39.noarch            16/155 
  Verifying        : fpc-srpm-macros-1.3-8.fc39.noarch                   17/155 
  Verifying        : gawk-5.2.2-2.fc39.ppc64le                           18/155 
  Verifying        : gdbm-libs-1:1.23-4.fc39.ppc64le                     19/155 
  Verifying        : ghc-srpm-macros-1.6.1-2.fc39.noarch                 20/155 
  Verifying        : gmp-1:6.2.1-5.fc39.ppc64le                          21/155 
  Verifying        : gnat-srpm-macros-6-3.fc39.noarch                    22/155 
  Verifying        : grep-3.11-3.fc39.ppc64le                            23/155 
  Verifying        : gzip-1.12-6.fc39.ppc64le                            24/155 
  Verifying        : info-7.0.3-3.fc39.ppc64le                           25/155 
  Verifying        : jansson-2.13.1-7.fc39.ppc64le                       26/155 
  Verifying        : json-c-0.17-1.fc39.ppc64le                          27/155 
  Verifying        : kernel-srpm-macros-1.0-20.fc39.noarch               28/155 
  Verifying        : libattr-2.5.1-8.fc39.ppc64le                        29/155 
  Verifying        : libbrotli-1.1.0-1.fc39.ppc64le                      30/155 
  Verifying        : libcap-ng-0.8.3-8.fc39.ppc64le                      31/155 
  Verifying        : libcom_err-1.47.0-2.fc39.ppc64le                    32/155 
  Verifying        : libdb-5.3.28-56.fc39.ppc64le                        33/155 
  Verifying        : libevent-2.1.12-9.fc39.ppc64le                      34/155 
  Verifying        : libffi-3.4.4-4.fc39.ppc64le                         35/155 
  Verifying        : libnsl2-2.0.0-6.fc39.ppc64le                        36/155 
  Verifying        : libpkgconf-1.9.5-2.fc39.ppc64le                     37/155 
  Verifying        : libpsl-0.21.2-4.fc39.ppc64le                        38/155 
  Verifying        : libpwquality-1.4.5-6.fc39.ppc64le                   39/155 
  Verifying        : librtas-2.0.4-3.fc39.ppc64le                        40/155 
  Verifying        : libselinux-3.5-5.fc39.ppc64le                       41/155 
  Verifying        : libsemanage-3.5-4.fc39.ppc64le                      42/155 
  Verifying        : libsepol-3.5-2.fc39.ppc64le                         43/155 
  Verifying        : libsigsegv-2.14-5.fc39.ppc64le                      44/155 
  Verifying        : libtasn1-4.19.0-3.fc39.ppc64le                      45/155 
  Verifying        : libtool-ltdl-2.4.7-7.fc39.ppc64le                   46/155 
  Verifying        : libunistring-1.1-5.fc39.ppc64le                     47/155 
  Verifying        : libutempter-1.2.1-10.fc39.ppc64le                   48/155 
  Verifying        : libverto-0.3.2-6.fc39.ppc64le                       49/155 
  Verifying        : libxcrypt-4.4.36-2.fc39.ppc64le                     50/155 
  Verifying        : libxml2-2.10.4-3.fc39.ppc64le                       51/155 
  Verifying        : lua-libs-5.4.6-3.fc39.ppc64le                       52/155 
  Verifying        : lz4-libs-1.9.4-4.fc39.ppc64le                       53/155 
  Verifying        : mpfr-4.2.0-3.fc39.ppc64le                           54/155 
  Verifying        : ocaml-srpm-macros-8-2.fc39.noarch                   55/155 
  Verifying        : openblas-srpm-macros-2-14.fc39.noarch               56/155 
  Verifying        : package-notes-srpm-macros-0.5-9.fc39.noarch         57/155 
  Verifying        : patch-2.7.6-22.fc39.ppc64le                         58/155 
  Verifying        : pcre2-10.42-1.fc39.2.ppc64le                        59/155 
  Verifying        : pcre2-syntax-10.42-1.fc39.2.noarch                  60/155 
  Verifying        : perl-srpm-macros-1-51.fc39.noarch                   61/155 
  Verifying        : pkgconf-1.9.5-2.fc39.ppc64le                        62/155 
  Verifying        : pkgconf-m4-1.9.5-2.fc39.noarch                      63/155 
  Verifying        : pkgconf-pkg-config-1.9.5-2.fc39.ppc64le             64/155 
  Verifying        : popt-1.19-3.fc39.ppc64le                            65/155 
  Verifying        : sed-4.8-14.fc39.ppc64le                             66/155 
  Verifying        : setup-2.14.4-1.fc39.noarch                          67/155 
  Verifying        : sqlite-libs-3.42.0-7.fc39.ppc64le                   68/155 
  Verifying        : tar-2:1.35-2.fc39.ppc64le                           69/155 
  Verifying        : unzip-6.0-62.fc39.ppc64le                           70/155 
  Verifying        : which-2.21-40.fc39.ppc64le                          71/155 
  Verifying        : xz-5.4.4-1.fc39.ppc64le                             72/155 
  Verifying        : xz-libs-5.4.4-1.fc39.ppc64le                        73/155 
  Verifying        : zip-3.0-39.fc39.ppc64le                             74/155 
  Verifying        : zlib-1.2.13-4.fc39.ppc64le                          75/155 
  Verifying        : alternatives-1.26-1.fc39.ppc64le                    76/155 
  Verifying        : ansible-srpm-macros-1-12.fc39.noarch                77/155 
  Verifying        : audit-libs-3.1.5-1.fc39.ppc64le                     78/155 
  Verifying        : bash-5.2.26-1.fc39.ppc64le                          79/155 
  Verifying        : binutils-2.40-14.fc39.ppc64le                       80/155 
  Verifying        : binutils-gold-2.40-14.fc39.ppc64le                  81/155 
  Verifying        : ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noar    82/155 
  Verifying        : coreutils-9.3-7.fc39.ppc64le                        83/155 
  Verifying        : coreutils-common-9.3-7.fc39.ppc64le                 84/155 
  Verifying        : crypto-policies-20231204-1.git1e3a2e4.fc39.noarc    85/155 
  Verifying        : curl-8.2.1-5.fc39.ppc64le                           86/155 
  Verifying        : debugedit-5.0-12.fc39.ppc64le                       87/155 
  Verifying        : elfutils-0.192-4.fc39.ppc64le                       88/155 
  Verifying        : elfutils-debuginfod-client-0.192-4.fc39.ppc64le     89/155 
  Verifying        : elfutils-default-yama-scope-0.192-4.fc39.noarch     90/155 
  Verifying        : elfutils-libelf-0.192-4.fc39.ppc64le                91/155 
  Verifying        : elfutils-libs-0.192-4.fc39.ppc64le                  92/155 
  Verifying        : fedora-gpg-keys-39-2.noarch                         93/155 
  Verifying        : fedora-release-39-36.noarch                         94/155 
  Verifying        : fedora-release-common-39-36.noarch                  95/155 
  Verifying        : fedora-release-identity-basic-39-36.noarch          96/155 
  Verifying        : fedora-repos-39-2.noarch                            97/155 
  Verifying        : findutils-1:4.9.0-6.fc39.ppc64le                    98/155 
  Verifying        : forge-srpm-macros-0.3.1-1.fc39.noarch               99/155 
  Verifying        : gdb-minimal-15.1-1.fc39.ppc64le                    100/155 
  Verifying        : glibc-2.38-19.fc39.ppc64le                         101/155 
  Verifying        : glibc-common-2.38-19.fc39.ppc64le                  102/155 
  Verifying        : glibc-gconv-extra-2.38-19.fc39.ppc64le             103/155 
  Verifying        : glibc-minimal-langpack-2.38-19.fc39.ppc64le        104/155 
  Verifying        : go-srpm-macros-3.5.0-1.fc39.noarch                 105/155 
  Verifying        : keyutils-libs-1.6.3-1.fc39.ppc64le                 106/155 
  Verifying        : krb5-libs-1.21.3-2.fc39.ppc64le                    107/155 
  Verifying        : libacl-2.3.1-9.fc39.ppc64le                        108/155 
  Verifying        : libarchive-3.7.1-3.fc39.ppc64le                    109/155 
  Verifying        : libblkid-2.39.4-1.fc39.ppc64le                     110/155 
  Verifying        : libcap-2.48-9.fc39.ppc64le                         111/155 
  Verifying        : libcurl-8.2.1-5.fc39.ppc64le                       112/155 
  Verifying        : libeconf-0.5.2-2.fc39.ppc64le                      113/155 
  Verifying        : libfdisk-2.39.4-1.fc39.ppc64le                     114/155 
  Verifying        : libgcc-13.3.1-3.fc39.ppc64le                       115/155 
  Verifying        : libgomp-13.3.1-3.fc39.ppc64le                      116/155 
  Verifying        : libidn2-2.3.7-1.fc39.ppc64le                       117/155 
  Verifying        : libmount-2.39.4-1.fc39.ppc64le                     118/155 
  Verifying        : libnghttp2-1.55.1-5.fc39.ppc64le                   119/155 
  Verifying        : libsmartcols-2.39.4-1.fc39.ppc64le                 120/155 
  Verifying        : libssh-0.10.6-2.fc39.ppc64le                       121/155 
  Verifying        : libssh-config-0.10.6-2.fc39.noarch                 122/155 
  Verifying        : libstdc++-13.3.1-3.fc39.ppc64le                    123/155 
  Verifying        : libtirpc-1.3.6-0.fc39.ppc64le                      124/155 
  Verifying        : libuuid-2.39.4-1.fc39.ppc64le                      125/155 
  Verifying        : libzstd-1.5.6-1.fc39.ppc64le                       126/155 
  Verifying        : lua-srpm-macros-1-13.fc39.noarch                   127/155 
  Verifying        : ncurses-base-6.4-7.20230520.fc39.1.noarch          128/155 
  Verifying        : ncurses-libs-6.4-7.20230520.fc39.1.ppc64le         129/155 
  Verifying        : openldap-2.6.7-1.fc39.ppc64le                      130/155 
  Verifying        : openssl-libs-1:3.1.4-4.fc39.ppc64le                131/155 
  Verifying        : p11-kit-0.25.5-1.fc39.ppc64le                      132/155 
  Verifying        : p11-kit-trust-0.25.5-1.fc39.ppc64le                133/155 
  Verifying        : pam-1.5.3-3.fc39.ppc64le                           134/155 
  Verifying        : pam-libs-1.5.3-3.fc39.ppc64le                      135/155 
  Verifying        : publicsuffix-list-dafsa-20240107-1.fc39.noarch     136/155 
  Verifying        : pyproject-srpm-macros-1.16.0-1.fc39.noarch         137/155 
  Verifying        : python-srpm-macros-3.12-8.fc39.noarch              138/155 
  Verifying        : qt5-srpm-macros-5.15.14-2.fc39.noarch              139/155 
  Verifying        : qt6-srpm-macros-6.6.2-1.fc39.noarch                140/155 
  Verifying        : readline-8.2-6.fc39.ppc64le                        141/155 
  Verifying        : redhat-rpm-config-266-1.fc39.noarch                142/155 
  Verifying        : rpm-4.19.1.1-1.fc39.ppc64le                        143/155 
  Verifying        : rpm-build-4.19.1.1-1.fc39.ppc64le                  144/155 
  Verifying        : rpm-build-libs-4.19.1.1-1.fc39.ppc64le             145/155 
  Verifying        : rpm-libs-4.19.1.1-1.fc39.ppc64le                   146/155 
  Verifying        : rpm-sequoia-1.7.0-1.fc39.ppc64le                   147/155 
  Verifying        : rpmautospec-rpm-macros-0.7.3-1.fc39.noarch         148/155 
  Verifying        : rust-srpm-macros-26.3-1.fc39.noarch                149/155 
  Verifying        : shadow-utils-2:4.14.0-2.fc39.ppc64le               150/155 
  Verifying        : systemd-libs-254.20-1.fc39.ppc64le                 151/155 
  Verifying        : util-linux-2.39.4-1.fc39.ppc64le                   152/155 
  Verifying        : util-linux-core-2.39.4-1.fc39.ppc64le              153/155 
  Verifying        : xxhash-libs-0.8.2-4.fc39.ppc64le                   154/155 
  Verifying        : zstd-1.5.6-1.fc39.ppc64le                          155/155 

Installed:
  alternatives-1.26-1.fc39.ppc64le                                              
  ansible-srpm-macros-1-12.fc39.noarch                                          
  audit-libs-3.1.5-1.fc39.ppc64le                                               
  authselect-1.4.3-1.fc39.ppc64le                                               
  authselect-libs-1.4.3-1.fc39.ppc64le                                          
  basesystem-11-18.fc39.noarch                                                  
  bash-5.2.26-1.fc39.ppc64le                                                    
  binutils-2.40-14.fc39.ppc64le                                                 
  binutils-gold-2.40-14.fc39.ppc64le                                            
  bzip2-1.0.8-16.fc39.ppc64le                                                   
  bzip2-libs-1.0.8-16.fc39.ppc64le                                              
  ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noarch                            
  coreutils-9.3-7.fc39.ppc64le                                                  
  coreutils-common-9.3-7.fc39.ppc64le                                           
  cpio-2.14-4.fc39.ppc64le                                                      
  cracklib-2.9.11-2.fc39.ppc64le                                                
  crypto-policies-20231204-1.git1e3a2e4.fc39.noarch                             
  curl-8.2.1-5.fc39.ppc64le                                                     
  cyrus-sasl-lib-2.1.28-11.fc39.ppc64le                                         
  debugedit-5.0-12.fc39.ppc64le                                                 
  diffutils-3.10-3.fc39.ppc64le                                                 
  dwz-0.15-3.fc39.ppc64le                                                       
  ed-1.19-4.fc39.ppc64le                                                        
  efi-srpm-macros-5-9.fc39.noarch                                               
  elfutils-0.192-4.fc39.ppc64le                                                 
  elfutils-debuginfod-client-0.192-4.fc39.ppc64le                               
  elfutils-default-yama-scope-0.192-4.fc39.noarch                               
  elfutils-libelf-0.192-4.fc39.ppc64le                                          
  elfutils-libs-0.192-4.fc39.ppc64le                                            
  fedora-gpg-keys-39-2.noarch                                                   
  fedora-release-39-36.noarch                                                   
  fedora-release-common-39-36.noarch                                            
  fedora-release-identity-basic-39-36.noarch                                    
  fedora-repos-39-2.noarch                                                      
  file-5.44-5.fc39.ppc64le                                                      
  file-libs-5.44-5.fc39.ppc64le                                                 
  filesystem-3.18-6.fc39.ppc64le                                                
  findutils-1:4.9.0-6.fc39.ppc64le                                              
  fonts-srpm-macros-1:2.0.5-12.fc39.noarch                                      
  forge-srpm-macros-0.3.1-1.fc39.noarch                                         
  fpc-srpm-macros-1.3-8.fc39.noarch                                             
  gawk-5.2.2-2.fc39.ppc64le                                                     
  gdb-minimal-15.1-1.fc39.ppc64le                                               
  gdbm-libs-1:1.23-4.fc39.ppc64le                                               
  ghc-srpm-macros-1.6.1-2.fc39.noarch                                           
  glibc-2.38-19.fc39.ppc64le                                                    
  glibc-common-2.38-19.fc39.ppc64le                                             
  glibc-gconv-extra-2.38-19.fc39.ppc64le                                        
  glibc-minimal-langpack-2.38-19.fc39.ppc64le                                   
  gmp-1:6.2.1-5.fc39.ppc64le                                                    
  gnat-srpm-macros-6-3.fc39.noarch                                              
  go-srpm-macros-3.5.0-1.fc39.noarch                                            
  grep-3.11-3.fc39.ppc64le                                                      
  gzip-1.12-6.fc39.ppc64le                                                      
  info-7.0.3-3.fc39.ppc64le                                                     
  jansson-2.13.1-7.fc39.ppc64le                                                 
  json-c-0.17-1.fc39.ppc64le                                                    
  kernel-srpm-macros-1.0-20.fc39.noarch                                         
  keyutils-libs-1.6.3-1.fc39.ppc64le                                            
  krb5-libs-1.21.3-2.fc39.ppc64le                                               
  libacl-2.3.1-9.fc39.ppc64le                                                   
  libarchive-3.7.1-3.fc39.ppc64le                                               
  libattr-2.5.1-8.fc39.ppc64le                                                  
  libblkid-2.39.4-1.fc39.ppc64le                                                
  libbrotli-1.1.0-1.fc39.ppc64le                                                
  libcap-2.48-9.fc39.ppc64le                                                    
  libcap-ng-0.8.3-8.fc39.ppc64le                                                
  libcom_err-1.47.0-2.fc39.ppc64le                                              
  libcurl-8.2.1-5.fc39.ppc64le                                                  
  libdb-5.3.28-56.fc39.ppc64le                                                  
  libeconf-0.5.2-2.fc39.ppc64le                                                 
  libevent-2.1.12-9.fc39.ppc64le                                                
  libfdisk-2.39.4-1.fc39.ppc64le                                                
  libffi-3.4.4-4.fc39.ppc64le                                                   
  libgcc-13.3.1-3.fc39.ppc64le                                                  
  libgomp-13.3.1-3.fc39.ppc64le                                                 
  libidn2-2.3.7-1.fc39.ppc64le                                                  
  libmount-2.39.4-1.fc39.ppc64le                                                
  libnghttp2-1.55.1-5.fc39.ppc64le                                              
  libnsl2-2.0.0-6.fc39.ppc64le                                                  
  libpkgconf-1.9.5-2.fc39.ppc64le                                               
  libpsl-0.21.2-4.fc39.ppc64le                                                  
  libpwquality-1.4.5-6.fc39.ppc64le                                             
  librtas-2.0.4-3.fc39.ppc64le                                                  
  libselinux-3.5-5.fc39.ppc64le                                                 
  libsemanage-3.5-4.fc39.ppc64le                                                
  libsepol-3.5-2.fc39.ppc64le                                                   
  libsigsegv-2.14-5.fc39.ppc64le                                                
  libsmartcols-2.39.4-1.fc39.ppc64le                                            
  libssh-0.10.6-2.fc39.ppc64le                                                  
  libssh-config-0.10.6-2.fc39.noarch                                            
  libstdc++-13.3.1-3.fc39.ppc64le                                               
  libtasn1-4.19.0-3.fc39.ppc64le                                                
  libtirpc-1.3.6-0.fc39.ppc64le                                                 
  libtool-ltdl-2.4.7-7.fc39.ppc64le                                             
  libunistring-1.1-5.fc39.ppc64le                                               
  libutempter-1.2.1-10.fc39.ppc64le                                             
  libuuid-2.39.4-1.fc39.ppc64le                                                 
  libverto-0.3.2-6.fc39.ppc64le                                                 
  libxcrypt-4.4.36-2.fc39.ppc64le                                               
  libxml2-2.10.4-3.fc39.ppc64le                                                 
  libzstd-1.5.6-1.fc39.ppc64le                                                  
  lua-libs-5.4.6-3.fc39.ppc64le                                                 
  lua-srpm-macros-1-13.fc39.noarch                                              
  lz4-libs-1.9.4-4.fc39.ppc64le                                                 
  mpfr-4.2.0-3.fc39.ppc64le                                                     
  ncurses-base-6.4-7.20230520.fc39.1.noarch                                     
  ncurses-libs-6.4-7.20230520.fc39.1.ppc64le                                    
  ocaml-srpm-macros-8-2.fc39.noarch                                             
  openblas-srpm-macros-2-14.fc39.noarch                                         
  openldap-2.6.7-1.fc39.ppc64le                                                 
  openssl-libs-1:3.1.4-4.fc39.ppc64le                                           
  p11-kit-0.25.5-1.fc39.ppc64le                                                 
  p11-kit-trust-0.25.5-1.fc39.ppc64le                                           
  package-notes-srpm-macros-0.5-9.fc39.noarch                                   
  pam-1.5.3-3.fc39.ppc64le                                                      
  pam-libs-1.5.3-3.fc39.ppc64le                                                 
  patch-2.7.6-22.fc39.ppc64le                                                   
  pcre2-10.42-1.fc39.2.ppc64le                                                  
  pcre2-syntax-10.42-1.fc39.2.noarch                                            
  perl-srpm-macros-1-51.fc39.noarch                                             
  pkgconf-1.9.5-2.fc39.ppc64le                                                  
  pkgconf-m4-1.9.5-2.fc39.noarch                                                
  pkgconf-pkg-config-1.9.5-2.fc39.ppc64le                                       
  popt-1.19-3.fc39.ppc64le                                                      
  publicsuffix-list-dafsa-20240107-1.fc39.noarch                                
  pyproject-srpm-macros-1.16.0-1.fc39.noarch                                    
  python-srpm-macros-3.12-8.fc39.noarch                                         
  qt5-srpm-macros-5.15.14-2.fc39.noarch                                         
  qt6-srpm-macros-6.6.2-1.fc39.noarch                                           
  readline-8.2-6.fc39.ppc64le                                                   
  redhat-rpm-config-266-1.fc39.noarch                                           
  rpm-4.19.1.1-1.fc39.ppc64le                                                   
  rpm-build-4.19.1.1-1.fc39.ppc64le                                             
  rpm-build-libs-4.19.1.1-1.fc39.ppc64le                                        
  rpm-libs-4.19.1.1-1.fc39.ppc64le                                              
  rpm-sequoia-1.7.0-1.fc39.ppc64le                                              
  rpmautospec-rpm-macros-0.7.3-1.fc39.noarch                                    
  rust-srpm-macros-26.3-1.fc39.noarch                                           
  sed-4.8-14.fc39.ppc64le                                                       
  setup-2.14.4-1.fc39.noarch                                                    
  shadow-utils-2:4.14.0-2.fc39.ppc64le                                          
  sqlite-libs-3.42.0-7.fc39.ppc64le                                             
  systemd-libs-254.20-1.fc39.ppc64le                                            
  tar-2:1.35-2.fc39.ppc64le                                                     
  unzip-6.0-62.fc39.ppc64le                                                     
  util-linux-2.39.4-1.fc39.ppc64le                                              
  util-linux-core-2.39.4-1.fc39.ppc64le                                         
  which-2.21-40.fc39.ppc64le                                                    
  xxhash-libs-0.8.2-4.fc39.ppc64le                                              
  xz-5.4.4-1.fc39.ppc64le                                                       
  xz-libs-5.4.4-1.fc39.ppc64le                                                  
  zip-3.0-39.fc39.ppc64le                                                       
  zlib-1.2.13-4.fc39.ppc64le                                                    
  zstd-1.5.6-1.fc39.ppc64le                                                     

Complete!
Finish: installing minimal buildroot with dnf
Start: creating root cache
Finish: creating root cache
Finish: chroot init
INFO: Installed packages:
INFO: alternatives-1.26-1.fc39.ppc64le
ansible-srpm-macros-1-12.fc39.noarch
audit-libs-3.1.5-1.fc39.ppc64le
authselect-1.4.3-1.fc39.ppc64le
authselect-libs-1.4.3-1.fc39.ppc64le
basesystem-11-18.fc39.noarch
bash-5.2.26-1.fc39.ppc64le
binutils-2.40-14.fc39.ppc64le
binutils-gold-2.40-14.fc39.ppc64le
bzip2-1.0.8-16.fc39.ppc64le
bzip2-libs-1.0.8-16.fc39.ppc64le
ca-certificates-2024.2.69_v8.0.401-1.0.fc39.noarch
coreutils-9.3-7.fc39.ppc64le
coreutils-common-9.3-7.fc39.ppc64le
cpio-2.14-4.fc39.ppc64le
cracklib-2.9.11-2.fc39.ppc64le
crypto-policies-20231204-1.git1e3a2e4.fc39.noarch
curl-8.2.1-5.fc39.ppc64le
cyrus-sasl-lib-2.1.28-11.fc39.ppc64le
debugedit-5.0-12.fc39.ppc64le
diffutils-3.10-3.fc39.ppc64le
dwz-0.15-3.fc39.ppc64le
ed-1.19-4.fc39.ppc64le
efi-srpm-macros-5-9.fc39.noarch
elfutils-0.192-4.fc39.ppc64le
elfutils-debuginfod-client-0.192-4.fc39.ppc64le
elfutils-default-yama-scope-0.192-4.fc39.noarch
elfutils-libelf-0.192-4.fc39.ppc64le
elfutils-libs-0.192-4.fc39.ppc64le
fedora-gpg-keys-39-2.noarch
fedora-release-39-36.noarch
fedora-release-common-39-36.noarch
fedora-release-identity-basic-39-36.noarch
fedora-repos-39-2.noarch
file-5.44-5.fc39.ppc64le
file-libs-5.44-5.fc39.ppc64le
filesystem-3.18-6.fc39.ppc64le
findutils-4.9.0-6.fc39.ppc64le
fonts-srpm-macros-2.0.5-12.fc39.noarch
forge-srpm-macros-0.3.1-1.fc39.noarch
fpc-srpm-macros-1.3-8.fc39.noarch
gawk-5.2.2-2.fc39.ppc64le
gdb-minimal-15.1-1.fc39.ppc64le
gdbm-libs-1.23-4.fc39.ppc64le
ghc-srpm-macros-1.6.1-2.fc39.noarch
glibc-2.38-19.fc39.ppc64le
glibc-common-2.38-19.fc39.ppc64le
glibc-gconv-extra-2.38-19.fc39.ppc64le
glibc-minimal-langpack-2.38-19.fc39.ppc64le
gmp-6.2.1-5.fc39.ppc64le
gnat-srpm-macros-6-3.fc39.noarch
go-srpm-macros-3.5.0-1.fc39.noarch
gpg-pubkey-18b8e74c-62f2920f
grep-3.11-3.fc39.ppc64le
gzip-1.12-6.fc39.ppc64le
info-7.0.3-3.fc39.ppc64le
jansson-2.13.1-7.fc39.ppc64le
json-c-0.17-1.fc39.ppc64le
kernel-srpm-macros-1.0-20.fc39.noarch
keyutils-libs-1.6.3-1.fc39.ppc64le
krb5-libs-1.21.3-2.fc39.ppc64le
libacl-2.3.1-9.fc39.ppc64le
libarchive-3.7.1-3.fc39.ppc64le
libattr-2.5.1-8.fc39.ppc64le
libblkid-2.39.4-1.fc39.ppc64le
libbrotli-1.1.0-1.fc39.ppc64le
libcap-2.48-9.fc39.ppc64le
libcap-ng-0.8.3-8.fc39.ppc64le
libcom_err-1.47.0-2.fc39.ppc64le
libcurl-8.2.1-5.fc39.ppc64le
libdb-5.3.28-56.fc39.ppc64le
libeconf-0.5.2-2.fc39.ppc64le
libevent-2.1.12-9.fc39.ppc64le
libfdisk-2.39.4-1.fc39.ppc64le
libffi-3.4.4-4.fc39.ppc64le
libgcc-13.3.1-3.fc39.ppc64le
libgomp-13.3.1-3.fc39.ppc64le
libidn2-2.3.7-1.fc39.ppc64le
libmount-2.39.4-1.fc39.ppc64le
libnghttp2-1.55.1-5.fc39.ppc64le
libnsl2-2.0.0-6.fc39.ppc64le
libpkgconf-1.9.5-2.fc39.ppc64le
libpsl-0.21.2-4.fc39.ppc64le
libpwquality-1.4.5-6.fc39.ppc64le
librtas-2.0.4-3.fc39.ppc64le
libselinux-3.5-5.fc39.ppc64le
libsemanage-3.5-4.fc39.ppc64le
libsepol-3.5-2.fc39.ppc64le
libsigsegv-2.14-5.fc39.ppc64le
libsmartcols-2.39.4-1.fc39.ppc64le
libssh-0.10.6-2.fc39.ppc64le
libssh-config-0.10.6-2.fc39.noarch
libstdc++-13.3.1-3.fc39.ppc64le
libtasn1-4.19.0-3.fc39.ppc64le
libtirpc-1.3.6-0.fc39.ppc64le
libtool-ltdl-2.4.7-7.fc39.ppc64le
libunistring-1.1-5.fc39.ppc64le
libutempter-1.2.1-10.fc39.ppc64le
libuuid-2.39.4-1.fc39.ppc64le
libverto-0.3.2-6.fc39.ppc64le
libxcrypt-4.4.36-2.fc39.ppc64le
libxml2-2.10.4-3.fc39.ppc64le
libzstd-1.5.6-1.fc39.ppc64le
lua-libs-5.4.6-3.fc39.ppc64le
lua-srpm-macros-1-13.fc39.noarch
lz4-libs-1.9.4-4.fc39.ppc64le
mpfr-4.2.0-3.fc39.ppc64le
ncurses-base-6.4-7.20230520.fc39.1.noarch
ncurses-libs-6.4-7.20230520.fc39.1.ppc64le
ocaml-srpm-macros-8-2.fc39.noarch
openblas-srpm-macros-2-14.fc39.noarch
openldap-2.6.7-1.fc39.ppc64le
openssl-libs-3.1.4-4.fc39.ppc64le
p11-kit-0.25.5-1.fc39.ppc64le
p11-kit-trust-0.25.5-1.fc39.ppc64le
package-notes-srpm-macros-0.5-9.fc39.noarch
pam-1.5.3-3.fc39.ppc64le
pam-libs-1.5.3-3.fc39.ppc64le
patch-2.7.6-22.fc39.ppc64le
pcre2-10.42-1.fc39.2.ppc64le
pcre2-syntax-10.42-1.fc39.2.noarch
perl-srpm-macros-1-51.fc39.noarch
pkgconf-1.9.5-2.fc39.ppc64le
pkgconf-m4-1.9.5-2.fc39.noarch
pkgconf-pkg-config-1.9.5-2.fc39.ppc64le
popt-1.19-3.fc39.ppc64le
publicsuffix-list-dafsa-20240107-1.fc39.noarch
pyproject-srpm-macros-1.16.0-1.fc39.noarch
python-srpm-macros-3.12-8.fc39.noarch
qt5-srpm-macros-5.15.14-2.fc39.noarch
qt6-srpm-macros-6.6.2-1.fc39.noarch
readline-8.2-6.fc39.ppc64le
redhat-rpm-config-266-1.fc39.noarch
rpm-4.19.1.1-1.fc39.ppc64le
rpm-build-4.19.1.1-1.fc39.ppc64le
rpm-build-libs-4.19.1.1-1.fc39.ppc64le
rpm-libs-4.19.1.1-1.fc39.ppc64le
rpm-sequoia-1.7.0-1.fc39.ppc64le
rpmautospec-rpm-macros-0.7.3-1.fc39.noarch
rust-srpm-macros-26.3-1.fc39.noarch
sed-4.8-14.fc39.ppc64le
setup-2.14.4-1.fc39.noarch
shadow-utils-4.14.0-2.fc39.ppc64le
sqlite-libs-3.42.0-7.fc39.ppc64le
systemd-libs-254.20-1.fc39.ppc64le
tar-1.35-2.fc39.ppc64le
unzip-6.0-62.fc39.ppc64le
util-linux-2.39.4-1.fc39.ppc64le
util-linux-core-2.39.4-1.fc39.ppc64le
which-2.21-40.fc39.ppc64le
xxhash-libs-0.8.2-4.fc39.ppc64le
xz-5.4.4-1.fc39.ppc64le
xz-libs-5.4.4-1.fc39.ppc64le
zip-3.0-39.fc39.ppc64le
zlib-1.2.13-4.fc39.ppc64le
zstd-1.5.6-1.fc39.ppc64le
Start: buildsrpm
Start: rpmbuild -bs
Building target platforms: ppc64le
Building for target ppc64le
setting SOURCE_DATE_EPOCH=1733097600
Wrote: /builddir/build/SRPMS/pycharm-community-2024.3-3.fc39.src.rpm
Finish: rpmbuild -bs
INFO: chroot_scan: 3 files copied to /var/lib/copr-rpmbuild/results/chroot_scan
INFO: /var/lib/mock/fedora-39-ppc64le-1733142711.527732/root/var/log/dnf.log
/var/lib/mock/fedora-39-ppc64le-1733142711.527732/root/var/log/dnf.librepo.log
/var/lib/mock/fedora-39-ppc64le-1733142711.527732/root/var/log/dnf.rpm.log
INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz
/bin/tar: Removing leading `/' from member names
Finish: buildsrpm
INFO: Done(/var/lib/copr-rpmbuild/workspace/workdir-9lbczqn1/pycharm-community/pycharm-community.spec) Config(child) 2 minutes 25 seconds
INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results
INFO: Cleaning up build root ('cleanup_on_success=True')
Start: clean chroot
INFO: unmounting tmpfs.
Finish: clean chroot
INFO: Start(/var/lib/copr-rpmbuild/results/pycharm-community-2024.3-3.fc39.src.rpm)  Config(fedora-39-ppc64le)
Start(bootstrap): chroot init
INFO: mounting tmpfs at /var/lib/mock/fedora-39-ppc64le-bootstrap-1733142711.527732/root.
INFO: reusing tmpfs at /var/lib/mock/fedora-39-ppc64le-bootstrap-1733142711.527732/root.
INFO: calling preinit hooks
INFO: enabled root cache
INFO: enabled package manager cache
Start(bootstrap): cleaning package manager metadata
Finish(bootstrap): cleaning package manager metadata
Finish(bootstrap): chroot init
Start: chroot init
INFO: mounting tmpfs at /var/lib/mock/fedora-39-ppc64le-1733142711.527732/root.
INFO: calling preinit hooks
INFO: enabled root cache
Start: unpacking root cache
Finish: unpacking root cache
INFO: enabled package manager cache
Start: cleaning package manager metadata
Finish: cleaning package manager metadata
INFO: enabled HW Info plugin
INFO: Buildroot is handled by package management installed into bootstrap:
  rpm-4.19.1.1-1.fc39.ppc64le
  rpm-sequoia-1.7.0-1.fc39.ppc64le
  python3-dnf-4.21.1-1.fc39.noarch
  python3-dnf-plugins-core-4.9.0-1.fc39.noarch
Finish: chroot init
Start: build phase for pycharm-community-2024.3-3.fc39.src.rpm
Start: build setup for pycharm-community-2024.3-3.fc39.src.rpm
Building target platforms: ppc64le
Building for target ppc64le
setting SOURCE_DATE_EPOCH=1733097600
Wrote: /builddir/build/SRPMS/pycharm-community-2024.3-3.fc39.src.rpm
No matches found for the following disable plugin patterns: local, spacewalk, versionlock
Copr repository                                  19 kB/s | 1.8 kB     00:00    
Copr repository                                 3.1 MB/s | 461 kB     00:00    
fedora                                          110 kB/s | 5.0 kB     00:00    
updates                                         134 kB/s | 4.9 kB     00:00    
Dependencies resolved.
================================================================================
 Package                       Arch       Version              Repository  Size
================================================================================
Installing:
 desktop-file-utils            ppc64le    0.26-9.fc39          fedora      78 k
 javapackages-filesystem       noarch     6.1.0-10.fc39        fedora      12 k
 libappstream-glib             ppc64le    0.8.2-4.fc39         fedora     420 k
 librsvg2-tools                ppc64le    2.57.1-2.fc39        updates    2.0 M
 python3-devel                 ppc64le    3.12.7-1.fc39        updates    314 k
Installing dependencies:
 abattis-cantarell-vf-fonts    noarch     0.301-10.fc39        fedora     121 k
 cairo                         ppc64le    1.18.0-1.fc39        fedora     797 k
 cairo-gobject                 ppc64le    1.18.0-1.fc39        fedora      19 k
 default-fonts-core-sans       noarch     4.0-9.fc39           fedora      32 k
 emacs-filesystem              noarch     1:29.4-2.fc39        updates    7.3 k
 expat                         ppc64le    2.6.3-1.fc39         updates    120 k
 fontconfig                    ppc64le    2.14.2-6.fc39        updates    342 k
 fonts-filesystem              noarch     1:2.0.5-12.fc39      fedora     8.2 k
 freetype                      ppc64le    2.13.1-2.fc39        fedora     474 k
 fribidi                       ppc64le    1.0.13-2.fc39        fedora      95 k
 gdk-pixbuf2                   ppc64le    2.42.10-5.fc39       fedora     493 k
 glib2                         ppc64le    2.78.6-1.fc39        updates    2.9 M
 gnutls                        ppc64le    3.8.6-1.fc39         updates    1.1 M
 google-noto-fonts-common      noarch     20240101-1.fc39      updates     17 k
 google-noto-sans-vf-fonts     noarch     20240101-1.fc39      updates    593 k
 graphite2                     ppc64le    1.3.14-12.fc39       fedora     105 k
 harfbuzz                      ppc64le    8.2.1-2.fc39         fedora     1.0 M
 json-glib                     ppc64le    1.8.0-1.fc39         fedora     169 k
 libX11                        ppc64le    1.8.9-1.fc39         updates    698 k
 libX11-common                 noarch     1.8.9-1.fc39         updates    176 k
 libXau                        ppc64le    1.0.11-3.fc39        fedora      32 k
 libXext                       ppc64le    1.3.5-3.fc39         fedora      41 k
 libXft                        ppc64le    2.3.8-3.fc39         fedora      78 k
 libXrender                    ppc64le    0.9.11-3.fc39        fedora      29 k
 libb2                         ppc64le    0.98.1-9.fc39        fedora      25 k
 libdatrie                     ppc64le    0.2.13-7.fc39        fedora      34 k
 libjpeg-turbo                 ppc64le    2.1.4-3.fc39         fedora     209 k
 libpng                        ppc64le    2:1.6.37-15.fc39     fedora     138 k
 librsvg2                      ppc64le    2.57.1-2.fc39        updates    1.8 M
 libstemmer                    ppc64le    2.2.0-7.fc39         fedora     176 k
 libthai                       ppc64le    0.1.29-6.fc39        fedora     215 k
 libxcb                        ppc64le    1.13.1-12.fc39       fedora     250 k
 mpdecimal                     ppc64le    2.5.1-7.fc39         fedora     104 k
 nettle                        ppc64le    3.9.1-2.fc39         fedora     460 k
 pango                         ppc64le    1.51.0-1.fc39        fedora     374 k
 pixman                        ppc64le    0.42.2-2.fc39        fedora     230 k
 pyproject-rpm-macros          noarch     1.16.0-1.fc39        updates     45 k
 python-pip-wheel              noarch     23.2.1-2.fc39        updates    1.5 M
 python-rpm-macros             noarch     3.12-8.fc39          updates     18 k
 python3                       ppc64le    3.12.7-1.fc39        updates     28 k
 python3-libs                  ppc64le    3.12.7-1.fc39        updates    9.3 M
 python3-packaging             noarch     23.1-4.fc39          fedora     114 k
 python3-rpm-generators        noarch     14-7.fc39            fedora      30 k
 python3-rpm-macros            noarch     3.12-8.fc39          updates     12 k
 rsvg-pixbuf-loader            ppc64le    2.57.1-2.fc39        updates     16 k
 shared-mime-info              ppc64le    2.2-4.fc39           fedora     385 k
 tzdata                        noarch     2024a-2.fc39         updates    715 k
 xml-common                    noarch     0.6.3-61.fc39        fedora      31 k

Transaction Summary
================================================================================
Install  53 Packages

Total download size: 28 M
Installed size: 130 M
Downloading Packages:
(1/53): cairo-gobject-1.18.0-1.fc39.ppc64le.rpm  67 kB/s |  19 kB     00:00    
(2/53): default-fonts-core-sans-4.0-9.fc39.noar 250 kB/s |  32 kB     00:00    
(3/53): abattis-cantarell-vf-fonts-0.301-10.fc3 285 kB/s | 121 kB     00:00    
(4/53): fonts-filesystem-2.0.5-12.fc39.noarch.r 105 kB/s | 8.2 kB     00:00    
(5/53): desktop-file-utils-0.26-9.fc39.ppc64le. 402 kB/s |  78 kB     00:00    
(6/53): cairo-1.18.0-1.fc39.ppc64le.rpm         1.1 MB/s | 797 kB     00:00    
(7/53): fribidi-1.0.13-2.fc39.ppc64le.rpm       697 kB/s |  95 kB     00:00    
(8/53): freetype-2.13.1-2.fc39.ppc64le.rpm      1.7 MB/s | 474 kB     00:00    
(9/53): gdk-pixbuf2-2.42.10-5.fc39.ppc64le.rpm  3.7 MB/s | 493 kB     00:00    
(10/53): graphite2-1.3.14-12.fc39.ppc64le.rpm   800 kB/s | 105 kB     00:00    
(11/53): javapackages-filesystem-6.1.0-10.fc39. 106 kB/s |  12 kB     00:00    
(12/53): harfbuzz-8.2.1-2.fc39.ppc64le.rpm      4.8 MB/s | 1.0 MB     00:00    
(13/53): libXau-1.0.11-3.fc39.ppc64le.rpm       388 kB/s |  32 kB     00:00    
(14/53): json-glib-1.8.0-1.fc39.ppc64le.rpm     1.0 MB/s | 169 kB     00:00    
(15/53): libXft-2.3.8-3.fc39.ppc64le.rpm        831 kB/s |  78 kB     00:00    
(16/53): libXrender-0.9.11-3.fc39.ppc64le.rpm   284 kB/s |  29 kB     00:00    
(17/53): libXext-1.3.5-3.fc39.ppc64le.rpm       286 kB/s |  41 kB     00:00    
(18/53): libb2-0.98.1-9.fc39.ppc64le.rpm        311 kB/s |  25 kB     00:00    
(19/53): libdatrie-0.2.13-7.fc39.ppc64le.rpm    397 kB/s |  34 kB     00:00    
(20/53): libappstream-glib-0.8.2-4.fc39.ppc64le 3.5 MB/s | 420 kB     00:00    
(21/53): libpng-1.6.37-15.fc39.ppc64le.rpm      1.5 MB/s | 138 kB     00:00    
(22/53): libstemmer-2.2.0-7.fc39.ppc64le.rpm    1.8 MB/s | 176 kB     00:00    
(23/53): libjpeg-turbo-2.1.4-3.fc39.ppc64le.rpm 1.4 MB/s | 209 kB     00:00    
(24/53): libthai-0.1.29-6.fc39.ppc64le.rpm      1.9 MB/s | 215 kB     00:00    
(25/53): libxcb-1.13.1-12.fc39.ppc64le.rpm      2.2 MB/s | 250 kB     00:00    
(26/53): mpdecimal-2.5.1-7.fc39.ppc64le.rpm     1.0 MB/s | 104 kB     00:00    
(27/53): nettle-3.9.1-2.fc39.ppc64le.rpm        4.4 MB/s | 460 kB     00:00    
(28/53): pango-1.51.0-1.fc39.ppc64le.rpm        2.8 MB/s | 374 kB     00:00    
(29/53): python3-packaging-23.1-4.fc39.noarch.r 1.4 MB/s | 114 kB     00:00    
(30/53): pixman-0.42.2-2.fc39.ppc64le.rpm       1.3 MB/s | 230 kB     00:00    
(31/53): python3-rpm-generators-14-7.fc39.noarc 407 kB/s |  30 kB     00:00    
(32/53): shared-mime-info-2.2-4.fc39.ppc64le.rp 3.4 MB/s | 385 kB     00:00    
(33/53): emacs-filesystem-29.4-2.fc39.noarch.rp 103 kB/s | 7.3 kB     00:00    
(34/53): xml-common-0.6.3-61.fc39.noarch.rpm    359 kB/s |  31 kB     00:00    
(35/53): expat-2.6.3-1.fc39.ppc64le.rpm         825 kB/s | 120 kB     00:00    
(36/53): fontconfig-2.14.2-6.fc39.ppc64le.rpm   2.2 MB/s | 342 kB     00:00    
(37/53): google-noto-fonts-common-20240101-1.fc 644 kB/s |  17 kB     00:00    
(38/53): google-noto-sans-vf-fonts-20240101-1.f 7.8 MB/s | 593 kB     00:00    
(39/53): gnutls-3.8.6-1.fc39.ppc64le.rpm        8.3 MB/s | 1.1 MB     00:00    
(40/53): glib2-2.78.6-1.fc39.ppc64le.rpm        9.7 MB/s | 2.9 MB     00:00    
(41/53): libX11-1.8.9-1.fc39.ppc64le.rpm         13 MB/s | 698 kB     00:00    
(42/53): libX11-common-1.8.9-1.fc39.noarch.rpm  5.1 MB/s | 176 kB     00:00    
(43/53): pyproject-rpm-macros-1.16.0-1.fc39.noa 1.5 MB/s |  45 kB     00:00    
(44/53): python-pip-wheel-23.2.1-2.fc39.noarch.  14 MB/s | 1.5 MB     00:00    
(45/53): librsvg2-tools-2.57.1-2.fc39.ppc64le.r  12 MB/s | 2.0 MB     00:00    
(46/53): python-rpm-macros-3.12-8.fc39.noarch.r 572 kB/s |  18 kB     00:00    
(47/53): python3-3.12.7-1.fc39.ppc64le.rpm      1.0 MB/s |  28 kB     00:00    
(48/53): python3-devel-3.12.7-1.fc39.ppc64le.rp  10 MB/s | 314 kB     00:00    
(49/53): python3-rpm-macros-3.12-8.fc39.noarch. 455 kB/s |  12 kB     00:00    
(50/53): rsvg-pixbuf-loader-2.57.1-2.fc39.ppc64 618 kB/s |  16 kB     00:00    
(51/53): librsvg2-2.57.1-2.fc39.ppc64le.rpm     6.7 MB/s | 1.8 MB     00:00    
(52/53): tzdata-2024a-2.fc39.noarch.rpm          18 MB/s | 715 kB     00:00    
(53/53): python3-libs-3.12.7-1.fc39.ppc64le.rpm  37 MB/s | 9.3 MB     00:00    
--------------------------------------------------------------------------------
Total                                            11 MB/s |  28 MB     00:02     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : libpng-2:1.6.37-15.fc39.ppc64le                       1/53 
  Installing       : python-rpm-macros-3.12-8.fc39.noarch                  2/53 
  Installing       : fonts-filesystem-1:2.0.5-12.fc39.noarch               3/53 
  Installing       : python3-rpm-macros-3.12-8.fc39.noarch                 4/53 
  Installing       : pyproject-rpm-macros-1.16.0-1.fc39.noarch             5/53 
  Installing       : abattis-cantarell-vf-fonts-0.301-10.fc39.noarch       6/53 
  Installing       : tzdata-2024a-2.fc39.noarch                            7/53 
  Installing       : python-pip-wheel-23.2.1-2.fc39.noarch                 8/53 
  Installing       : libX11-common-1.8.9-1.fc39.noarch                     9/53 
  Installing       : google-noto-fonts-common-20240101-1.fc39.noarch      10/53 
  Installing       : google-noto-sans-vf-fonts-20240101-1.fc39.noarch     11/53 
  Installing       : default-fonts-core-sans-4.0-9.fc39.noarch            12/53 
  Installing       : expat-2.6.3-1.fc39.ppc64le                           13/53 
  Installing       : emacs-filesystem-1:29.4-2.fc39.noarch                14/53 
  Running scriptlet: xml-common-0.6.3-61.fc39.noarch                      15/53 
  Installing       : xml-common-0.6.3-61.fc39.noarch                      15/53 
  Installing       : pixman-0.42.2-2.fc39.ppc64le                         16/53 
  Installing       : nettle-3.9.1-2.fc39.ppc64le                          17/53 
  Installing       : gnutls-3.8.6-1.fc39.ppc64le                          18/53 
  Installing       : glib2-2.78.6-1.fc39.ppc64le                          19/53 
  Installing       : json-glib-1.8.0-1.fc39.ppc64le                       20/53 
  Installing       : shared-mime-info-2.2-4.fc39.ppc64le                  21/53 
  Running scriptlet: shared-mime-info-2.2-4.fc39.ppc64le                  21/53 
  Installing       : mpdecimal-2.5.1-7.fc39.ppc64le                       22/53 
  Installing       : libstemmer-2.2.0-7.fc39.ppc64le                      23/53 
  Installing       : libjpeg-turbo-2.1.4-3.fc39.ppc64le                   24/53 
  Installing       : gdk-pixbuf2-2.42.10-5.fc39.ppc64le                   25/53 
  Installing       : libdatrie-0.2.13-7.fc39.ppc64le                      26/53 
  Installing       : libthai-0.1.29-6.fc39.ppc64le                        27/53 
  Installing       : libb2-0.98.1-9.fc39.ppc64le                          28/53 
  Installing       : python3-3.12.7-1.fc39.ppc64le                        29/53 
  Installing       : python3-libs-3.12.7-1.fc39.ppc64le                   30/53 
  Installing       : python3-packaging-23.1-4.fc39.noarch                 31/53 
  Installing       : python3-rpm-generators-14-7.fc39.noarch              32/53 
  Installing       : libXau-1.0.11-3.fc39.ppc64le                         33/53 
  Installing       : libxcb-1.13.1-12.fc39.ppc64le                        34/53 
  Installing       : libX11-1.8.9-1.fc39.ppc64le                          35/53 
  Installing       : libXrender-0.9.11-3.fc39.ppc64le                     36/53 
  Installing       : libXext-1.3.5-3.fc39.ppc64le                         37/53 
  Installing       : graphite2-1.3.14-12.fc39.ppc64le                     38/53 
  Installing       : cairo-1.18.0-1.fc39.ppc64le                          39/53 
  Installing       : harfbuzz-8.2.1-2.fc39.ppc64le                        40/53 
  Installing       : freetype-2.13.1-2.fc39.ppc64le                       41/53 
  Installing       : fontconfig-2.14.2-6.fc39.ppc64le                     42/53 
  Running scriptlet: fontconfig-2.14.2-6.fc39.ppc64le                     42/53 
  Installing       : cairo-gobject-1.18.0-1.fc39.ppc64le                  43/53 
  Installing       : libXft-2.3.8-3.fc39.ppc64le                          44/53 
  Installing       : fribidi-1.0.13-2.fc39.ppc64le                        45/53 
  Installing       : pango-1.51.0-1.fc39.ppc64le                          46/53 
  Installing       : librsvg2-2.57.1-2.fc39.ppc64le                       47/53 
  Installing       : rsvg-pixbuf-loader-2.57.1-2.fc39.ppc64le             48/53 
  Installing       : librsvg2-tools-2.57.1-2.fc39.ppc64le                 49/53 
  Installing       : python3-devel-3.12.7-1.fc39.ppc64le                  50/53 
  Installing       : libappstream-glib-0.8.2-4.fc39.ppc64le               51/53 
  Installing       : desktop-file-utils-0.26-9.fc39.ppc64le               52/53 
  Installing       : javapackages-filesystem-6.1.0-10.fc39.noarch         53/53 
  Running scriptlet: fontconfig-2.14.2-6.fc39.ppc64le                     53/53 
  Running scriptlet: javapackages-filesystem-6.1.0-10.fc39.noarch         53/53 
  Verifying        : abattis-cantarell-vf-fonts-0.301-10.fc39.noarch       1/53 
  Verifying        : cairo-1.18.0-1.fc39.ppc64le                           2/53 
  Verifying        : cairo-gobject-1.18.0-1.fc39.ppc64le                   3/53 
  Verifying        : default-fonts-core-sans-4.0-9.fc39.noarch             4/53 
  Verifying        : desktop-file-utils-0.26-9.fc39.ppc64le                5/53 
  Verifying        : fonts-filesystem-1:2.0.5-12.fc39.noarch               6/53 
  Verifying        : freetype-2.13.1-2.fc39.ppc64le                        7/53 
  Verifying        : fribidi-1.0.13-2.fc39.ppc64le                         8/53 
  Verifying        : gdk-pixbuf2-2.42.10-5.fc39.ppc64le                    9/53 
  Verifying        : graphite2-1.3.14-12.fc39.ppc64le                     10/53 
  Verifying        : harfbuzz-8.2.1-2.fc39.ppc64le                        11/53 
  Verifying        : javapackages-filesystem-6.1.0-10.fc39.noarch         12/53 
  Verifying        : json-glib-1.8.0-1.fc39.ppc64le                       13/53 
  Verifying        : libXau-1.0.11-3.fc39.ppc64le                         14/53 
  Verifying        : libXext-1.3.5-3.fc39.ppc64le                         15/53 
  Verifying        : libXft-2.3.8-3.fc39.ppc64le                          16/53 
  Verifying        : libXrender-0.9.11-3.fc39.ppc64le                     17/53 
  Verifying        : libappstream-glib-0.8.2-4.fc39.ppc64le               18/53 
  Verifying        : libb2-0.98.1-9.fc39.ppc64le                          19/53 
  Verifying        : libdatrie-0.2.13-7.fc39.ppc64le                      20/53 
  Verifying        : libjpeg-turbo-2.1.4-3.fc39.ppc64le                   21/53 
  Verifying        : libpng-2:1.6.37-15.fc39.ppc64le                      22/53 
  Verifying        : libstemmer-2.2.0-7.fc39.ppc64le                      23/53 
  Verifying        : libthai-0.1.29-6.fc39.ppc64le                        24/53 
  Verifying        : libxcb-1.13.1-12.fc39.ppc64le                        25/53 
  Verifying        : mpdecimal-2.5.1-7.fc39.ppc64le                       26/53 
  Verifying        : nettle-3.9.1-2.fc39.ppc64le                          27/53 
  Verifying        : pango-1.51.0-1.fc39.ppc64le                          28/53 
  Verifying        : pixman-0.42.2-2.fc39.ppc64le                         29/53 
  Verifying        : python3-packaging-23.1-4.fc39.noarch                 30/53 
  Verifying        : python3-rpm-generators-14-7.fc39.noarch              31/53 
  Verifying        : shared-mime-info-2.2-4.fc39.ppc64le                  32/53 
  Verifying        : xml-common-0.6.3-61.fc39.noarch                      33/53 
  Verifying        : emacs-filesystem-1:29.4-2.fc39.noarch                34/53 
  Verifying        : expat-2.6.3-1.fc39.ppc64le                           35/53 
  Verifying        : fontconfig-2.14.2-6.fc39.ppc64le                     36/53 
  Verifying        : glib2-2.78.6-1.fc39.ppc64le                          37/53 
  Verifying        : gnutls-3.8.6-1.fc39.ppc64le                          38/53 
  Verifying        : google-noto-fonts-common-20240101-1.fc39.noarch      39/53 
  Verifying        : google-noto-sans-vf-fonts-20240101-1.fc39.noarch     40/53 
  Verifying        : libX11-1.8.9-1.fc39.ppc64le                          41/53 
  Verifying        : libX11-common-1.8.9-1.fc39.noarch                    42/53 
  Verifying        : librsvg2-2.57.1-2.fc39.ppc64le                       43/53 
  Verifying        : librsvg2-tools-2.57.1-2.fc39.ppc64le                 44/53 
  Verifying        : pyproject-rpm-macros-1.16.0-1.fc39.noarch            45/53 
  Verifying        : python-pip-wheel-23.2.1-2.fc39.noarch                46/53 
  Verifying        : python-rpm-macros-3.12-8.fc39.noarch                 47/53 
  Verifying        : python3-3.12.7-1.fc39.ppc64le                        48/53 
  Verifying        : python3-devel-3.12.7-1.fc39.ppc64le                  49/53 
  Verifying        : python3-libs-3.12.7-1.fc39.ppc64le                   50/53 
  Verifying        : python3-rpm-macros-3.12-8.fc39.noarch                51/53 
  Verifying        : rsvg-pixbuf-loader-2.57.1-2.fc39.ppc64le             52/53 
  Verifying        : tzdata-2024a-2.fc39.noarch                           53/53 

Installed:
  abattis-cantarell-vf-fonts-0.301-10.fc39.noarch                               
  cairo-1.18.0-1.fc39.ppc64le                                                   
  cairo-gobject-1.18.0-1.fc39.ppc64le                                           
  default-fonts-core-sans-4.0-9.fc39.noarch                                     
  desktop-file-utils-0.26-9.fc39.ppc64le                                        
  emacs-filesystem-1:29.4-2.fc39.noarch                                         
  expat-2.6.3-1.fc39.ppc64le                                                    
  fontconfig-2.14.2-6.fc39.ppc64le                                              
  fonts-filesystem-1:2.0.5-12.fc39.noarch                                       
  freetype-2.13.1-2.fc39.ppc64le                                                
  fribidi-1.0.13-2.fc39.ppc64le                                                 
  gdk-pixbuf2-2.42.10-5.fc39.ppc64le                                            
  glib2-2.78.6-1.fc39.ppc64le                                                   
  gnutls-3.8.6-1.fc39.ppc64le                                                   
  google-noto-fonts-common-20240101-1.fc39.noarch                               
  google-noto-sans-vf-fonts-20240101-1.fc39.noarch                              
  graphite2-1.3.14-12.fc39.ppc64le                                              
  harfbuzz-8.2.1-2.fc39.ppc64le                                                 
  javapackages-filesystem-6.1.0-10.fc39.noarch                                  
  json-glib-1.8.0-1.fc39.ppc64le                                                
  libX11-1.8.9-1.fc39.ppc64le                                                   
  libX11-common-1.8.9-1.fc39.noarch                                             
  libXau-1.0.11-3.fc39.ppc64le                                                  
  libXext-1.3.5-3.fc39.ppc64le                                                  
  libXft-2.3.8-3.fc39.ppc64le                                                   
  libXrender-0.9.11-3.fc39.ppc64le                                              
  libappstream-glib-0.8.2-4.fc39.ppc64le                                        
  libb2-0.98.1-9.fc39.ppc64le                                                   
  libdatrie-0.2.13-7.fc39.ppc64le                                               
  libjpeg-turbo-2.1.4-3.fc39.ppc64le                                            
  libpng-2:1.6.37-15.fc39.ppc64le                                               
  librsvg2-2.57.1-2.fc39.ppc64le                                                
  librsvg2-tools-2.57.1-2.fc39.ppc64le                                          
  libstemmer-2.2.0-7.fc39.ppc64le                                               
  libthai-0.1.29-6.fc39.ppc64le                                                 
  libxcb-1.13.1-12.fc39.ppc64le                                                 
  mpdecimal-2.5.1-7.fc39.ppc64le                                                
  nettle-3.9.1-2.fc39.ppc64le                                                   
  pango-1.51.0-1.fc39.ppc64le                                                   
  pixman-0.42.2-2.fc39.ppc64le                                                  
  pyproject-rpm-macros-1.16.0-1.fc39.noarch                                     
  python-pip-wheel-23.2.1-2.fc39.noarch                                         
  python-rpm-macros-3.12-8.fc39.noarch                                          
  python3-3.12.7-1.fc39.ppc64le                                                 
  python3-devel-3.12.7-1.fc39.ppc64le                                           
  python3-libs-3.12.7-1.fc39.ppc64le                                            
  python3-packaging-23.1-4.fc39.noarch                                          
  python3-rpm-generators-14-7.fc39.noarch                                       
  python3-rpm-macros-3.12-8.fc39.noarch                                         
  rsvg-pixbuf-loader-2.57.1-2.fc39.ppc64le                                      
  shared-mime-info-2.2-4.fc39.ppc64le                                           
  tzdata-2024a-2.fc39.noarch                                                    
  xml-common-0.6.3-61.fc39.noarch                                               

Complete!
Finish: build setup for pycharm-community-2024.3-3.fc39.src.rpm
Start: rpmbuild pycharm-community-2024.3-3.fc39.src.rpm
Building target platforms: ppc64le
Building for target ppc64le
setting SOURCE_DATE_EPOCH=1733097600
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.YcQDi0
+ umask 022
+ cd /builddir/build/BUILD
+ cd /builddir/build/BUILD
+ rm -rf pycharm-community-2024.3
+ /usr/lib/rpm/rpmuncompress -x /builddir/build/SOURCES/pycharm-community-2024.3.tar.gz
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd pycharm-community-2024.3
+ rm -rf /builddir/build/BUILD/pycharm-community-2024.3-SPECPARTS
+ /usr/bin/mkdir -p /builddir/build/BUILD/pycharm-community-2024.3-SPECPARTS
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ rm -rf plugins/cwm-plugin plugins/cwm-plugin-projector plugins/marketplace plugins/space
+ '[' -z sP ']'
+ shebang_flags=-kasP
+ /usr/bin/python3 -B /usr/lib/rpm/redhat/pathfix.py -pni /usr/bin/python3 -kasP bin
recursedown('bin')
+ RPM_EC=0
++ jobs -p
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.z5U3KJ
+ umask 022
+ cd /builddir/build/BUILD
+ '[' /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le '!=' / ']'
+ rm -rf /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le
++ dirname /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le
+ mkdir -p /builddir/build/BUILDROOT
+ mkdir /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le
+ CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection '
+ export CFLAGS
+ CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection '
+ export CXXFLAGS
+ FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib64/gfortran/modules '
+ export FFLAGS
+ FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib64/gfortran/modules '
+ export FCFLAGS
+ VALAFLAGS=-g
+ export VALAFLAGS
+ RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn'
+ export RUSTFLAGS
+ LDFLAGS='-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes '
+ export LDFLAGS
+ LT_SYS_LIBRARY_PATH=/usr/lib64:
+ export LT_SYS_LIBRARY_PATH
+ CC=gcc
+ export CC
+ CXX=g++
+ export CXX
+ cd pycharm-community-2024.3
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/java/pycharm-community
+ cp -arf ./bin ./jbr ./lib ./plugins ./build.txt ./product-info.json /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/java/pycharm-community/
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/pixmaps
+ install -m 0644 -p bin/pycharm.png /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/pixmaps/pycharm-community.png
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/scalable/apps
+ install -m 0644 -p bin/pycharm.svg /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/scalable/apps/pycharm-community.svg
+ for size in 16 22 24 32 48 64 128 256
+ dest=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/16x16/apps
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/16x16/apps
+ rsvg-convert -w 16 -h 16 bin/pycharm.svg -o /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/16x16/apps/pycharm-community.png
+ chmod 0644 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/16x16/apps/pycharm-community.png
+ touch -r bin/pycharm.svg /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/16x16/apps/pycharm-community.png
+ for size in 16 22 24 32 48 64 128 256
+ dest=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/22x22/apps
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/22x22/apps
+ rsvg-convert -w 22 -h 22 bin/pycharm.svg -o /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/22x22/apps/pycharm-community.png
+ chmod 0644 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/22x22/apps/pycharm-community.png
+ touch -r bin/pycharm.svg /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/22x22/apps/pycharm-community.png
+ for size in 16 22 24 32 48 64 128 256
+ dest=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/24x24/apps
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/24x24/apps
+ rsvg-convert -w 24 -h 24 bin/pycharm.svg -o /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/24x24/apps/pycharm-community.png
+ chmod 0644 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/24x24/apps/pycharm-community.png
+ touch -r bin/pycharm.svg /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/24x24/apps/pycharm-community.png
+ for size in 16 22 24 32 48 64 128 256
+ dest=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/32x32/apps
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/32x32/apps
+ rsvg-convert -w 32 -h 32 bin/pycharm.svg -o /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/32x32/apps/pycharm-community.png
+ chmod 0644 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/32x32/apps/pycharm-community.png
+ touch -r bin/pycharm.svg /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/32x32/apps/pycharm-community.png
+ for size in 16 22 24 32 48 64 128 256
+ dest=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/48x48/apps
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/48x48/apps
+ rsvg-convert -w 48 -h 48 bin/pycharm.svg -o /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/48x48/apps/pycharm-community.png
+ chmod 0644 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/48x48/apps/pycharm-community.png
+ touch -r bin/pycharm.svg /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/48x48/apps/pycharm-community.png
+ for size in 16 22 24 32 48 64 128 256
+ dest=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/64x64/apps
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/64x64/apps
+ rsvg-convert -w 64 -h 64 bin/pycharm.svg -o /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/64x64/apps/pycharm-community.png
+ chmod 0644 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/64x64/apps/pycharm-community.png
+ touch -r bin/pycharm.svg /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/64x64/apps/pycharm-community.png
+ for size in 16 22 24 32 48 64 128 256
+ dest=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/128x128/apps
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/128x128/apps
+ rsvg-convert -w 128 -h 128 bin/pycharm.svg -o /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/128x128/apps/pycharm-community.png
+ chmod 0644 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/128x128/apps/pycharm-community.png
+ touch -r bin/pycharm.svg /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/128x128/apps/pycharm-community.png
+ for size in 16 22 24 32 48 64 128 256
+ dest=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/256x256/apps
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/256x256/apps
+ rsvg-convert -w 256 -h 256 bin/pycharm.svg -o /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/256x256/apps/pycharm-community.png
+ chmod 0644 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/256x256/apps/pycharm-community.png
+ touch -r bin/pycharm.svg /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/icons/hicolor/256x256/apps/pycharm-community.png
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/metainfo
+ install -m 0644 -p /builddir/build/SOURCES/pycharm-community.metainfo.xml /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/metainfo/pycharm-community.metainfo.xml
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/bin
+ ln -s /usr/share/java/pycharm-community/bin/pycharm.sh /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/bin/pycharm-community
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/applications
+ install -m 0644 -p /builddir/build/SOURCES/pycharm-community.desktop /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/applications/pycharm-community.desktop
+ install -d /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/mime/packages
+ install -m 0644 -p /builddir/build/SOURCES/pycharm-community.xml /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/mime/packages/pycharm-community.xml
+ tail -n +2 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/java/pycharm-community/plugins/python-ce/helpers/pycodestyle-2.10.0.py
# pycodestyle.py - Check Python source code formatting, according to
# PEP 8
#
# Copyright (C) 2006-2009 Johann C. Rocholl <johann@rocholl.net>
# Copyright (C) 2009-2014 Florent Xicluna <florent.xicluna@gmail.com>
# Copyright (C) 2014-2016 Ian Lee <ianlee1521@gmail.com>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
r"""
Check Python source code formatting, according to PEP 8.

For usage and a list of options, try this:
$ python pycodestyle.py -h

This program and its regression test suite live here:
https://github.com/pycqa/pycodestyle

Groups of errors and warnings:
E errors
W warnings
100 indentation
200 whitespace
300 blank lines
400 imports
500 line length
600 deprecation
700 statements
900 syntax error
"""
import bisect
import configparser
import inspect
import io
import keyword
import os
import re
import sys
import time
import tokenize
import warnings
from fnmatch import fnmatch
from functools import lru_cache
from optparse import OptionParser

# this is a performance hack.  see https://bugs.python.org/issue43014
if (
        sys.version_info < (3, 10) and
        callable(getattr(tokenize, '_compile', None))
):  # pragma: no cover (<py310)
    tokenize._compile = lru_cache()(tokenize._compile)  # type: ignore

__version__ = '2.10.0'  # patched PY-37054

DEFAULT_EXCLUDE = '.svn,CVS,.bzr,.hg,.git,__pycache__,.tox'
DEFAULT_IGNORE = 'E121,E123,E126,E226,E24,E704,W503,W504'
try:
    if sys.platform == 'win32':
        USER_CONFIG = os.path.expanduser(r'~\.pycodestyle')
    else:
        USER_CONFIG = os.path.join(
            os.getenv('XDG_CONFIG_HOME') or os.path.expanduser('~/.config'),
            'pycodestyle'
        )
except ImportError:
    USER_CONFIG = None

PROJECT_CONFIG = ('setup.cfg', 'tox.ini')
TESTSUITE_PATH = os.path.join(os.path.dirname(__file__), 'testsuite')
MAX_LINE_LENGTH = 79
# Number of blank lines between various code parts.
BLANK_LINES_CONFIG = {
    # Top level class and function.
    'top_level': 2,
    # Methods and nested class and function.
    'method': 1,
}
MAX_DOC_LENGTH = 72
INDENT_SIZE = 4
REPORT_FORMAT = {
    'default': '%(path)s:%(row)d:%(col)d: %(code)s %(text)s',
    'pylint': '%(path)s:%(row)d: [%(code)s] %(text)s',
}

PyCF_ONLY_AST = 1024
SINGLETONS = frozenset(['False', 'None', 'True'])
KEYWORDS = frozenset(keyword.kwlist + ['print', 'async']) - SINGLETONS
UNARY_OPERATORS = frozenset(['>>', '**', '*', '+', '-'])
ARITHMETIC_OP = frozenset(['**', '*', '/', '//', '+', '-', '@'])
WS_OPTIONAL_OPERATORS = ARITHMETIC_OP.union(['^', '&', '|', '<<', '>>', '%'])
ASSIGNMENT_EXPRESSION_OP = [':='] if sys.version_info >= (3, 8) else []
WS_NEEDED_OPERATORS = frozenset([
    '**=', '*=', '/=', '//=', '+=', '-=', '!=', '<>', '<', '>',
    '%=', '^=', '&=', '|=', '==', '<=', '>=', '<<=', '>>=', '=',
    'and', 'in', 'is', 'or', '->'] +
    ASSIGNMENT_EXPRESSION_OP)
WHITESPACE = frozenset(' \t\xa0')
NEWLINE = frozenset([tokenize.NL, tokenize.NEWLINE])
SKIP_TOKENS = NEWLINE.union([tokenize.INDENT, tokenize.DEDENT])
# ERRORTOKEN is triggered by backticks in Python 3
SKIP_COMMENTS = SKIP_TOKENS.union([tokenize.COMMENT, tokenize.ERRORTOKEN])
BENCHMARK_KEYS = ['directories', 'files', 'logical lines', 'physical lines']

INDENT_REGEX = re.compile(r'([ \t]*)')
ERRORCODE_REGEX = re.compile(r'\b[A-Z]\d{3}\b')
DOCSTRING_REGEX = re.compile(r'u?r?["\']')
EXTRANEOUS_WHITESPACE_REGEX = re.compile(r'[\[({][ \t]|[ \t][\]}),;:](?!=)')
WHITESPACE_AFTER_COMMA_REGEX = re.compile(r'[,;:]\s*(?:  |\t)')
COMPARE_SINGLETON_REGEX = re.compile(r'(\bNone|\bFalse|\bTrue)?\s*([=!]=)'
                                     r'\s*(?(1)|(None|False|True))\b')
COMPARE_NEGATIVE_REGEX = re.compile(r'\b(?<!is\s)(not)\s+[^][)(}{ ]+\s+'
                                    r'(in|is)\s')
COMPARE_TYPE_REGEX = re.compile(r'(?:[=!]=|is(?:\s+not)?)\s+type(?:s.\w+Type'
                                r'|\s*\(\s*([^)]*[^ )])\s*\))')
KEYWORD_REGEX = re.compile(r'(\s*)\b(?:%s)\b(\s*)' % r'|'.join(KEYWORDS))
OPERATOR_REGEX = re.compile(r'(?:[^,\s])(\s*)(?:[-+*/|!<=>%&^]+|:=)(\s*)')
LAMBDA_REGEX = re.compile(r'\blambda\b')
HUNK_REGEX = re.compile(r'^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$')
STARTSWITH_DEF_REGEX = re.compile(r'^(async\s+def|def)\b')
STARTSWITH_TOP_LEVEL_REGEX = re.compile(r'^(async\s+def\s+|def\s+|class\s+|@)')
STARTSWITH_INDENT_STATEMENT_REGEX = re.compile(
    r'^\s*({})\b'.format('|'.join(s.replace(' ', r'\s+') for s in (
        'def', 'async def',
        'for', 'async for',
        'if', 'elif', 'else',
        'try', 'except', 'finally',
        'with', 'async with',
        'class',
        'while',
    )))
)
DUNDER_REGEX = re.compile(r"^__([^\s]+)__(?::\s*[a-zA-Z.0-9_\[\]\"]+)? = ")
BLANK_EXCEPT_REGEX = re.compile(r"except\s*:")

_checks = {'physical_line': {}, 'logical_line': {}, 'tree': {}}


def _get_parameters(function):
    return [parameter.name
            for parameter
            in inspect.signature(function).parameters.values()
            if parameter.kind == parameter.POSITIONAL_OR_KEYWORD]


def register_check(check, codes=None):
    """Register a new check object."""
    def _add_check(check, kind, codes, args):
        if check in _checks[kind]:
            _checks[kind][check][0].extend(codes or [])
        else:
            _checks[kind][check] = (codes or [''], args)
    if inspect.isfunction(check):
        args = _get_parameters(check)
        if args and args[0] in ('physical_line', 'logical_line'):
            if codes is None:
                codes = ERRORCODE_REGEX.findall(check.__doc__ or '')
            _add_check(check, args[0], codes, args)
    elif inspect.isclass(check):
        if _get_parameters(check.__init__)[:2] == ['self', 'tree']:
            _add_check(check, 'tree', codes, None)
    return check


########################################################################
# Plugins (check functions) for physical lines
########################################################################

@register_check
def tabs_or_spaces(physical_line, indent_char):
    r"""Never mix tabs and spaces.

    The most popular way of indenting Python is with spaces only.  The
    second-most popular way is with tabs only.  Code indented with a
    mixture of tabs and spaces should be converted to using spaces
    exclusively.  When invoking the Python command line interpreter with
    the -t option, it issues warnings about code that illegally mixes
    tabs and spaces.  When using -tt these warnings become errors.
    These options are highly recommended!

    Okay: if a == 0:\n    a = 1\n    b = 1
    E101: if a == 0:\n        a = 1\n\tb = 1
    """
    indent = INDENT_REGEX.match(physical_line).group(1)
    for offset, char in enumerate(indent):
        if char != indent_char:
            return offset, "E101 indentation contains mixed spaces and tabs"


@register_check
def tabs_obsolete(physical_line):
    r"""On new projects, spaces-only are strongly recommended over tabs.

    Okay: if True:\n    return
    W191: if True:\n\treturn
    """
    indent = INDENT_REGEX.match(physical_line).group(1)
    if '\t' in indent:
        return indent.index('\t'), "W191 indentation contains tabs"


@register_check
def trailing_whitespace(physical_line):
    r"""Trailing whitespace is superfluous.

    The warning returned varies on whether the line itself is blank,
    for easier filtering for those who want to indent their blank lines.

    Okay: spam(1)\n#
    W291: spam(1) \n#
    W293: class Foo(object):\n    \n    bang = 12
    """
    physical_line = physical_line.rstrip('\n')    # chr(10), newline
    physical_line = physical_line.rstrip('\r')    # chr(13), carriage return
    physical_line = physical_line.rstrip('\x0c')  # chr(12), form feed, ^L
    stripped = physical_line.rstrip(' \t\v')
    if physical_line != stripped:
        if stripped:
            return len(stripped), "W291 trailing whitespace"
        else:
            return 0, "W293 blank line contains whitespace"


@register_check
def trailing_blank_lines(physical_line, lines, line_number, total_lines):
    r"""Trailing blank lines are superfluous.

    Okay: spam(1)
    W391: spam(1)\n

    However the last line should end with a new line (warning W292).
    """
    if line_number == total_lines:
        stripped_last_line = physical_line.rstrip('\r\n')
        if physical_line and not stripped_last_line:
            return 0, "W391 blank line at end of file"
        if stripped_last_line == physical_line:
            return len(lines[-1]), "W292 no newline at end of file"


@register_check
def maximum_line_length(physical_line, max_line_length, multiline,
                        line_number, noqa):
    r"""Limit all lines to a maximum of 79 characters.

    There are still many devices around that are limited to 80 character
    lines; plus, limiting windows to 80 characters makes it possible to
    have several windows side-by-side.  The default wrapping on such
    devices looks ugly.  Therefore, please limit all lines to a maximum
    of 79 characters. For flowing long blocks of text (docstrings or
    comments), limiting the length to 72 characters is recommended.

    Reports error E501.
    """
    line = physical_line.rstrip()
    length = len(line)
    if length > max_line_length and not noqa:
        # Special case: ignore long shebang lines.
        if line_number == 1 and line.startswith('#!'):
            return
        # Special case for long URLs in multi-line docstrings or
        # comments, but still report the error when the 72 first chars
        # are whitespaces.
        chunks = line.split()
        if ((len(chunks) == 1 and multiline) or
            (len(chunks) == 2 and chunks[0] == '#')) and \
                len(line) - len(chunks[-1]) < max_line_length - 7:
            return
        if length > max_line_length:
            return (max_line_length, "E501 line too long "
                    "(%d > %d characters)" % (length, max_line_length))


########################################################################
# Plugins (check functions) for logical lines
########################################################################


def _is_one_liner(logical_line, indent_level, lines, line_number):
    if not STARTSWITH_TOP_LEVEL_REGEX.match(logical_line):
        return False

    line_idx = line_number - 1

    if line_idx < 1:
        prev_indent = 0
    else:
        prev_indent = expand_indent(lines[line_idx - 1])

    if prev_indent > indent_level:
        return False

    while line_idx < len(lines):
        line = lines[line_idx].strip()
        if not line.startswith('@') and STARTSWITH_TOP_LEVEL_REGEX.match(line):
            break
        else:
            line_idx += 1
    else:
        return False  # invalid syntax: EOF while searching for def/class

    next_idx = line_idx + 1
    while next_idx < len(lines):
        if lines[next_idx].strip():
            break
        else:
            next_idx += 1
    else:
        return True  # line is last in the file

    return expand_indent(lines[next_idx]) <= indent_level


@register_check
def blank_lines(logical_line, blank_lines, indent_level, line_number,
                blank_before, previous_logical,
                previous_unindented_logical_line, previous_indent_level,
                lines):
    r"""Separate top-level function and class definitions with two blank
    lines.

    Method definitions inside a class are separated by a single blank
    line.

    Extra blank lines may be used (sparingly) to separate groups of
    related functions.  Blank lines may be omitted between a bunch of
    related one-liners (e.g. a set of dummy implementations).

    Use blank lines in functions, sparingly, to indicate logical
    sections.

    Okay: def a():\n    pass\n\n\ndef b():\n    pass
    Okay: def a():\n    pass\n\n\nasync def b():\n    pass
    Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
    Okay: default = 1\nfoo = 1
    Okay: classify = 1\nfoo = 1

    E301: class Foo:\n    b = 0\n    def bar():\n        pass
    E302: def a():\n    pass\n\ndef b(n):\n    pass
    E302: def a():\n    pass\n\nasync def b(n):\n    pass
    E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
    E303: def a():\n\n\n\n    pass
    E304: @decorator\n\ndef a():\n    pass
    E305: def a():\n    pass\na()
    E306: def a():\n    def b():\n        pass\n    def c():\n        pass
    """  # noqa
    top_level_lines = BLANK_LINES_CONFIG['top_level']
    method_lines = BLANK_LINES_CONFIG['method']

    if not previous_logical and blank_before < top_level_lines:
        return  # Don't expect blank lines before the first line
    if previous_logical.startswith('@'):
        if blank_lines:
            yield 0, "E304 blank lines found after function decorator"
    elif (blank_lines > top_level_lines or
            (indent_level and blank_lines == method_lines + 1)
          ):
        yield 0, "E303 too many blank lines (%d)" % blank_lines
    elif STARTSWITH_TOP_LEVEL_REGEX.match(logical_line):
        # allow a group of one-liners
        if (
            _is_one_liner(logical_line, indent_level, lines, line_number) and
            blank_before == 0
        ):
            return
        if indent_level:
            if not (blank_before == method_lines or
                    previous_indent_level < indent_level or
                    DOCSTRING_REGEX.match(previous_logical)
                    ):
                ancestor_level = indent_level
                nested = False
                # Search backwards for a def ancestor or tree root
                # (top level).
                for line in lines[line_number - top_level_lines::-1]:
                    if line.strip() and expand_indent(line) < ancestor_level:
                        ancestor_level = expand_indent(line)
                        nested = STARTSWITH_DEF_REGEX.match(line.lstrip())
                        if nested or ancestor_level == 0:
                            break
                if nested:
                    yield 0, "E306 expected %s blank line before a " \
                        "nested definition, found 0" % (method_lines,)
                else:
                    yield 0, "E301 expected {} blank line, found 0".format(
                        method_lines)
        elif blank_before != top_level_lines:
            yield 0, "E302 expected %s blank lines, found %d" % (
                top_level_lines, blank_before)
    elif (logical_line and
            not indent_level and
            blank_before != top_level_lines and
            previous_unindented_logical_line.startswith(('def ', 'class '))
          ):
        yield 0, "E305 expected %s blank lines after " \
            "class or function definition, found %d" % (
                top_level_lines, blank_before)


@register_check
def extraneous_whitespace(logical_line):
    r"""Avoid extraneous whitespace.

    Avoid extraneous whitespace in these situations:
    - Immediately inside parentheses, brackets or braces.
    - Immediately before a comma, semicolon, or colon.

    Okay: spam(ham[1], {eggs: 2})
    E201: spam( ham[1], {eggs: 2})
    E201: spam(ham[ 1], {eggs: 2})
    E201: spam(ham[1], { eggs: 2})
    E202: spam(ham[1], {eggs: 2} )
    E202: spam(ham[1 ], {eggs: 2})
    E202: spam(ham[1], {eggs: 2 })

    E203: if x == 4: print x, y; x, y = y , x
    E203: if x == 4: print x, y ; x, y = y, x
    E203: if x == 4 : print x, y; x, y = y, x
    """
    line = logical_line
    for match in EXTRANEOUS_WHITESPACE_REGEX.finditer(line):
        text = match.group()
        char = text.strip()
        found = match.start()
        if text[-1].isspace():
            # assert char in '([{'
            yield found + 1, "E201 whitespace after '%s'" % char
        elif line[found - 1] != ',':
            code = ('E202' if char in '}])' else 'E203')  # if char in ',;:'
            yield found, f"{code} whitespace before '{char}'"


@register_check
def whitespace_around_keywords(logical_line):
    r"""Avoid extraneous whitespace around keywords.

    Okay: True and False
    E271: True and  False
    E272: True  and False
    E273: True and\tFalse
    E274: True\tand False
    """
    for match in KEYWORD_REGEX.finditer(logical_line):
        before, after = match.groups()

        if '\t' in before:
            yield match.start(1), "E274 tab before keyword"
        elif len(before) > 1:
            yield match.start(1), "E272 multiple spaces before keyword"

        if '\t' in after:
            yield match.start(2), "E273 tab after keyword"
        elif len(after) > 1:
            yield match.start(2), "E271 multiple spaces after keyword"


@register_check
def missing_whitespace_after_keyword(logical_line, tokens):
    r"""Keywords should be followed by whitespace.

    Okay: from foo import (bar, baz)
    E275: from foo import(bar, baz)
    E275: from importable.module import(bar, baz)
    E275: if(foo): bar
    """
    for tok0, tok1 in zip(tokens, tokens[1:]):
        # This must exclude the True/False/None singletons, which can
        # appear e.g. as "if x is None:", and async/await, which were
        # valid identifier names in old Python versions.
        if (tok0.end == tok1.start and
                keyword.iskeyword(tok0.string) and
                tok0.string not in SINGLETONS and
                tok0.string not in ('async', 'await') and
                not (tok0.string == 'except' and tok1.string == '*') and
                not (tok0.string == 'yield' and tok1.string == ')') and
                tok1.string not in ':\n'):
            yield tok0.end, "E275 missing whitespace after keyword"


@register_check
def missing_whitespace(logical_line):
    r"""Each comma, semicolon or colon should be followed by whitespace.

    Okay: [a, b]
    Okay: (3,)
    Okay: a[3,] = 1
    Okay: a[1:4]
    Okay: a[:4]
    Okay: a[1:]
    Okay: a[1:4:2]
    E231: ['a','b']
    E231: foo(bar,baz)
    E231: [{'a':'b'}]
    """
    line = logical_line
    for index in range(len(line) - 1):
        char = line[index]
        next_char = line[index + 1]
        if char in ',;:' and next_char not in WHITESPACE:
            before = line[:index]
            if char == ':' and before.count('[') > before.count(']') and \
                    before.rfind('{') < before.rfind('['):
                continue  # Slice syntax, no space required
            if char == ',' and next_char in ')]':
                continue  # Allow tuple with only one element: (3,)
            if char == ':' and next_char == '=' and sys.version_info >= (3, 8):
                continue  # Allow assignment expression
            yield index, "E231 missing whitespace after '%s'" % char


@register_check
def indentation(logical_line, previous_logical, indent_char,
                indent_level, previous_indent_level,
                indent_size):
    r"""Use indent_size (PEP8 says 4) spaces per indentation level.

    For really old code that you don't want to mess up, you can continue
    to use 8-space tabs.

    Okay: a = 1
    Okay: if a == 0:\n    a = 1
    E111:   a = 1
    E114:   # a = 1

    Okay: for item in items:\n    pass
    E112: for item in items:\npass
    E115: for item in items:\n# Hi\n    pass

    Okay: a = 1\nb = 2
    E113: a = 1\n    b = 2
    E116: a = 1\n    # b = 2
    """
    c = 0 if logical_line else 3
    tmpl = "E11%d %s" if logical_line else "E11%d %s (comment)"
    if indent_level % indent_size:
        yield 0, tmpl % (
            1 + c,
            "indentation is not a multiple of " + str(indent_size),
        )
    indent_expect = previous_logical.endswith(':')
    if indent_expect and indent_level <= previous_indent_level:
        yield 0, tmpl % (2 + c, "expected an indented block")
    elif not indent_expect and indent_level > previous_indent_level:
        yield 0, tmpl % (3 + c, "unexpected indentation")

    if indent_expect:
        expected_indent_amount = 8 if indent_char == '\t' else 4
        expected_indent_level = previous_indent_level + expected_indent_amount
        if indent_level > expected_indent_level:
            yield 0, tmpl % (7, 'over-indented')


@register_check
def continued_indentation(logical_line, tokens, indent_level, hang_closing,
                          indent_char, indent_size, noqa, verbose):
    r"""Continuation lines indentation.

    Continuation lines should align wrapped elements either vertically
    using Python's implicit line joining inside parentheses, brackets
    and braces, or using a hanging indent.

    When using a hanging indent these considerations should be applied:
    - there should be no arguments on the first line, and
    - further indentation should be used to clearly distinguish itself
      as a continuation line.

    Okay: a = (\n)
    E123: a = (\n    )

    Okay: a = (\n    42)
    E121: a = (\n   42)
    E122: a = (\n42)
    E123: a = (\n    42\n    )
    E124: a = (24,\n     42\n)
    E125: if (\n    b):\n    pass
    E126: a = (\n        42)
    E127: a = (24,\n      42)
    E128: a = (24,\n    42)
    E129: if (a or\n    b):\n    pass
    E131: a = (\n    42\n 24)
    """
    first_row = tokens[0][2][0]
    nrows = 1 + tokens[-1][2][0] - first_row
    if noqa or nrows == 1:
        return

    # indent_next tells us whether the next block is indented; assuming
    # that it is indented by 4 spaces, then we should not allow 4-space
    # indents on the final continuation line; in turn, some other
    # indents are allowed to have an extra 4 spaces.
    indent_next = logical_line.endswith(':')

    row = depth = 0
    valid_hangs = (indent_size,) if indent_char != '\t' \
        else (indent_size, indent_size * 2)
    # remember how many brackets were opened on each line
    parens = [0] * nrows
    # relative indents of physical lines
    rel_indent = [0] * nrows
    # for each depth, collect a list of opening rows
    open_rows = [[0]]
    # for each depth, memorize the hanging indentation
    hangs = [None]
    # visual indents
    indent_chances = {}
    last_indent = tokens[0][2]
    visual_indent = None
    last_token_multiline = False
    # for each depth, memorize the visual indent column
    indent = [last_indent[1]]
    if verbose >= 3:
        print(">>> " + tokens[0][4].rstrip())

    for token_type, text, start, end, line in tokens:

        newline = row < start[0] - first_row
        if newline:
            row = start[0] - first_row
            newline = not last_token_multiline and token_type not in NEWLINE

        if newline:
            # this is the beginning of a continuation line.
            last_indent = start
            if verbose >= 3:
                print("... " + line.rstrip())

            # record the initial indent.
            rel_indent[row] = expand_indent(line) - indent_level

            # identify closing bracket
            close_bracket = (token_type == tokenize.OP and text in ']})')

            # is the indent relative to an opening bracket line?
            for open_row in reversed(open_rows[depth]):
                hang = rel_indent[row] - rel_indent[open_row]
                hanging_indent = hang in valid_hangs
                if hanging_indent:
                    break
            if hangs[depth]:
                hanging_indent = (hang == hangs[depth])
            # is there any chance of visual indent?
            visual_indent = (not close_bracket and hang > 0 and
                             indent_chances.get(start[1]))

            if close_bracket and indent[depth]:
                # closing bracket for visual indent
                if start[1] != indent[depth]:
                    yield (start, "E124 closing bracket does not match "
                           "visual indentation")
            elif close_bracket and not hang:
                # closing bracket matches indentation of opening
                # bracket's line
                if hang_closing:
                    yield start, "E133 closing bracket is missing indentation"
            elif indent[depth] and start[1] < indent[depth]:
                if visual_indent is not True:
                    # visual indent is broken
                    yield (start, "E128 continuation line "
                           "under-indented for visual indent")
            elif hanging_indent or (indent_next and
                                    rel_indent[row] == 2 * indent_size):
                # hanging indent is verified
                if close_bracket and not hang_closing:
                    yield (start, "E123 closing bracket does not match "
                           "indentation of opening bracket's line")
                hangs[depth] = hang
            elif visual_indent is True:
                # visual indent is verified
                indent[depth] = start[1]
            elif visual_indent in (text, str):
                # ignore token lined up with matching one from a
                # previous line
                pass
            else:
                # indent is broken
                if hang <= 0:
                    error = "E122", "missing indentation or outdented"
                elif indent[depth]:
                    error = "E127", "over-indented for visual indent"
                elif not close_bracket and hangs[depth]:
                    error = "E131", "unaligned for hanging indent"
                else:
                    hangs[depth] = hang
                    if hang > indent_size:
                        error = "E126", "over-indented for hanging indent"
                    else:
                        error = "E121", "under-indented for hanging indent"
                yield start, "%s continuation line %s" % error

        # look for visual indenting
        if (parens[row] and
                token_type not in (tokenize.NL, tokenize.COMMENT) and
                not indent[depth]):
            indent[depth] = start[1]
            indent_chances[start[1]] = True
            if verbose >= 4:
                print(f"bracket depth {depth} indent to {start[1]}")
        # deal with implicit string concatenation
        elif (token_type in (tokenize.STRING, tokenize.COMMENT) or
              text in ('u', 'ur', 'b', 'br')):
            indent_chances[start[1]] = str
        # visual indent after assert/raise/with
        elif not row and not depth and text in ["assert", "raise", "with"]:
            indent_chances[end[1] + 1] = True
        # special case for the "if" statement because len("if (") == 4
        elif not indent_chances and not row and not depth and text == 'if':
            indent_chances[end[1] + 1] = True
        elif text == ':' and line[end[1]:].isspace():
            open_rows[depth].append(row)

        # keep track of bracket depth
        if token_type == tokenize.OP:
            if text in '([{':
                depth += 1
                indent.append(0)
                hangs.append(None)
                if len(open_rows) == depth:
                    open_rows.append([])
                open_rows[depth].append(row)
                parens[row] += 1
                if verbose >= 4:
                    print("bracket depth %s seen, col %s, visual min = %s" %
                          (depth, start[1], indent[depth]))
            elif text in ')]}' and depth > 0:
                # parent indents should not be more than this one
                prev_indent = indent.pop() or last_indent[1]
                hangs.pop()
                for d in range(depth):
                    if indent[d] > prev_indent:
                        indent[d] = 0
                for ind in list(indent_chances):
                    if ind >= prev_indent:
                        del indent_chances[ind]
                del open_rows[depth + 1:]
                depth -= 1
                if depth:
                    indent_chances[indent[depth]] = True
                for idx in range(row, -1, -1):
                    if parens[idx]:
                        parens[idx] -= 1
                        break
            assert len(indent) == depth + 1
            if start[1] not in indent_chances:
                # allow lining up tokens
                indent_chances[start[1]] = text

        last_token_multiline = (start[0] != end[0])
        if last_token_multiline:
            rel_indent[end[0] - first_row] = rel_indent[row]

    if indent_next and expand_indent(line) == indent_level + indent_size:
        pos = (start[0], indent[0] + indent_size)
        if visual_indent:
            code = "E129 visually indented line"
        else:
            code = "E125 continuation line"
        yield pos, "%s with same indent as next logical line" % code


@register_check
def whitespace_before_parameters(logical_line, tokens):
    r"""Avoid extraneous whitespace.

    Avoid extraneous whitespace in the following situations:
    - before the open parenthesis that starts the argument list of a
      function call.
    - before the open parenthesis that starts an indexing or slicing.

    Okay: spam(1)
    E211: spam (1)

    Okay: dict['key'] = list[index]
    E211: dict ['key'] = list[index]
    E211: dict['key'] = list [index]
    """
    prev_type, prev_text, __, prev_end, __ = tokens[0]
    for index in range(1, len(tokens)):
        token_type, text, start, end, __ = tokens[index]
        if (
            token_type == tokenize.OP and
            text in '([' and
            start != prev_end and
            (prev_type == tokenize.NAME or prev_text in '}])') and
            # Syntax "class A (B):" is allowed, but avoid it
            (index < 2 or tokens[index - 2][1] != 'class') and
            # Allow "return (a.foo for a in range(5))"
            not keyword.iskeyword(prev_text) and
            # 'match' and 'case' are only soft keywords
            (
                sys.version_info < (3, 9) or
                not keyword.issoftkeyword(prev_text)
            )
        ):
            yield prev_end, "E211 whitespace before '%s'" % text
        prev_type = token_type
        prev_text = text
        prev_end = end


@register_check
def whitespace_around_operator(logical_line):
    r"""Avoid extraneous whitespace around an operator.

    Okay: a = 12 + 3
    E221: a = 4  + 5
    E222: a = 4 +  5
    E223: a = 4\t+ 5
    E224: a = 4 +\t5
    """
    for match in OPERATOR_REGEX.finditer(logical_line):
        before, after = match.groups()

        if '\t' in before:
            yield match.start(1), "E223 tab before operator"
        elif len(before) > 1:
            yield match.start(1), "E221 multiple spaces before operator"

        if '\t' in after:
            yield match.start(2), "E224 tab after operator"
        elif len(after) > 1:
            yield match.start(2), "E222 multiple spaces after operator"


@register_check
def missing_whitespace_around_operator(logical_line, tokens):
    r"""Surround operators with a single space on either side.

    - Always surround these binary operators with a single space on
      either side: assignment (=), augmented assignment (+=, -= etc.),
      comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
      Booleans (and, or, not).

    - If operators with different priorities are used, consider adding
      whitespace around the operators with the lowest priorities.

    Okay: i = i + 1
    Okay: submitted += 1
    Okay: x = x * 2 - 1
    Okay: hypot2 = x * x + y * y
    Okay: c = (a + b) * (a - b)
    Okay: foo(bar, key='word', *args, **kwargs)
    Okay: alpha[:-i]

    E225: i=i+1
    E225: submitted +=1
    E225: x = x /2 - 1
    E225: z = x **y
    E225: z = 1and 1
    E226: c = (a+b) * (a-b)
    E226: hypot2 = x*x + y*y
    E227: c = a|b
    E228: msg = fmt%(errno, errmsg)
    """
    parens = 0
    need_space = False
    prev_type = tokenize.OP
    prev_text = prev_end = None
    operator_types = (tokenize.OP, tokenize.NAME)
    for token_type, text, start, end, line in tokens:
        if token_type in SKIP_COMMENTS:
            continue
        if text in ('(', 'lambda'):
            parens += 1
        elif text == ')':
            parens -= 1
        if need_space:
            if start != prev_end:
                # Found a (probably) needed space
                if need_space is not True and not need_space[1]:
                    yield (need_space[0],
                           "E225 missing whitespace around operator")
                need_space = False
            elif text == '>' and prev_text in ('<', '-'):
                # Tolerate the "<>" operator, even if running Python 3
                # Deal with Python 3's annotated return value "->"
                pass
            elif (
                    # def f(a, /, b):
                    #           ^
                    # def f(a, b, /):
                    #              ^
                    # f = lambda a, /:
                    #                ^
                    prev_text == '/' and text in {',', ')', ':'} or
                    # def f(a, b, /):
                    #               ^
                    prev_text == ')' and text == ':'
            ):
                # Tolerate the "/" operator in function definition
                # For more info see PEP570
                pass
            else:
                if need_space is True or need_space[1]:
                    # A needed trailing space was not found
                    yield prev_end, "E225 missing whitespace around operator"
                elif prev_text != '**':
                    code, optype = 'E226', 'arithmetic'
                    if prev_text == '%':
                        code, optype = 'E228', 'modulo'
                    elif prev_text not in ARITHMETIC_OP:
                        code, optype = 'E227', 'bitwise or shift'
                    yield (need_space[0], "%s missing whitespace "
                           "around %s operator" % (code, optype))
                need_space = False
        elif token_type in operator_types and prev_end is not None:
            if text == '=' and parens:
                # Allow keyword args or defaults: foo(bar=None).
                pass
            elif text in WS_NEEDED_OPERATORS:
                need_space = True
            elif text in UNARY_OPERATORS:
                # Check if the operator is used as a binary operator
                # Allow unary operators: -123, -x, +1.
                # Allow argument unpacking: foo(*args, **kwargs).
                if prev_type == tokenize.OP and prev_text in '}])' or (
                    prev_type != tokenize.OP and
                    prev_text not in KEYWORDS and (
                        sys.version_info < (3, 9) or
                        not keyword.issoftkeyword(prev_text)
                    )
                ):
                    need_space = None
            elif text in WS_OPTIONAL_OPERATORS:
                need_space = None

            if need_space is None:
                # Surrounding space is optional, but ensure that
                # trailing space matches opening space
                need_space = (prev_end, start != prev_end)
            elif need_space and start == prev_end:
                # A needed opening space was not found
                yield prev_end, "E225 missing whitespace around operator"
                need_space = False
        prev_type = token_type
        prev_text = text
        prev_end = end


@register_check
def whitespace_around_comma(logical_line):
    r"""Avoid extraneous whitespace after a comma or a colon.

    Note: these checks are disabled by default

    Okay: a = (1, 2)
    E241: a = (1,  2)
    E242: a = (1,\t2)
    """
    line = logical_line
    for m in WHITESPACE_AFTER_COMMA_REGEX.finditer(line):
        found = m.start() + 1
        if '\t' in m.group():
            yield found, "E242 tab after '%s'" % m.group()[0]
        else:
            yield found, "E241 multiple spaces after '%s'" % m.group()[0]


@register_check
def whitespace_around_named_parameter_equals(logical_line, tokens):
    r"""Don't use spaces around the '=' sign in function arguments.

    Don't use spaces around the '=' sign when used to indicate a
    keyword argument or a default parameter value, except when
    using a type annotation.

    Okay: def complex(real, imag=0.0):
    Okay: return magic(r=real, i=imag)
    Okay: boolean(a == b)
    Okay: boolean(a != b)
    Okay: boolean(a <= b)
    Okay: boolean(a >= b)
    Okay: def foo(arg: int = 42):
    Okay: async def foo(arg: int = 42):

    E251: def complex(real, imag = 0.0):
    E251: return magic(r = real, i = imag)
    E252: def complex(real, image: float=0.0):
    """
    parens = 0
    no_space = False
    require_space = False
    prev_end = None
    annotated_func_arg = False
    in_def = bool(STARTSWITH_DEF_REGEX.match(logical_line))

    message = "E251 unexpected spaces around keyword / parameter equals"
    missing_message = "E252 missing whitespace around parameter equals"

    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.NL:
            continue
        if no_space:
            no_space = False
            if start != prev_end:
                yield (prev_end, message)
        if require_space:
            require_space = False
            if start == prev_end:
                yield (prev_end, missing_message)
        if token_type == tokenize.OP:
            if text in '([':
                parens += 1
            elif text in ')]':
                parens -= 1
            elif in_def and text == ':' and parens == 1:
                annotated_func_arg = True
            elif parens == 1 and text == ',':
                annotated_func_arg = False
            elif parens and text == '=':
                if annotated_func_arg and parens == 1:
                    require_space = True
                    if start == prev_end:
                        yield (prev_end, missing_message)
                else:
                    no_space = True
                    if start != prev_end:
                        yield (prev_end, message)
            if not parens:
                annotated_func_arg = False

        prev_end = end


@register_check
def whitespace_before_comment(logical_line, tokens):
    """Separate inline comments by at least two spaces.

    An inline comment is a comment on the same line as a statement.
    Inline comments should be separated by at least two spaces from the
    statement. They should start with a # and a single space.

    Each line of a block comment starts with a # and one or multiple
    spaces as there can be indented text inside the comment.

    Okay: x = x + 1  # Increment x
    Okay: x = x + 1    # Increment x
    Okay: # Block comments:
    Okay: #  - Block comment list
    Okay: # \xa0- Block comment list
    E261: x = x + 1 # Increment x
    E262: x = x + 1  #Increment x
    E262: x = x + 1  #  Increment x
    E262: x = x + 1  # \xa0Increment x
    E265: #Block comment
    E266: ### Block comment
    """
    prev_end = (0, 0)
    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.COMMENT:
            inline_comment = line[:start[1]].strip()
            if inline_comment:
                if prev_end[0] == start[0] and start[1] < prev_end[1] + 2:
                    yield (prev_end,
                           "E261 at least two spaces before inline comment")
            symbol, sp, comment = text.partition(' ')
            bad_prefix = symbol not in '#:' and (symbol.lstrip('#')[:1] or '#')
            if inline_comment:
                if bad_prefix or comment[:1] in WHITESPACE:
                    yield start, "E262 inline comment should start with '# '"
            elif bad_prefix and (bad_prefix != '!' or start[0] > 1):
                if bad_prefix != '#':
                    yield start, "E265 block comment should start with '# '"
                elif comment:
                    yield start, "E266 too many leading '#' for block comment"
        elif token_type != tokenize.NL:
            prev_end = end


@register_check
def imports_on_separate_lines(logical_line):
    r"""Place imports on separate lines.

    Okay: import os\nimport sys
    E401: import sys, os

    Okay: from subprocess import Popen, PIPE
    Okay: from myclas import MyClass
    Okay: from foo.bar.yourclass import YourClass
    Okay: import myclass
    Okay: import foo.bar.yourclass
    """
    line = logical_line
    if line.startswith('import '):
        found = line.find(',')
        if -1 < found and ';' not in line[:found]:
            yield found, "E401 multiple imports on one line"


@register_check
def module_imports_on_top_of_file(
        logical_line, indent_level, checker_state, noqa):
    r"""Place imports at the top of the file.

    Always put imports at the top of the file, just after any module
    comments and docstrings, and before module globals and constants.

    Okay: import os
    Okay: # this is a comment\nimport os
    Okay: '''this is a module docstring'''\nimport os
    Okay: r'''this is a module docstring'''\nimport os
    Okay:
    try:\n\timport x\nexcept ImportError:\n\tpass\nelse:\n\tpass\nimport y
    Okay:
    try:\n\timport x\nexcept ImportError:\n\tpass\nfinally:\n\tpass\nimport y
    E402: a=1\nimport os
    E402: 'One string'\n"Two string"\nimport os
    E402: a=1\nfrom sys import x

    Okay: if x:\n    import os
    """  # noqa
    def is_string_literal(line):
        if line[0] in 'uUbB':
            line = line[1:]
        if line and line[0] in 'rR':
            line = line[1:]
        return line and (line[0] == '"' or line[0] == "'")

    allowed_keywords = (
        'try', 'except', 'else', 'finally', 'with', 'if', 'elif')

    if indent_level:  # Allow imports in conditional statement/function
        return
    if not logical_line:  # Allow empty lines or comments
        return
    if noqa:
        return
    line = logical_line
    if line.startswith('import ') or line.startswith('from '):
        if checker_state.get('seen_non_imports', False):
            yield 0, "E402 module level import not at top of file"
    elif re.match(DUNDER_REGEX, line):
        return
    elif any(line.startswith(kw) for kw in allowed_keywords):
        # Allow certain keywords intermixed with imports in order to
        # support conditional or filtered importing
        return
    elif is_string_literal(line):
        # The first literal is a docstring, allow it. Otherwise, report
        # error.
        if checker_state.get('seen_docstring', False):
            checker_state['seen_non_imports'] = True
        else:
            checker_state['seen_docstring'] = True
    else:
        checker_state['seen_non_imports'] = True


@register_check
def compound_statements(logical_line):
    r"""Compound statements (on the same line) are generally
    discouraged.

    While sometimes it's okay to put an if/for/while with a small body
    on the same line, never do this for multi-clause statements.
    Also avoid folding such long lines!

    Always use a def statement instead of an assignment statement that
    binds a lambda expression directly to a name.

    Okay: if foo == 'blah':\n    do_blah_thing()
    Okay: do_one()
    Okay: do_two()
    Okay: do_three()

    E701: if foo == 'blah': do_blah_thing()
    E701: for x in lst: total += x
    E701: while t < 10: t = delay()
    E701: if foo == 'blah': do_blah_thing()
    E701: else: do_non_blah_thing()
    E701: try: something()
    E701: finally: cleanup()
    E701: if foo == 'blah': one(); two(); three()
    E702: do_one(); do_two(); do_three()
    E703: do_four();  # useless semicolon
    E704: def f(x): return 2*x
    E731: f = lambda x: 2*x
    """
    line = logical_line
    last_char = len(line) - 1
    found = line.find(':')
    prev_found = 0
    counts = {char: 0 for char in '{}[]()'}
    while -1 < found < last_char:
        update_counts(line[prev_found:found], counts)
        if ((counts['{'] <= counts['}'] and   # {'a': 1} (dict)
             counts['['] <= counts[']'] and   # [1:2] (slice)
             counts['('] <= counts[')']) and  # (annotation)
            not (sys.version_info >= (3, 8) and
                 line[found + 1] == '=')):  # assignment expression
            lambda_kw = LAMBDA_REGEX.search(line, 0, found)
            if lambda_kw:
                before = line[:lambda_kw.start()].rstrip()
                if before[-1:] == '=' and before[:-1].strip().isidentifier():
                    yield 0, ("E731 do not assign a lambda expression, use a "
                              "def")
                break
            if STARTSWITH_DEF_REGEX.match(line):
                yield 0, "E704 multiple statements on one line (def)"
            elif STARTSWITH_INDENT_STATEMENT_REGEX.match(line):
                yield found, "E701 multiple statements on one line (colon)"
        prev_found = found
        found = line.find(':', found + 1)
    found = line.find(';')
    while -1 < found:
        if found < last_char:
            yield found, "E702 multiple statements on one line (semicolon)"
        else:
            yield found, "E703 statement ends with a semicolon"
        found = line.find(';', found + 1)


@register_check
def explicit_line_join(logical_line, tokens):
    r"""Avoid explicit line join between brackets.

    The preferred way of wrapping long lines is by using Python's
    implied line continuation inside parentheses, brackets and braces.
    Long lines can be broken over multiple lines by wrapping expressions
    in parentheses.  These should be used in preference to using a
    backslash for line continuation.

    E502: aaa = [123, \\n       123]
    E502: aaa = ("bbb " \\n       "ccc")

    Okay: aaa = [123,\n       123]
    Okay: aaa = ("bbb "\n       "ccc")
    Okay: aaa = "bbb " \\n    "ccc"
    Okay: aaa = 123  # \\
    """
    prev_start = prev_end = parens = 0
    comment = False
    backslash = None
    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.COMMENT:
            comment = True
        if start[0] != prev_start and parens and backslash and not comment:
            yield backslash, "E502 the backslash is redundant between brackets"
        if end[0] != prev_end:
            if line.rstrip('\r\n').endswith('\\'):
                backslash = (end[0], len(line.splitlines()[-1]) - 1)
            else:
                backslash = None
            prev_start = prev_end = end[0]
        else:
            prev_start = start[0]
        if token_type == tokenize.OP:
            if text in '([{':
                parens += 1
            elif text in ')]}':
                parens -= 1


# The % character is strictly speaking a binary operator, but the
# common usage seems to be to put it next to the format parameters,
# after a line break.
_SYMBOLIC_OPS = frozenset("()[]{},:.;@=%~") | frozenset(("...",))


def _is_binary_operator(token_type, text):
    return (
        token_type == tokenize.OP or
        text in {'and', 'or'}
    ) and (
        text not in _SYMBOLIC_OPS
    )


def _break_around_binary_operators(tokens):
    """Private function to reduce duplication.

    This factors out the shared details between
    :func:`break_before_binary_operator` and
    :func:`break_after_binary_operator`.
    """
    line_break = False
    unary_context = True
    # Previous non-newline token types and text
    previous_token_type = None
    previous_text = None
    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.COMMENT:
            continue
        if ('\n' in text or '\r' in text) and token_type != tokenize.STRING:
            line_break = True
        else:
            yield (token_type, text, previous_token_type, previous_text,
                   line_break, unary_context, start)
            unary_context = text in '([{,;'
            line_break = False
            previous_token_type = token_type
            previous_text = text


@register_check
def break_before_binary_operator(logical_line, tokens):
    r"""
    Avoid breaks before binary operators.

    The preferred place to break around a binary operator is after the
    operator, not before it.

    W503: (width == 0\n + height == 0)
    W503: (width == 0\n and height == 0)
    W503: var = (1\n       & ~2)
    W503: var = (1\n       / -2)
    W503: var = (1\n       + -1\n       + -2)

    Okay: foo(\n    -x)
    Okay: foo(x\n    [])
    Okay: x = '''\n''' + ''
    Okay: foo(x,\n    -y)
    Okay: foo(x,  # comment\n    -y)
    """
    for context in _break_around_binary_operators(tokens):
        (token_type, text, previous_token_type, previous_text,
         line_break, unary_context, start) = context
        if (_is_binary_operator(token_type, text) and line_break and
                not unary_context and
                not _is_binary_operator(previous_token_type,
                                        previous_text)):
            yield start, "W503 line break before binary operator"


@register_check
def break_after_binary_operator(logical_line, tokens):
    r"""
    Avoid breaks after binary operators.

    The preferred place to break around a binary operator is before the
    operator, not after it.

    W504: (width == 0 +\n height == 0)
    W504: (width == 0 and\n height == 0)
    W504: var = (1 &\n       ~2)

    Okay: foo(\n    -x)
    Okay: foo(x\n    [])
    Okay: x = '''\n''' + ''
    Okay: x = '' + '''\n'''
    Okay: foo(x,\n    -y)
    Okay: foo(x,  # comment\n    -y)

    The following should be W504 but unary_context is tricky with these
    Okay: var = (1 /\n       -2)
    Okay: var = (1 +\n       -1 +\n       -2)
    """
    prev_start = None
    for context in _break_around_binary_operators(tokens):
        (token_type, text, previous_token_type, previous_text,
         line_break, unary_context, start) = context
        if (_is_binary_operator(previous_token_type, previous_text) and
                line_break and
                not unary_context and
                not _is_binary_operator(token_type, text)):
            yield prev_start, "W504 line break after binary operator"
        prev_start = start


@register_check
def comparison_to_singleton(logical_line, noqa):
    r"""Comparison to singletons should use "is" or "is not".

    Comparisons to singletons like None should always be done
    with "is" or "is not", never the equality operators.

    Okay: if arg is not None:
    E711: if arg != None:
    E711: if None == arg:
    E712: if arg == True:
    E712: if False == arg:

    Also, beware of writing if x when you really mean if x is not None
    -- e.g. when testing whether a variable or argument that defaults to
    None was set to some other value.  The other value might have a type
    (such as a container) that could be false in a boolean context!
    """
    if noqa:
        return

    for match in COMPARE_SINGLETON_REGEX.finditer(logical_line):
        singleton = match.group(1) or match.group(3)
        same = (match.group(2) == '==')

        msg = "'if cond is %s:'" % (('' if same else 'not ') + singleton)
        if singleton in ('None',):
            code = 'E711'
        else:
            code = 'E712'
            nonzero = ((singleton == 'True' and same) or
                       (singleton == 'False' and not same))
            msg += " or 'if %scond:'" % ('' if nonzero else 'not ')
        yield match.start(2), ("%s comparison to %s should be %s" %
                               (code, singleton, msg))


@register_check
def comparison_negative(logical_line):
    r"""Negative comparison should be done using "not in" and "is not".

    Okay: if x not in y:\n    pass
    Okay: assert (X in Y or X is Z)
    Okay: if not (X in Y):\n    pass
    Okay: zz = x is not y
    E713: Z = not X in Y
    E713: if not X.B in Y:\n    pass
    E714: if not X is Y:\n    pass
    E714: Z = not X.B is Y
    """
    match = COMPARE_NEGATIVE_REGEX.search(logical_line)
    if match:
        pos = match.start(1)
        if match.group(2) == 'in':
            yield pos, "E713 test for membership should be 'not in'"
        else:
            yield pos, "E714 test for object identity should be 'is not'"


@register_check
def comparison_type(logical_line, noqa):
    r"""Object type comparisons should always use isinstance().

    Do not compare types directly.

    Okay: if isinstance(obj, int):
    E721: if type(obj) is type(1):

    When checking if an object is a string, keep in mind that it might
    be a unicode string too! In Python 2.3, str and unicode have a
    common base class, basestring, so you can do:

    Okay: if isinstance(obj, basestring):
    Okay: if type(a1) is type(b1):
    """
    match = COMPARE_TYPE_REGEX.search(logical_line)
    if match and not noqa:
        inst = match.group(1)
        if inst and inst.isidentifier() and inst not in SINGLETONS:
            return  # Allow comparison for types which are not obvious
        yield match.start(), "E721 do not compare types, use 'isinstance()'"


@register_check
def bare_except(logical_line, noqa):
    r"""When catching exceptions, mention specific exceptions when
    possible.

    Okay: except Exception:
    Okay: except BaseException:
    E722: except:
    """
    if noqa:
        return

    match = BLANK_EXCEPT_REGEX.match(logical_line)
    if match:
        yield match.start(), "E722 do not use bare 'except'"


@register_check
def ambiguous_identifier(logical_line, tokens):
    r"""Never use the characters 'l', 'O', or 'I' as variable names.

    In some fonts, these characters are indistinguishable from the
    numerals one and zero. When tempted to use 'l', use 'L' instead.

    Okay: L = 0
    Okay: o = 123
    Okay: i = 42
    E741: l = 0
    E741: O = 123
    E741: I = 42

    Variables can be bound in several other contexts, including class
    and function definitions, lambda functions, 'global' and 'nonlocal'
    statements, exception handlers, and 'with' and 'for' statements.
    In addition, we have a special handling for function parameters.

    Okay: except AttributeError as o:
    Okay: with lock as L:
    Okay: foo(l=12)
    Okay: foo(l=I)
    Okay: for a in foo(l=12):
    Okay: lambda arg: arg * l
    Okay: lambda a=l[I:5]: None
    Okay: lambda x=a.I: None
    Okay: if l >= 12:
    E741: except AttributeError as O:
    E741: with lock as l:
    E741: global I
    E741: nonlocal l
    E741: def foo(l):
    E741: def foo(l=12):
    E741: l = foo(l=12)
    E741: for l in range(10):
    E741: [l for l in lines if l]
    E741: lambda l: None
    E741: lambda a=x[1:5], l: None
    E741: lambda **l:
    E741: def f(**l):
    E742: class I(object):
    E743: def l(x):
    """
    func_depth = None  # set to brace depth if 'def' or 'lambda' is found
    seen_colon = False  # set to true if we're done with function parameters
    brace_depth = 0
    idents_to_avoid = ('l', 'O', 'I')
    prev_type, prev_text, prev_start, prev_end, __ = tokens[0]
    for index in range(1, len(tokens)):
        token_type, text, start, end, line = tokens[index]
        ident = pos = None
        # find function definitions
        if prev_text in {'def', 'lambda'}:
            func_depth = brace_depth
            seen_colon = False
        elif (
                func_depth is not None and
                text == ':' and
                brace_depth == func_depth
        ):
            seen_colon = True
        # update parameter parentheses level
        if text in '([{':
            brace_depth += 1
        elif text in ')]}':
            brace_depth -= 1
        # identifiers on the lhs of an assignment operator
        if text == ':=' or (text == '=' and brace_depth == 0):
            if prev_text in idents_to_avoid:
                ident = prev_text
                pos = prev_start
        # identifiers bound to values with 'as', 'for',
        # 'global', or 'nonlocal'
        if prev_text in ('as', 'for', 'global', 'nonlocal'):
            if text in idents_to_avoid:
                ident = text
                pos = start
        # function / lambda parameter definitions
        if (
                func_depth is not None and
                not seen_colon and
                index < len(tokens) - 1 and tokens[index + 1][1] in ':,=)' and
                prev_text in {'lambda', ',', '*', '**', '('} and
                text in idents_to_avoid
        ):
            ident = text
            pos = start
        if prev_text == 'class':
            if text in idents_to_avoid:
                yield start, "E742 ambiguous class definition '%s'" % text
        if prev_text == 'def':
            if text in idents_to_avoid:
                yield start, "E743 ambiguous function definition '%s'" % text
        if ident:
            yield pos, "E741 ambiguous variable name '%s'" % ident
        prev_text = text
        prev_start = start


@register_check
def python_3000_invalid_escape_sequence(logical_line, tokens, noqa):
    r"""Invalid escape sequences are deprecated in Python 3.6.

    Okay: regex = r'\.png$'
    W605: regex = '\.png$'
    """
    if noqa:
        return

    # https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
    valid = [
        '\n',
        '\\',
        '\'',
        '"',
        'a',
        'b',
        'f',
        'n',
        'r',
        't',
        'v',
        '0', '1', '2', '3', '4', '5', '6', '7',
        'x',

        # Escape sequences only recognized in string literals
        'N',
        'u',
        'U',
    ]

    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.STRING:
            start_line, start_col = start
            quote = text[-3:] if text[-3:] in ('"""', "'''") else text[-1]
            # Extract string modifiers (e.g. u or r)
            quote_pos = text.index(quote)
            prefix = text[:quote_pos].lower()
            start = quote_pos + len(quote)
            string = text[start:-len(quote)]

            if 'r' not in prefix:
                pos = string.find('\\')
                while pos >= 0:
                    pos += 1
                    if string[pos] not in valid:
                        line = start_line + string.count('\n', 0, pos)
                        if line == start_line:
                            col = start_col + len(prefix) + len(quote) + pos
                        else:
                            col = pos - string.rfind('\n', 0, pos) - 1
                        yield (
                            (line, col - 1),
                            "W605 invalid escape sequence '\\%s'" %
                            string[pos],
                        )
                    pos = string.find('\\', pos + 1)


@register_check
def python_3000_async_await_keywords(logical_line, tokens):
    """'async' and 'await' are reserved keywords starting at Python 3.7.

    W606: async = 42
    W606: await = 42
    Okay: async def read(db):\n    data = await db.fetch('SELECT ...')
    """
    # The Python tokenize library before Python 3.5 recognizes
    # async/await as a NAME token. Therefore, use a state machine to
    # look for the possible async/await constructs as defined by the
    # Python grammar:
    # https://docs.python.org/3/reference/grammar.html

    state = None
    for token_type, text, start, end, line in tokens:
        error = False

        if token_type == tokenize.NL:
            continue

        if state is None:
            if token_type == tokenize.NAME:
                if text == 'async':
                    state = ('async_stmt', start)
                elif text == 'await':
                    state = ('await', start)
                elif (token_type == tokenize.NAME and
                      text in ('def', 'for')):
                    state = ('define', start)

        elif state[0] == 'async_stmt':
            if token_type == tokenize.NAME and text in ('def', 'with', 'for'):
                # One of funcdef, with_stmt, or for_stmt. Return to
                # looking for async/await names.
                state = None
            else:
                error = True
        elif state[0] == 'await':
            if token_type == tokenize.NAME:
                # An await expression. Return to looking for async/await
                # names.
                state = None
            elif token_type == tokenize.OP and text == '(':
                state = None
            else:
                error = True
        elif state[0] == 'define':
            if token_type == tokenize.NAME and text in ('async', 'await'):
                error = True
            else:
                state = None

        if error:
            yield (
                state[1],
                "W606 'async' and 'await' are reserved keywords starting with "
                "Python 3.7",
            )
            state = None

    # Last token
    if state is not None:
        yield (
            state[1],
            "W606 'async' and 'await' are reserved keywords starting with "
            "Python 3.7",
        )


########################################################################
@register_check
def maximum_doc_length(logical_line, max_doc_length, noqa, tokens):
    r"""Limit all doc lines to a maximum of 72 characters.

    For flowing long blocks of text (docstrings or comments), limiting
    the length to 72 characters is recommended.

    Reports warning W505
    """
    if max_doc_length is None or noqa:
        return

    prev_token = None
    skip_lines = set()
    # Skip lines that
    for token_type, text, start, end, line in tokens:
        if token_type not in SKIP_COMMENTS.union([tokenize.STRING]):
            skip_lines.add(line)

    for token_type, text, start, end, line in tokens:
        # Skip lines that aren't pure strings
        if token_type == tokenize.STRING and skip_lines:
            continue
        if token_type in (tokenize.STRING, tokenize.COMMENT):
            # Only check comment-only lines
            if prev_token is None or prev_token in SKIP_TOKENS:
                lines = line.splitlines()
                for line_num, physical_line in enumerate(lines):
                    if start[0] + line_num == 1 and line.startswith('#!'):
                        return
                    length = len(physical_line)
                    chunks = physical_line.split()
                    if token_type == tokenize.COMMENT:
                        if (len(chunks) == 2 and
                                length - len(chunks[-1]) < MAX_DOC_LENGTH):
                            continue
                    if len(chunks) == 1 and line_num + 1 < len(lines):
                        if (len(chunks) == 1 and
                                length - len(chunks[-1]) < MAX_DOC_LENGTH):
                            continue
                    if length > max_doc_length:
                        doc_error = (start[0] + line_num, max_doc_length)
                        yield (doc_error, "W505 doc line too long "
                                          "(%d > %d characters)"
                               % (length, max_doc_length))
        prev_token = token_type


########################################################################
# Helper functions
########################################################################


def readlines(filename):
    """Read the source code."""
    try:
        with tokenize.open(filename) as f:
            return f.readlines()
    except (LookupError, SyntaxError, UnicodeError):
        # Fall back if file encoding is improperly declared
        with open(filename, encoding='latin-1') as f:
            return f.readlines()


def stdin_get_value():
    """Read the value from stdin."""
    return io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8', errors='ignore').read()


noqa = lru_cache(512)(re.compile(r'# no(?:qa|pep8)\b', re.I).search)


def expand_indent(line):
    r"""Return the amount of indentation.

    Tabs are expanded to the next multiple of 8.

    >>> expand_indent('    ')
    4
    >>> expand_indent('\t')
    8
    >>> expand_indent('       \t')
    8
    >>> expand_indent('        \t')
    16
    """
    line = line.rstrip('\n\r')
    if '\t' not in line:
        return len(line) - len(line.lstrip())
    result = 0
    for char in line:
        if char == '\t':
            result = result // 8 * 8 + 8
        elif char == ' ':
            result += 1
        else:
            break
    return result


def mute_string(text):
    """Replace contents with 'xxx' to prevent syntax matching.

    >>> mute_string('"abc"')
    '"xxx"'
    >>> mute_string("'''abc'''")
    "'''xxx'''"
    >>> mute_string("r'abc'")
    "r'xxx'"
    """
    # String modifiers (e.g. u or r)
    start = text.index(text[-1]) + 1
    end = len(text) - 1
    # Triple quotes
    if text[-3:] in ('"""', "'''"):
        start += 2
        end -= 2
    return text[:start] + 'x' * (end - start) + text[end:]


def parse_udiff(diff, patterns=None, parent='.'):
    """Return a dictionary of matching lines."""
    # For each file of the diff, the entry key is the filename,
    # and the value is a set of row numbers to consider.
    rv = {}
    path = nrows = None
    for line in diff.splitlines():
        if nrows:
            if line[:1] != '-':
                nrows -= 1
            continue
        if line[:3] == '@@ ':
            hunk_match = HUNK_REGEX.match(line)
            (row, nrows) = (int(g or '1') for g in hunk_match.groups())
            rv[path].update(range(row, row + nrows))
        elif line[:3] == '+++':
            path = line[4:].split('\t', 1)[0]
            # Git diff will use (i)ndex, (w)ork tree, (c)ommit and
            # (o)bject instead of a/b/c/d as prefixes for patches
            if path[:2] in ('b/', 'w/', 'i/'):
                path = path[2:]
            rv[path] = set()
    return {
        os.path.join(parent, filepath): rows
        for (filepath, rows) in rv.items()
        if rows and filename_match(filepath, patterns)
    }


def normalize_paths(value, parent=os.curdir):
    """Parse a comma-separated list of paths.

    Return a list of absolute paths.
    """
    if not value:
        return []
    if isinstance(value, list):
        return value
    paths = []
    for path in value.split(','):
        path = path.strip()
        if '/' in path:
            path = os.path.abspath(os.path.join(parent, path))
        paths.append(path.rstrip('/'))
    return paths


def filename_match(filename, patterns, default=True):
    """Check if patterns contains a pattern that matches filename.

    If patterns is unspecified, this always returns True.
    """
    if not patterns:
        return default
    return any(fnmatch(filename, pattern) for pattern in patterns)


def update_counts(s, counts):
    r"""Adds one to the counts of each appearance of characters in s,
        for characters in counts"""
    for char in s:
        if char in counts:
            counts[char] += 1


def _is_eol_token(token):
    return token[0] in NEWLINE or token[4][token[3][1]:].lstrip() == '\\\n'


########################################################################
# Framework to run all checks
########################################################################


class Checker:
    """Load a Python source file, tokenize it, check coding style."""

    def __init__(self, filename=None, lines=None,
                 options=None, report=None, **kwargs):
        if options is None:
            options = StyleGuide(kwargs).options
        else:
            assert not kwargs
        self._io_error = None
        self._physical_checks = options.physical_checks
        self._logical_checks = options.logical_checks
        self._ast_checks = options.ast_checks
        self.max_line_length = options.max_line_length
        self.max_doc_length = options.max_doc_length
        self.indent_size = options.indent_size
        self.multiline = False  # in a multiline string?
        self.hang_closing = options.hang_closing
        self.indent_size = options.indent_size
        self.verbose = options.verbose
        self.filename = filename
        # Dictionary where a checker can store its custom state.
        self._checker_states = {}
        if filename is None:
            self.filename = 'stdin'
            self.lines = lines or []
        elif filename == '-':
            self.filename = 'stdin'
            self.lines = stdin_get_value().splitlines(True)
        elif lines is None:
            try:
                self.lines = readlines(filename)
            except OSError:
                (exc_type, exc) = sys.exc_info()[:2]
                self._io_error = f'{exc_type.__name__}: {exc}'
                self.lines = []
        else:
            self.lines = lines
        if self.lines:
            ord0 = ord(self.lines[0][0])
            if ord0 in (0xef, 0xfeff):  # Strip the UTF-8 BOM
                if ord0 == 0xfeff:
                    self.lines[0] = self.lines[0][1:]
                elif self.lines[0][:3] == '\xef\xbb\xbf':
                    self.lines[0] = self.lines[0][3:]
        self.report = report or options.report
        self.report_error = self.report.error
        self.noqa = False

    def report_invalid_syntax(self):
        """Check if the syntax is valid."""
        (exc_type, exc) = sys.exc_info()[:2]
        if len(exc.args) > 1:
            offset = exc.args[1]
            if len(offset) > 2:
                offset = offset[1:3]
        else:
            offset = (1, 0)
        self.report_error(offset[0], offset[1] or 0,
                          f'E901 {exc_type.__name__}: {exc.args[0]}',
                          self.report_invalid_syntax)

    def readline(self):
        """Get the next line from the input buffer."""
        if self.line_number >= self.total_lines:
            return ''
        line = self.lines[self.line_number]
        self.line_number += 1
        if self.indent_char is None and line[:1] in WHITESPACE:
            self.indent_char = line[0]
        return line

    def run_check(self, check, argument_names):
        """Run a check plugin."""
        arguments = []
        for name in argument_names:
            arguments.append(getattr(self, name))
        return check(*arguments)

    def init_checker_state(self, name, argument_names):
        """Prepare custom state for the specific checker plugin."""
        if 'checker_state' in argument_names:
            self.checker_state = self._checker_states.setdefault(name, {})

    def check_physical(self, line):
        """Run all physical checks on a raw input line."""
        self.physical_line = line
        for name, check, argument_names in self._physical_checks:
            self.init_checker_state(name, argument_names)
            result = self.run_check(check, argument_names)
            if result is not None:
                (offset, text) = result
                self.report_error(self.line_number, offset, text, check)
                if text[:4] == 'E101':
                    self.indent_char = line[0]

    def build_tokens_line(self):
        """Build a logical line from tokens."""
        logical = []
        comments = []
        length = 0
        prev_row = prev_col = mapping = None
        for token_type, text, start, end, line in self.tokens:
            if token_type in SKIP_TOKENS:
                continue
            if not mapping:
                mapping = [(0, start)]
            if token_type == tokenize.COMMENT:
                comments.append(text)
                continue
            if token_type == tokenize.STRING:
                text = mute_string(text)
            if prev_row:
                (start_row, start_col) = start
                if prev_row != start_row:    # different row
                    prev_text = self.lines[prev_row - 1][prev_col - 1]
                    if prev_text == ',' or (prev_text not in '{[(' and
                                            text not in '}])'):
                        text = ' ' + text
                elif prev_col != start_col:  # different column
                    text = line[prev_col:start_col] + text
            logical.append(text)
            length += len(text)
            mapping.append((length, end))
            (prev_row, prev_col) = end
        self.logical_line = ''.join(logical)
        self.noqa = comments and noqa(''.join(comments))
        return mapping

    def check_logical(self):
        """Build a line from tokens and run all logical checks on it."""
        self.report.increment_logical_line()
        mapping = self.build_tokens_line()
        if not mapping:
            return

        mapping_offsets = [offset for offset, _ in mapping]
        (start_row, start_col) = mapping[0][1]
        start_line = self.lines[start_row - 1]
        self.indent_level = expand_indent(start_line[:start_col])
        if self.blank_before < self.blank_lines:
            self.blank_before = self.blank_lines
        if self.verbose >= 2:
            print(self.logical_line[:80].rstrip())
        for name, check, argument_names in self._logical_checks:
            if self.verbose >= 4:
                print('   ' + name)
            self.init_checker_state(name, argument_names)
            for offset, text in self.run_check(check, argument_names) or ():
                if not isinstance(offset, tuple):
                    # As mappings are ordered, bisecting is a fast way
                    # to find a given offset in them.
                    token_offset, pos = mapping[bisect.bisect_left(
                        mapping_offsets, offset)]
                    offset = (pos[0], pos[1] + offset - token_offset)
                self.report_error(offset[0], offset[1], text, check)
        if self.logical_line:
            self.previous_indent_level = self.indent_level
            self.previous_logical = self.logical_line
            if not self.indent_level:
                self.previous_unindented_logical_line = self.logical_line
        self.blank_lines = 0
        self.tokens = []

    def check_ast(self):
        """Build the file's AST and run all AST checks."""
        try:
            tree = compile(''.join(self.lines), '', 'exec', PyCF_ONLY_AST)
        except (ValueError, SyntaxError, TypeError):
            return self.report_invalid_syntax()
        for name, cls, __ in self._ast_checks:
            checker = cls(tree, self.filename)
            for lineno, offset, text, check in checker.run():
                if not self.lines or not noqa(self.lines[lineno - 1]):
                    self.report_error(lineno, offset, text, check)

    def generate_tokens(self):
        """Tokenize file, run physical line checks and yield tokens."""
        if self._io_error:
            self.report_error(1, 0, 'E902 %s' % self._io_error, readlines)
        tokengen = tokenize.generate_tokens(self.readline)
        try:
            prev_physical = ''
            for token in tokengen:
                if token[2][0] > self.total_lines:
                    return
                self.noqa = token[4] and noqa(token[4])
                self.maybe_check_physical(token, prev_physical)
                yield token
                prev_physical = token[4]
        except (SyntaxError, tokenize.TokenError):
            self.report_invalid_syntax()

    def maybe_check_physical(self, token, prev_physical):
        """If appropriate for token, check current physical line(s)."""
        # Called after every token, but act only on end of line.

        # a newline token ends a single physical line.
        if _is_eol_token(token):
            # if the file does not end with a newline, the NEWLINE
            # token is inserted by the parser, but it does not contain
            # the previous physical line in `token[4]`
            if token[4] == '':
                self.check_physical(prev_physical)
            else:
                self.check_physical(token[4])
        elif token[0] == tokenize.STRING and '\n' in token[1]:
            # Less obviously, a string that contains newlines is a
            # multiline string, either triple-quoted or with internal
            # newlines backslash-escaped. Check every physical line in
            # the string *except* for the last one: its newline is
            # outside of the multiline string, so we consider it a
            # regular physical line, and will check it like any other
            # physical line.
            #
            # Subtleties:
            # - we don't *completely* ignore the last line; if it
            #   contains the magical "# noqa" comment, we disable all
            #   physical checks for the entire multiline string
            # - have to wind self.line_number back because initially it
            #   points to the last line of the string, and we want
            #   check_physical() to give accurate feedback
            if noqa(token[4]):
                return
            self.multiline = True
            self.line_number = token[2][0]
            _, src, (_, offset), _, _ = token
            src = self.lines[self.line_number - 1][:offset] + src
            for line in src.split('\n')[:-1]:
                self.check_physical(line + '\n')
                self.line_number += 1
            self.multiline = False

    def check_all(self, expected=None, line_offset=0):
        """Run all checks on the input file."""
        self.report.init_file(self.filename, self.lines, expected, line_offset)
        self.total_lines = len(self.lines)
        if self._ast_checks:
            self.check_ast()
        self.line_number = 0
        self.indent_char = None
        self.indent_level = self.previous_indent_level = 0
        self.previous_logical = ''
        self.previous_unindented_logical_line = ''
        self.tokens = []
        self.blank_lines = self.blank_before = 0
        parens = 0
        for token in self.generate_tokens():
            self.tokens.append(token)
            token_type, text = token[0:2]
            if self.verbose >= 3:
                if token[2][0] == token[3][0]:
                    pos = '[{}:{}]'.format(token[2][1] or '', token[3][1])
                else:
                    pos = 'l.%s' % token[3][0]
                print('l.%s\t%s\t%s\t%r' %
                      (token[2][0], pos, tokenize.tok_name[token[0]], text))
            if token_type == tokenize.OP:
                if text in '([{':
                    parens += 1
                elif text in '}])':
                    parens -= 1
            elif not parens:
                if token_type in NEWLINE:
                    if token_type == tokenize.NEWLINE:
                        self.check_logical()
                        self.blank_before = 0
                    elif len(self.tokens) == 1:
                        # The physical line contains only this token.
                        self.blank_lines += 1
                        del self.tokens[0]
                    else:
                        self.check_logical()
        if self.tokens:
            self.check_physical(self.lines[-1])
            self.check_logical()
        return self.report.get_file_results()


class BaseReport:
    """Collect the results of the checks."""

    print_filename = False

    def __init__(self, options):
        self._benchmark_keys = options.benchmark_keys
        self._ignore_code = options.ignore_code
        # Results
        self.elapsed = 0
        self.total_errors = 0
        self.counters = dict.fromkeys(self._benchmark_keys, 0)
        self.messages = {}

    def start(self):
        """Start the timer."""
        self._start_time = time.time()

    def stop(self):
        """Stop the timer."""
        self.elapsed = time.time() - self._start_time

    def init_file(self, filename, lines, expected, line_offset):
        """Signal a new file."""
        self.filename = filename
        self.lines = lines
        self.expected = expected or ()
        self.line_offset = line_offset
        self.file_errors = 0
        self.counters['files'] += 1
        self.counters['physical lines'] += len(lines)

    def increment_logical_line(self):
        """Signal a new logical line."""
        self.counters['logical lines'] += 1

    def error(self, line_number, offset, text, check):
        """Report an error, according to options."""
        code = text[:4]
        if self._ignore_code(code):
            return
        if code in self.counters:
            self.counters[code] += 1
        else:
            self.counters[code] = 1
            self.messages[code] = text[5:]
        # Don't care about expected errors or warnings
        if code in self.expected:
            return
        if self.print_filename and not self.file_errors:
            print(self.filename)
        self.file_errors += 1
        self.total_errors += 1
        return code

    def get_file_results(self):
        """Return the count of errors and warnings for this file."""
        return self.file_errors

    def get_count(self, prefix=''):
        """Return the total count of errors and warnings."""
        return sum(self.counters[key]
                   for key in self.messages if key.startswith(prefix))

    def get_statistics(self, prefix=''):
        """Get statistics for message codes that start with the prefix.

        prefix='' matches all errors and warnings
        prefix='E' matches all errors
        prefix='W' matches all warnings
        prefix='E4' matches all errors that have to do with imports
        """
        return ['%-7s %s %s' % (self.counters[key], key, self.messages[key])
                for key in sorted(self.messages) if key.startswith(prefix)]

    def print_statistics(self, prefix=''):
        """Print overall statistics (number of errors and warnings)."""
        for line in self.get_statistics(prefix):
            print(line)

    def print_benchmark(self):
        """Print benchmark numbers."""
        print('{:<7.2f} {}'.format(self.elapsed, 'seconds elapsed'))
        if self.elapsed:
            for key in self._benchmark_keys:
                print('%-7d %s per second (%d total)' %
                      (self.counters[key] / self.elapsed, key,
                       self.counters[key]))


class FileReport(BaseReport):
    """Collect the results of the checks and print the filenames."""

    print_filename = True


class StandardReport(BaseReport):
    """Collect and print the results of the checks."""

    def __init__(self, options):
        super().__init__(options)
        self._fmt = REPORT_FORMAT.get(options.format.lower(),
                                      options.format)
        self._repeat = options.repeat
        self._show_source = options.show_source
        self._show_pep8 = options.show_pep8

    def init_file(self, filename, lines, expected, line_offset):
        """Signal a new file."""
        self._deferred_print = []
        return super().init_file(
            filename, lines, expected, line_offset)

    def error(self, line_number, offset, text, check):
        """Report an error, according to options."""
        code = super().error(line_number, offset, text, check)
        if code and (self.counters[code] == 1 or self._repeat):
            self._deferred_print.append(
                (line_number, offset, code, text[5:], check.__doc__))
        return code

    def get_file_results(self):
        """Print results and return the overall count for this file."""
        self._deferred_print.sort()
        for line_number, offset, code, text, doc in self._deferred_print:
            print(self._fmt % {
                'path': self.filename,
                'row': self.line_offset + line_number, 'col': offset + 1,
                'code': code, 'text': text,
            })
            if self._show_source:
                if line_number > len(self.lines):
                    line = ''
                else:
                    line = self.lines[line_number - 1]
                print(line.rstrip())
                print(re.sub(r'\S', ' ', line[:offset]) + '^')
            if self._show_pep8 and doc:
                print('    ' + doc.strip())

            # stdout is block buffered when not stdout.isatty().
            # line can be broken where buffer boundary since other
            # processes write to same file.
            # flush() after print() to avoid buffer boundary.
            # Typical buffer size is 8192. line written safely when
            # len(line) < 8192.
            sys.stdout.flush()
        return self.file_errors


class DiffReport(StandardReport):
    """Collect and print the results for the changed lines only."""

    def __init__(self, options):
        super().__init__(options)
        self._selected = options.selected_lines

    def error(self, line_number, offset, text, check):
        if line_number not in self._selected[self.filename]:
            return
        return super().error(line_number, offset, text, check)


class StyleGuide:
    """Initialize a PEP-8 instance with few options."""

    def __init__(self, *args, **kwargs):
        # build options from the command line
        self.checker_class = kwargs.pop('checker_class', Checker)
        parse_argv = kwargs.pop('parse_argv', False)
        config_file = kwargs.pop('config_file', False)
        parser = kwargs.pop('parser', None)
        # build options from dict
        options_dict = dict(*args, **kwargs)
        arglist = None if parse_argv else options_dict.get('paths', None)
        verbose = options_dict.get('verbose', None)
        options, self.paths = process_options(
            arglist, parse_argv, config_file, parser, verbose)
        if options_dict:
            options.__dict__.update(options_dict)
            if 'paths' in options_dict:
                self.paths = options_dict['paths']

        self.runner = self.input_file
        self.options = options

        if not options.reporter:
            options.reporter = BaseReport if options.quiet else StandardReport

        options.select = tuple(options.select or ())
        if not (options.select or options.ignore or
                options.testsuite or options.doctest) and DEFAULT_IGNORE:
            # The default choice: ignore controversial checks
            options.ignore = tuple(DEFAULT_IGNORE.split(','))
        else:
            # Ignore all checks which are not explicitly selected
            options.ignore = ('',) if options.select else tuple(options.ignore)
        options.benchmark_keys = BENCHMARK_KEYS[:]
        options.ignore_code = self.ignore_code
        options.physical_checks = self.get_checks('physical_line')
        options.logical_checks = self.get_checks('logical_line')
        options.ast_checks = self.get_checks('tree')
        self.init_report()

    def init_report(self, reporter=None):
        """Initialize the report instance."""
        self.options.report = (reporter or self.options.reporter)(self.options)
        return self.options.report

    def check_files(self, paths=None):
        """Run all checks on the paths."""
        if paths is None:
            paths = self.paths
        report = self.options.report
        runner = self.runner
        report.start()
        try:
            for path in paths:
                if os.path.isdir(path):
                    self.input_dir(path)
                elif not self.excluded(path):
                    runner(path)
        except KeyboardInterrupt:
            print('... stopped')
        report.stop()
        return report

    def input_file(self, filename, lines=None, expected=None, line_offset=0):
        """Run all checks on a Python source file."""
        if self.options.verbose:
            print('checking %s' % filename)
        fchecker = self.checker_class(
            filename, lines=lines, options=self.options)
        return fchecker.check_all(expected=expected, line_offset=line_offset)

    def input_dir(self, dirname):
        """Check all files in this directory and all subdirectories."""
        dirname = dirname.rstrip('/')
        if self.excluded(dirname):
            return 0
        counters = self.options.report.counters
        verbose = self.options.verbose
        filepatterns = self.options.filename
        runner = self.runner
        for root, dirs, files in os.walk(dirname):
            if verbose:
                print('directory ' + root)
            counters['directories'] += 1
            for subdir in sorted(dirs):
                if self.excluded(subdir, root):
                    dirs.remove(subdir)
            for filename in sorted(files):
                # contain a pattern that matches?
                if (
                    filename_match(filename, filepatterns) and
                    not self.excluded(filename, root)
                ):
                    runner(os.path.join(root, filename))

    def excluded(self, filename, parent=None):
        """Check if the file should be excluded.

        Check if 'options.exclude' contains a pattern matching filename.
        """
        if not self.options.exclude:
            return False
        basename = os.path.basename(filename)
        if filename_match(basename, self.options.exclude):
            return True
        if parent:
            filename = os.path.join(parent, filename)
        filename = os.path.abspath(filename)
        return filename_match(filename, self.options.exclude)

    def ignore_code(self, code):
        """Check if the error code should be ignored.

        If 'options.select' contains a prefix of the error code,
        return False.  Else, if 'options.ignore' contains a prefix of
        the error code, return True.
        """
        if len(code) < 4 and any(s.startswith(code)
                                 for s in self.options.select):
            return False
        return (code.startswith(self.options.ignore) and
                not code.startswith(self.options.select))

    def get_checks(self, argument_name):
        """Get all the checks for this category.

        Find all globally visible functions where the first argument
        name starts with argument_name and which contain selected tests.
        """
        checks = []
        for check, attrs in _checks[argument_name].items():
            (codes, args) = attrs
            if any(not (code and self.ignore_code(code)) for code in codes):
                checks.append((check.__name__, check, args))
        return sorted(checks)


def get_parser(prog='pycodestyle', version=__version__):
    """Create the parser for the program."""
    parser = OptionParser(prog=prog, version=version,
                          usage="%prog [options] input ...")
    parser.config_options = [
        'exclude', 'filename', 'select', 'ignore', 'max-line-length',
        'max-doc-length', 'indent-size', 'hang-closing', 'count', 'format',
        'quiet', 'show-pep8', 'show-source', 'statistics', 'verbose']
    parser.add_option('-v', '--verbose', default=0, action='count',
                      help="print status messages, or debug with -vv")
    parser.add_option('-q', '--quiet', default=0, action='count',
                      help="report only file names, or nothing with -qq")
    parser.add_option('-r', '--repeat', default=True, action='store_true',
                      help="(obsolete) show all occurrences of the same error")
    parser.add_option('--first', action='store_false', dest='repeat',
                      help="show first occurrence of each error")
    parser.add_option('--exclude', metavar='patterns', default=DEFAULT_EXCLUDE,
                      help="exclude files or directories which match these "
                           "comma separated patterns (default: %default)")
    parser.add_option('--filename', metavar='patterns', default='*.py',
                      help="when parsing directories, only check filenames "
                           "matching these comma separated patterns "
                           "(default: %default)")
    parser.add_option('--select', metavar='errors', default='',
                      help="select errors and warnings (e.g. E,W6)")
    parser.add_option('--ignore', metavar='errors', default='',
                      help="skip errors and warnings (e.g. E4,W) "
                           "(default: %s)" % DEFAULT_IGNORE)
    parser.add_option('--show-source', action='store_true',
                      help="show source code for each error")
    parser.add_option('--show-pep8', action='store_true',
                      help="show text of PEP 8 for each error "
                           "(implies --first)")
    parser.add_option('--statistics', action='store_true',
                      help="count errors and warnings")
    parser.add_option('--count', action='store_true',
                      help="print total number of errors and warnings "
                           "to standard error and set exit code to 1 if "
                           "total is not null")
    parser.add_option('--max-line-length', type='int', metavar='n',
                      default=MAX_LINE_LENGTH,
                      help="set maximum allowed line length "
                           "(default: %default)")
    parser.add_option('--max-doc-length', type='int', metavar='n',
                      default=None,
                      help="set maximum allowed doc line length and perform "
                           "these checks (unchecked if not set)")
    parser.add_option('--indent-size', type='int', metavar='n',
                      default=INDENT_SIZE,
                      help="set how many spaces make up an indent "
                           "(default: %default)")
    parser.add_option('--hang-closing', action='store_true',
                      help="hang closing bracket instead of matching "
                           "indentation of opening bracket's line")
    parser.add_option('--format', metavar='format', default='default',
                      help="set the error format [default|pylint|<custom>]")
    parser.add_option('--diff', action='store_true',
                      help="report changes only within line number ranges in "
                           "the unified diff received on STDIN")
    group = parser.add_option_group("Testing Options")
    if os.path.exists(TESTSUITE_PATH):
        group.add_option('--testsuite', metavar='dir',
                         help="run regression tests from dir")
        group.add_option('--doctest', action='store_true',
                         help="run doctest on myself")
    group.add_option('--benchmark', action='store_true',
                     help="measure processing speed")
    return parser


def read_config(options, args, arglist, parser):
    """Read and parse configurations.

    If a config file is specified on the command line with the
    "--config" option, then only it is used for configuration.

    Otherwise, the user configuration (~/.config/pycodestyle) and any
    local configurations in the current directory or above will be
    merged together (in that order) using the read method of
    ConfigParser.
    """
    config = configparser.RawConfigParser()

    cli_conf = options.config

    local_dir = os.curdir

    if USER_CONFIG and os.path.isfile(USER_CONFIG):
        if options.verbose:
            print('user configuration: %s' % USER_CONFIG)
        config.read(USER_CONFIG)

    parent = tail = args and os.path.abspath(os.path.commonprefix(args))
    while tail:
        if config.read(os.path.join(parent, fn) for fn in PROJECT_CONFIG):
            local_dir = parent
            if options.verbose:
                print('local configuration: in %s' % parent)
            break
        (parent, tail) = os.path.split(parent)

    if cli_conf and os.path.isfile(cli_conf):
        if options.verbose:
            print('cli configuration: %s' % cli_conf)
        config.read(cli_conf)

    pycodestyle_section = None
    if config.has_section(parser.prog):
        pycodestyle_section = parser.prog
    elif config.has_section('pep8'):
        pycodestyle_section = 'pep8'  # Deprecated
        warnings.warn('[pep8] section is deprecated. Use [pycodestyle].')

    if pycodestyle_section:
        option_list = {o.dest: o.type or o.action for o in parser.option_list}

        # First, read the default values
        (new_options, __) = parser.parse_args([])

        # Second, parse the configuration
        for opt in config.options(pycodestyle_section):
            if opt.replace('_', '-') not in parser.config_options:
                print("  unknown option '%s' ignored" % opt)
                continue
            if options.verbose > 1:
                print("  {} = {}".format(opt,
                                         config.get(pycodestyle_section, opt)))
            normalized_opt = opt.replace('-', '_')
            opt_type = option_list[normalized_opt]
            if opt_type in ('int', 'count'):
                value = config.getint(pycodestyle_section, opt)
            elif opt_type in ('store_true', 'store_false'):
                value = config.getboolean(pycodestyle_section, opt)
            else:
                value = config.get(pycodestyle_section, opt)
                if normalized_opt == 'exclude':
                    value = normalize_paths(value, local_dir)
            setattr(new_options, normalized_opt, value)

        # Third, overwrite with the command-line options
        (options, __) = parser.parse_args(arglist, values=new_options)
    options.doctest = options.testsuite = False
    return options


def process_options(arglist=None, parse_argv=False, config_file=None,
                    parser=None, verbose=None):
    """Process options passed either via arglist or command line args.

    Passing in the ``config_file`` parameter allows other tools, such as
    flake8 to specify their own options to be processed in pycodestyle.
    """
    if not parser:
        parser = get_parser()
    if not parser.has_option('--config'):
        group = parser.add_option_group("Configuration", description=(
            "The project options are read from the [%s] section of the "
            "tox.ini file or the setup.cfg file located in any parent folder "
            "of the path(s) being processed.  Allowed options are: %s." %
            (parser.prog, ', '.join(parser.config_options))))
        group.add_option('--config', metavar='path', default=config_file,
                         help="user config file location")
    # Don't read the command line if the module is used as a library.
    if not arglist and not parse_argv:
        arglist = []
    # If parse_argv is True and arglist is None, arguments are
    # parsed from the command line (sys.argv)
    (options, args) = parser.parse_args(arglist)
    options.reporter = None

    # If explicitly specified verbosity, override any `-v` CLI flag
    if verbose is not None:
        options.verbose = verbose

    if options.ensure_value('testsuite', False):
        args.append(options.testsuite)
    elif not options.ensure_value('doctest', False):
        if parse_argv and not args:
            if options.diff or any(os.path.exists(name)
                                   for name in PROJECT_CONFIG):
                args = ['.']
            else:
                parser.error('input not specified')
        options = read_config(options, args, arglist, parser)
        options.reporter = parse_argv and options.quiet == 1 and FileReport

    options.filename = _parse_multi_options(options.filename)
    options.exclude = normalize_paths(options.exclude)
    options.select = _parse_multi_options(options.select)
    options.ignore = _parse_multi_options(options.ignore)

    if options.diff:
        options.reporter = DiffReport
        stdin = stdin_get_value()
        options.selected_lines = parse_udiff(stdin, options.filename, args[0])
        args = sorted(options.selected_lines)

    return options, args


def _parse_multi_options(options, split_token=','):
    r"""Split and strip and discard empties.

    Turns the following:

    A,
    B,

    into ["A", "B"]
    """
    if options:
        return [o.strip() for o in options.split(split_token) if o.strip()]
    else:
        return options


def _main():
    """Parse options and run checks on Python source."""
    import signal

    # Handle "Broken pipe" gracefully
    try:
        signal.signal(signal.SIGPIPE, lambda signum, frame: sys.exit(1))
    except AttributeError:
        pass    # not supported on Windows

    style_guide = StyleGuide(parse_argv=True)
    options = style_guide.options

    if options.doctest or options.testsuite:
        from testsuite.support import run_tests
        report = run_tests(style_guide)
    else:
        report = style_guide.check_files()

    if options.statistics:
        report.print_statistics()

    if options.benchmark:
        report.print_benchmark()

    if options.testsuite and not options.quiet:
        report.print_results()

    if report.total_errors:
        if options.count:
            sys.stderr.write(str(report.total_errors) + '\n')
        sys.exit(1)


if __name__ == '__main__':
    _main()
# pycodestyle.py - Check Python source code formatting, according to
# PEP 8
#
# Copyright (C) 2006-2009 Johann C. Rocholl <johann@rocholl.net>
# Copyright (C) 2009-2014 Florent Xicluna <florent.xicluna@gmail.com>
# Copyright (C) 2014-2016 Ian Lee <ianlee1521@gmail.com>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
r"""
Check Python source code formatting, according to PEP 8.

For usage and a list of options, try this:
$ python pycodestyle.py -h

This program and its regression test suite live here:
https://github.com/pycqa/pycodestyle

Groups of errors and warnings:
E errors
W warnings
100 indentation
200 whitespace
300 blank lines
400 imports
500 line length
600 deprecation
700 statements
900 syntax error
"""
import bisect
import configparser
import inspect
import io
import keyword
import os
import re
import sys
import time
import tokenize
import warnings
from fnmatch import fnmatch
from functools import lru_cache
from optparse import OptionParser

# this is a performance hack.  see https://bugs.python.org/issue43014
if (
        sys.version_info < (3, 10) and
        callable(getattr(tokenize, '_compile', None))
):  # pragma: no cover (<py310)
    tokenize._compile = lru_cache(tokenize._compile)  # type: ignore

__version__ = '2.11.0'  # patched PY-37054

DEFAULT_EXCLUDE = '.svn,CVS,.bzr,.hg,.git,__pycache__,.tox'
DEFAULT_IGNORE = 'E121,E123,E126,E226,E24,E704,W503,W504'
try:
    if sys.platform == 'win32':  # pragma: win32 cover
        USER_CONFIG = os.path.expanduser(r'~\.pycodestyle')
    else:  # pragma: win32 no cover
        USER_CONFIG = os.path.join(
            os.getenv('XDG_CONFIG_HOME') or os.path.expanduser('~/.config'),
            'pycodestyle'
        )
except ImportError:
    USER_CONFIG = None

PROJECT_CONFIG = ('setup.cfg', 'tox.ini')
MAX_LINE_LENGTH = 79
# Number of blank lines between various code parts.
BLANK_LINES_CONFIG = {
    # Top level class and function.
    'top_level': 2,
    # Methods and nested class and function.
    'method': 1,
}
MAX_DOC_LENGTH = 72
INDENT_SIZE = 4
REPORT_FORMAT = {
    'default': '%(path)s:%(row)d:%(col)d: %(code)s %(text)s',
    'pylint': '%(path)s:%(row)d: [%(code)s] %(text)s',
}

PyCF_ONLY_AST = 1024
SINGLETONS = frozenset(['False', 'None', 'True'])
KEYWORDS = frozenset(keyword.kwlist + ['print']) - SINGLETONS
UNARY_OPERATORS = frozenset(['>>', '**', '*', '+', '-'])
ARITHMETIC_OP = frozenset(['**', '*', '/', '//', '+', '-', '@'])
WS_OPTIONAL_OPERATORS = ARITHMETIC_OP.union(['^', '&', '|', '<<', '>>', '%'])
WS_NEEDED_OPERATORS = frozenset([
    '**=', '*=', '/=', '//=', '+=', '-=', '!=', '<', '>',
    '%=', '^=', '&=', '|=', '==', '<=', '>=', '<<=', '>>=', '=',
    'and', 'in', 'is', 'or', '->', ':='])
WHITESPACE = frozenset(' \t\xa0')
NEWLINE = frozenset([tokenize.NL, tokenize.NEWLINE])
SKIP_TOKENS = NEWLINE.union([tokenize.INDENT, tokenize.DEDENT])
# ERRORTOKEN is triggered by backticks in Python 3
SKIP_COMMENTS = SKIP_TOKENS.union([tokenize.COMMENT, tokenize.ERRORTOKEN])
BENCHMARK_KEYS = ['directories', 'files', 'logical lines', 'physical lines']

INDENT_REGEX = re.compile(r'([ \t]*)')
ERRORCODE_REGEX = re.compile(r'\b[A-Z]\d{3}\b')
DOCSTRING_REGEX = re.compile(r'u?r?["\']')
EXTRANEOUS_WHITESPACE_REGEX = re.compile(r'[\[({][ \t]|[ \t][\]}),;:](?!=)')
WHITESPACE_AFTER_COMMA_REGEX = re.compile(r'[,;:]\s*(?:  |\t)')
COMPARE_SINGLETON_REGEX = re.compile(r'(\bNone|\bFalse|\bTrue)?\s*([=!]=)'
                                     r'\s*(?(1)|(None|False|True))\b')
COMPARE_NEGATIVE_REGEX = re.compile(r'\b(?<!is\s)(not)\s+[^][)(}{ ]+\s+'
                                    r'(in|is)\s')
COMPARE_TYPE_REGEX = re.compile(
    r'[=!]=\s+type(?:\s*\(\s*([^)]*[^ )])\s*\))'
    r'|\btype(?:\s*\(\s*([^)]*[^ )])\s*\))\s+[=!]='
)
KEYWORD_REGEX = re.compile(r'(\s*)\b(?:%s)\b(\s*)' % r'|'.join(KEYWORDS))
OPERATOR_REGEX = re.compile(r'(?:[^,\s])(\s*)(?:[-+*/|!<=>%&^]+|:=)(\s*)')
LAMBDA_REGEX = re.compile(r'\blambda\b')
HUNK_REGEX = re.compile(r'^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$')
STARTSWITH_DEF_REGEX = re.compile(r'^(async\s+def|def)\b')
STARTSWITH_TOP_LEVEL_REGEX = re.compile(r'^(async\s+def\s+|def\s+|class\s+|@)')
STARTSWITH_INDENT_STATEMENT_REGEX = re.compile(
    r'^\s*({})\b'.format('|'.join(s.replace(' ', r'\s+') for s in (
        'def', 'async def',
        'for', 'async for',
        'if', 'elif', 'else',
        'try', 'except', 'finally',
        'with', 'async with',
        'class',
        'while',
    )))
)
DUNDER_REGEX = re.compile(r"^__([^\s]+)__(?::\s*[a-zA-Z.0-9_\[\]\"]+)? = ")
BLANK_EXCEPT_REGEX = re.compile(r"except\s*:")

if sys.version_info >= (3, 12):  # pragma: >=3.12 cover
    FSTRING_START = tokenize.FSTRING_START
    FSTRING_MIDDLE = tokenize.FSTRING_MIDDLE
    FSTRING_END = tokenize.FSTRING_END
else:  # pragma: <3.12 cover
    FSTRING_START = FSTRING_MIDDLE = FSTRING_END = -1

_checks = {'physical_line': {}, 'logical_line': {}, 'tree': {}}


def _get_parameters(function):
    return [parameter.name
            for parameter
            in inspect.signature(function).parameters.values()
            if parameter.kind == parameter.POSITIONAL_OR_KEYWORD]


def register_check(check, codes=None):
    """Register a new check object."""
    def _add_check(check, kind, codes, args):
        if check in _checks[kind]:
            _checks[kind][check][0].extend(codes or [])
        else:
            _checks[kind][check] = (codes or [''], args)
    if inspect.isfunction(check):
        args = _get_parameters(check)
        if args and args[0] in ('physical_line', 'logical_line'):
            if codes is None:
                codes = ERRORCODE_REGEX.findall(check.__doc__ or '')
            _add_check(check, args[0], codes, args)
    elif inspect.isclass(check):
        if _get_parameters(check.__init__)[:2] == ['self', 'tree']:
            _add_check(check, 'tree', codes, None)
    return check


########################################################################
# Plugins (check functions) for physical lines
########################################################################

@register_check
def tabs_or_spaces(physical_line, indent_char):
    r"""Never mix tabs and spaces.

    The most popular way of indenting Python is with spaces only.  The
    second-most popular way is with tabs only.  Code indented with a
    mixture of tabs and spaces should be converted to using spaces
    exclusively.  When invoking the Python command line interpreter with
    the -t option, it issues warnings about code that illegally mixes
    tabs and spaces.  When using -tt these warnings become errors.
    These options are highly recommended!

    Okay: if a == 0:\n    a = 1\n    b = 1
    """
    indent = INDENT_REGEX.match(physical_line).group(1)
    for offset, char in enumerate(indent):
        if char != indent_char:
            return offset, "E101 indentation contains mixed spaces and tabs"


@register_check
def tabs_obsolete(physical_line):
    r"""On new projects, spaces-only are strongly recommended over tabs.

    Okay: if True:\n    return
    W191: if True:\n\treturn
    """
    indent = INDENT_REGEX.match(physical_line).group(1)
    if '\t' in indent:
        return indent.index('\t'), "W191 indentation contains tabs"


@register_check
def trailing_whitespace(physical_line):
    r"""Trailing whitespace is superfluous.

    The warning returned varies on whether the line itself is blank,
    for easier filtering for those who want to indent their blank lines.

    Okay: spam(1)\n#
    W291: spam(1) \n#
    W293: class Foo(object):\n    \n    bang = 12
    """
    physical_line = physical_line.rstrip('\n')    # chr(10), newline
    physical_line = physical_line.rstrip('\r')    # chr(13), carriage return
    physical_line = physical_line.rstrip('\x0c')  # chr(12), form feed, ^L
    stripped = physical_line.rstrip(' \t\v')
    if physical_line != stripped:
        if stripped:
            return len(stripped), "W291 trailing whitespace"
        else:
            return 0, "W293 blank line contains whitespace"


@register_check
def trailing_blank_lines(physical_line, lines, line_number, total_lines):
    r"""Trailing blank lines are superfluous.

    Okay: spam(1)
    W391: spam(1)\n

    However the last line should end with a new line (warning W292).
    """
    if line_number == total_lines:
        stripped_last_line = physical_line.rstrip('\r\n')
        if physical_line and not stripped_last_line:
            return 0, "W391 blank line at end of file"
        if stripped_last_line == physical_line:
            return len(lines[-1]), "W292 no newline at end of file"


@register_check
def maximum_line_length(physical_line, max_line_length, multiline,
                        line_number, noqa):
    r"""Limit all lines to a maximum of 79 characters.

    There are still many devices around that are limited to 80 character
    lines; plus, limiting windows to 80 characters makes it possible to
    have several windows side-by-side.  The default wrapping on such
    devices looks ugly.  Therefore, please limit all lines to a maximum
    of 79 characters. For flowing long blocks of text (docstrings or
    comments), limiting the length to 72 characters is recommended.

    Reports error E501.
    """
    line = physical_line.rstrip()
    length = len(line)
    if length > max_line_length and not noqa:
        # Special case: ignore long shebang lines.
        if line_number == 1 and line.startswith('#!'):
            return
        # Special case for long URLs in multi-line docstrings or
        # comments, but still report the error when the 72 first chars
        # are whitespaces.
        chunks = line.split()
        if ((len(chunks) == 1 and multiline) or
            (len(chunks) == 2 and chunks[0] == '#')) and \
                len(line) - len(chunks[-1]) < max_line_length - 7:
            return
        if length > max_line_length:
            return (max_line_length, "E501 line too long "
                    "(%d > %d characters)" % (length, max_line_length))


########################################################################
# Plugins (check functions) for logical lines
########################################################################


def _is_one_liner(logical_line, indent_level, lines, line_number):
    if not STARTSWITH_TOP_LEVEL_REGEX.match(logical_line):
        return False

    line_idx = line_number - 1

    if line_idx < 1:
        prev_indent = 0
    else:
        prev_indent = expand_indent(lines[line_idx - 1])

    if prev_indent > indent_level:
        return False

    while line_idx < len(lines):
        line = lines[line_idx].strip()
        if not line.startswith('@') and STARTSWITH_TOP_LEVEL_REGEX.match(line):
            break
        else:
            line_idx += 1
    else:
        return False  # invalid syntax: EOF while searching for def/class

    next_idx = line_idx + 1
    while next_idx < len(lines):
        if lines[next_idx].strip():
            break
        else:
            next_idx += 1
    else:
        return True  # line is last in the file

    return expand_indent(lines[next_idx]) <= indent_level


@register_check
def blank_lines(logical_line, blank_lines, indent_level, line_number,
                blank_before, previous_logical,
                previous_unindented_logical_line, previous_indent_level,
                lines):
    r"""Separate top-level function and class definitions with two blank
    lines.

    Method definitions inside a class are separated by a single blank
    line.

    Extra blank lines may be used (sparingly) to separate groups of
    related functions.  Blank lines may be omitted between a bunch of
    related one-liners (e.g. a set of dummy implementations).

    Use blank lines in functions, sparingly, to indicate logical
    sections.

    Okay: def a():\n    pass\n\n\ndef b():\n    pass
    Okay: def a():\n    pass\n\n\nasync def b():\n    pass
    Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
    Okay: default = 1\nfoo = 1
    Okay: classify = 1\nfoo = 1

    E301: class Foo:\n    b = 0\n    def bar():\n        pass
    E302: def a():\n    pass\n\ndef b(n):\n    pass
    E302: def a():\n    pass\n\nasync def b(n):\n    pass
    E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
    E303: def a():\n\n\n\n    pass
    E304: @decorator\n\ndef a():\n    pass
    E305: def a():\n    pass\na()
    E306: def a():\n    def b():\n        pass\n    def c():\n        pass
    """  # noqa
    top_level_lines = BLANK_LINES_CONFIG['top_level']
    method_lines = BLANK_LINES_CONFIG['method']

    if not previous_logical and blank_before < top_level_lines:
        return  # Don't expect blank lines before the first line
    if previous_logical.startswith('@'):
        if blank_lines:
            yield 0, "E304 blank lines found after function decorator"
    elif (blank_lines > top_level_lines or
            (indent_level and blank_lines == method_lines + 1)
          ):
        yield 0, "E303 too many blank lines (%d)" % blank_lines
    elif STARTSWITH_TOP_LEVEL_REGEX.match(logical_line):
        # allow a group of one-liners
        if (
            _is_one_liner(logical_line, indent_level, lines, line_number) and
            blank_before == 0
        ):
            return
        if indent_level:
            if not (blank_before == method_lines or
                    previous_indent_level < indent_level or
                    DOCSTRING_REGEX.match(previous_logical)
                    ):
                ancestor_level = indent_level
                nested = False
                # Search backwards for a def ancestor or tree root
                # (top level).
                for line in lines[line_number - top_level_lines::-1]:
                    if line.strip() and expand_indent(line) < ancestor_level:
                        ancestor_level = expand_indent(line)
                        nested = STARTSWITH_DEF_REGEX.match(line.lstrip())
                        if nested or ancestor_level == 0:
                            break
                if nested:
                    yield 0, "E306 expected %s blank line before a " \
                        "nested definition, found 0" % (method_lines,)
                else:
                    yield 0, "E301 expected {} blank line, found 0".format(
                        method_lines)
        elif blank_before != top_level_lines:
            yield 0, "E302 expected %s blank lines, found %d" % (
                top_level_lines, blank_before)
    elif (logical_line and
            not indent_level and
            blank_before != top_level_lines and
            previous_unindented_logical_line.startswith(('def ', 'class '))
          ):
        yield 0, "E305 expected %s blank lines after " \
            "class or function definition, found %d" % (
                top_level_lines, blank_before)


@register_check
def extraneous_whitespace(logical_line):
    r"""Avoid extraneous whitespace.

    Avoid extraneous whitespace in these situations:
    - Immediately inside parentheses, brackets or braces.
    - Immediately before a comma, semicolon, or colon.

    Okay: spam(ham[1], {eggs: 2})
    E201: spam( ham[1], {eggs: 2})
    E201: spam(ham[ 1], {eggs: 2})
    E201: spam(ham[1], { eggs: 2})
    E202: spam(ham[1], {eggs: 2} )
    E202: spam(ham[1 ], {eggs: 2})
    E202: spam(ham[1], {eggs: 2 })

    E203: if x == 4: print x, y; x, y = y , x
    E203: if x == 4: print x, y ; x, y = y, x
    E203: if x == 4 : print x, y; x, y = y, x
    """
    line = logical_line
    for match in EXTRANEOUS_WHITESPACE_REGEX.finditer(line):
        text = match.group()
        char = text.strip()
        found = match.start()
        if text[-1].isspace():
            # assert char in '([{'
            yield found + 1, "E201 whitespace after '%s'" % char
        elif line[found - 1] != ',':
            code = ('E202' if char in '}])' else 'E203')  # if char in ',;:'
            yield found, f"{code} whitespace before '{char}'"


@register_check
def whitespace_around_keywords(logical_line):
    r"""Avoid extraneous whitespace around keywords.

    Okay: True and False
    E271: True and  False
    E272: True  and False
    E273: True and\tFalse
    E274: True\tand False
    """
    for match in KEYWORD_REGEX.finditer(logical_line):
        before, after = match.groups()

        if '\t' in before:
            yield match.start(1), "E274 tab before keyword"
        elif len(before) > 1:
            yield match.start(1), "E272 multiple spaces before keyword"

        if '\t' in after:
            yield match.start(2), "E273 tab after keyword"
        elif len(after) > 1:
            yield match.start(2), "E271 multiple spaces after keyword"


@register_check
def missing_whitespace_after_keyword(logical_line, tokens):
    r"""Keywords should be followed by whitespace.

    Okay: from foo import (bar, baz)
    E275: from foo import(bar, baz)
    E275: from importable.module import(bar, baz)
    E275: if(foo): bar
    """
    for tok0, tok1 in zip(tokens, tokens[1:]):
        # This must exclude the True/False/None singletons, which can
        # appear e.g. as "if x is None:", and async/await, which were
        # valid identifier names in old Python versions.
        if (tok0.end == tok1.start and
                keyword.iskeyword(tok0.string) and
                tok0.string not in SINGLETONS and
                not (tok0.string == 'except' and tok1.string == '*') and
                not (tok0.string == 'yield' and tok1.string == ')') and
                tok1.string not in ':\n'):
            yield tok0.end, "E275 missing whitespace after keyword"


@register_check
def indentation(logical_line, previous_logical, indent_char,
                indent_level, previous_indent_level,
                indent_size):
    r"""Use indent_size (PEP8 says 4) spaces per indentation level.

    For really old code that you don't want to mess up, you can continue
    to use 8-space tabs.

    Okay: a = 1
    Okay: if a == 0:\n    a = 1
    E111:   a = 1
    E114:   # a = 1

    Okay: for item in items:\n    pass
    E112: for item in items:\npass
    E115: for item in items:\n# Hi\n    pass

    Okay: a = 1\nb = 2
    E113: a = 1\n    b = 2
    E116: a = 1\n    # b = 2
    """
    c = 0 if logical_line else 3
    tmpl = "E11%d %s" if logical_line else "E11%d %s (comment)"
    if indent_level % indent_size:
        yield 0, tmpl % (
            1 + c,
            "indentation is not a multiple of " + str(indent_size),
        )
    indent_expect = previous_logical.endswith(':')
    if indent_expect and indent_level <= previous_indent_level:
        yield 0, tmpl % (2 + c, "expected an indented block")
    elif not indent_expect and indent_level > previous_indent_level:
        yield 0, tmpl % (3 + c, "unexpected indentation")

    if indent_expect:
        expected_indent_amount = 8 if indent_char == '\t' else 4
        expected_indent_level = previous_indent_level + expected_indent_amount
        if indent_level > expected_indent_level:
            yield 0, tmpl % (7, 'over-indented')


@register_check
def continued_indentation(logical_line, tokens, indent_level, hang_closing,
                          indent_char, indent_size, noqa, verbose):
    r"""Continuation lines indentation.

    Continuation lines should align wrapped elements either vertically
    using Python's implicit line joining inside parentheses, brackets
    and braces, or using a hanging indent.

    When using a hanging indent these considerations should be applied:
    - there should be no arguments on the first line, and
    - further indentation should be used to clearly distinguish itself
      as a continuation line.

    Okay: a = (\n)
    E123: a = (\n    )

    Okay: a = (\n    42)
    E121: a = (\n   42)
    E122: a = (\n42)
    E123: a = (\n    42\n    )
    E124: a = (24,\n     42\n)
    E125: if (\n    b):\n    pass
    E126: a = (\n        42)
    E127: a = (24,\n      42)
    E128: a = (24,\n    42)
    E129: if (a or\n    b):\n    pass
    E131: a = (\n    42\n 24)
    """
    first_row = tokens[0][2][0]
    nrows = 1 + tokens[-1][2][0] - first_row
    if noqa or nrows == 1:
        return

    # indent_next tells us whether the next block is indented; assuming
    # that it is indented by 4 spaces, then we should not allow 4-space
    # indents on the final continuation line; in turn, some other
    # indents are allowed to have an extra 4 spaces.
    indent_next = logical_line.endswith(':')

    row = depth = 0
    valid_hangs = (indent_size,) if indent_char != '\t' \
        else (indent_size, indent_size * 2)
    # remember how many brackets were opened on each line
    parens = [0] * nrows
    # relative indents of physical lines
    rel_indent = [0] * nrows
    # for each depth, collect a list of opening rows
    open_rows = [[0]]
    # for each depth, memorize the hanging indentation
    hangs = [None]
    # visual indents
    indent_chances = {}
    last_indent = tokens[0][2]
    visual_indent = None
    last_token_multiline = False
    # for each depth, memorize the visual indent column
    indent = [last_indent[1]]
    if verbose >= 3:
        print(">>> " + tokens[0][4].rstrip())

    for token_type, text, start, end, line in tokens:

        newline = row < start[0] - first_row
        if newline:
            row = start[0] - first_row
            newline = not last_token_multiline and token_type not in NEWLINE

        if newline:
            # this is the beginning of a continuation line.
            last_indent = start
            if verbose >= 3:
                print("... " + line.rstrip())

            # record the initial indent.
            rel_indent[row] = expand_indent(line) - indent_level

            # identify closing bracket
            close_bracket = (token_type == tokenize.OP and text in ']})')

            # is the indent relative to an opening bracket line?
            for open_row in reversed(open_rows[depth]):
                hang = rel_indent[row] - rel_indent[open_row]
                hanging_indent = hang in valid_hangs
                if hanging_indent:
                    break
            if hangs[depth]:
                hanging_indent = (hang == hangs[depth])
            # is there any chance of visual indent?
            visual_indent = (not close_bracket and hang > 0 and
                             indent_chances.get(start[1]))

            if close_bracket and indent[depth]:
                # closing bracket for visual indent
                if start[1] != indent[depth]:
                    yield (start, "E124 closing bracket does not match "
                           "visual indentation")
            elif close_bracket and not hang:
                # closing bracket matches indentation of opening
                # bracket's line
                if hang_closing:
                    yield start, "E133 closing bracket is missing indentation"
            elif indent[depth] and start[1] < indent[depth]:
                if visual_indent is not True:
                    # visual indent is broken
                    yield (start, "E128 continuation line "
                           "under-indented for visual indent")
            elif hanging_indent or (indent_next and
                                    rel_indent[row] == 2 * indent_size):
                # hanging indent is verified
                if close_bracket and not hang_closing:
                    yield (start, "E123 closing bracket does not match "
                           "indentation of opening bracket's line")
                hangs[depth] = hang
            elif visual_indent is True:
                # visual indent is verified
                indent[depth] = start[1]
            elif visual_indent in (text, str):
                # ignore token lined up with matching one from a
                # previous line
                pass
            else:
                # indent is broken
                if hang <= 0:
                    error = "E122", "missing indentation or outdented"
                elif indent[depth]:
                    error = "E127", "over-indented for visual indent"
                elif not close_bracket and hangs[depth]:
                    error = "E131", "unaligned for hanging indent"
                else:
                    hangs[depth] = hang
                    if hang > indent_size:
                        error = "E126", "over-indented for hanging indent"
                    else:
                        error = "E121", "under-indented for hanging indent"
                yield start, "%s continuation line %s" % error

        # look for visual indenting
        if (parens[row] and
                token_type not in (tokenize.NL, tokenize.COMMENT) and
                not indent[depth]):
            indent[depth] = start[1]
            indent_chances[start[1]] = True
            if verbose >= 4:
                print(f"bracket depth {depth} indent to {start[1]}")
        # deal with implicit string concatenation
        elif token_type in (tokenize.STRING, tokenize.COMMENT, FSTRING_START):
            indent_chances[start[1]] = str
        # visual indent after assert/raise/with
        elif not row and not depth and text in ["assert", "raise", "with"]:
            indent_chances[end[1] + 1] = True
        # special case for the "if" statement because len("if (") == 4
        elif not indent_chances and not row and not depth and text == 'if':
            indent_chances[end[1] + 1] = True
        elif text == ':' and line[end[1]:].isspace():
            open_rows[depth].append(row)

        # keep track of bracket depth
        if token_type == tokenize.OP:
            if text in '([{':
                depth += 1
                indent.append(0)
                hangs.append(None)
                if len(open_rows) == depth:
                    open_rows.append([])
                open_rows[depth].append(row)
                parens[row] += 1
                if verbose >= 4:
                    print("bracket depth %s seen, col %s, visual min = %s" %
                          (depth, start[1], indent[depth]))
            elif text in ')]}' and depth > 0:
                # parent indents should not be more than this one
                prev_indent = indent.pop() or last_indent[1]
                hangs.pop()
                for d in range(depth):
                    if indent[d] > prev_indent:
                        indent[d] = 0
                for ind in list(indent_chances):
                    if ind >= prev_indent:
                        del indent_chances[ind]
                del open_rows[depth + 1:]
                depth -= 1
                if depth:
                    indent_chances[indent[depth]] = True
                for idx in range(row, -1, -1):
                    if parens[idx]:
                        parens[idx] -= 1
                        break
            assert len(indent) == depth + 1
            if start[1] not in indent_chances:
                # allow lining up tokens
                indent_chances[start[1]] = text

        last_token_multiline = (start[0] != end[0])
        if last_token_multiline:
            rel_indent[end[0] - first_row] = rel_indent[row]

    if indent_next and expand_indent(line) == indent_level + indent_size:
        pos = (start[0], indent[0] + indent_size)
        if visual_indent:
            code = "E129 visually indented line"
        else:
            code = "E125 continuation line"
        yield pos, "%s with same indent as next logical line" % code


@register_check
def whitespace_before_parameters(logical_line, tokens):
    r"""Avoid extraneous whitespace.

    Avoid extraneous whitespace in the following situations:
    - before the open parenthesis that starts the argument list of a
      function call.
    - before the open parenthesis that starts an indexing or slicing.

    Okay: spam(1)
    E211: spam (1)

    Okay: dict['key'] = list[index]
    E211: dict ['key'] = list[index]
    E211: dict['key'] = list [index]
    """
    prev_type, prev_text, __, prev_end, __ = tokens[0]
    for index in range(1, len(tokens)):
        token_type, text, start, end, __ = tokens[index]
        if (
            token_type == tokenize.OP and
            text in '([' and
            start != prev_end and
            (prev_type == tokenize.NAME or prev_text in '}])') and
            # Syntax "class A (B):" is allowed, but avoid it
            (index < 2 or tokens[index - 2][1] != 'class') and
            # Allow "return (a.foo for a in range(5))"
            not keyword.iskeyword(prev_text) and
            (
                sys.version_info < (3, 9) or
                # 3.12+: type is a soft keyword but no braces after
                prev_text == 'type' or
                not keyword.issoftkeyword(prev_text)
            )
        ):
            yield prev_end, "E211 whitespace before '%s'" % text
        prev_type = token_type
        prev_text = text
        prev_end = end


@register_check
def whitespace_around_operator(logical_line):
    r"""Avoid extraneous whitespace around an operator.

    Okay: a = 12 + 3
    E221: a = 4  + 5
    E222: a = 4 +  5
    E223: a = 4\t+ 5
    E224: a = 4 +\t5
    """
    for match in OPERATOR_REGEX.finditer(logical_line):
        before, after = match.groups()

        if '\t' in before:
            yield match.start(1), "E223 tab before operator"
        elif len(before) > 1:
            yield match.start(1), "E221 multiple spaces before operator"

        if '\t' in after:
            yield match.start(2), "E224 tab after operator"
        elif len(after) > 1:
            yield match.start(2), "E222 multiple spaces after operator"


@register_check
def missing_whitespace(logical_line, tokens):
    r"""Surround operators with the correct amount of whitespace.

    - Always surround these binary operators with a single space on
      either side: assignment (=), augmented assignment (+=, -= etc.),
      comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
      Booleans (and, or, not).

    - Each comma, semicolon or colon should be followed by whitespace.

    - If operators with different priorities are used, consider adding
      whitespace around the operators with the lowest priorities.

    Okay: i = i + 1
    Okay: submitted += 1
    Okay: x = x * 2 - 1
    Okay: hypot2 = x * x + y * y
    Okay: c = (a + b) * (a - b)
    Okay: foo(bar, key='word', *args, **kwargs)
    Okay: alpha[:-i]
    Okay: [a, b]
    Okay: (3,)
    Okay: a[3,] = 1
    Okay: a[1:4]
    Okay: a[:4]
    Okay: a[1:]
    Okay: a[1:4:2]

    E225: i=i+1
    E225: submitted +=1
    E225: x = x /2 - 1
    E225: z = x **y
    E225: z = 1and 1
    E226: c = (a+b) * (a-b)
    E226: hypot2 = x*x + y*y
    E227: c = a|b
    E228: msg = fmt%(errno, errmsg)
    E231: ['a','b']
    E231: foo(bar,baz)
    E231: [{'a':'b'}]
    """
    need_space = False
    prev_type = tokenize.OP
    prev_text = prev_end = None
    operator_types = (tokenize.OP, tokenize.NAME)
    brace_stack = []
    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.OP and text in {'[', '(', '{'}:
            brace_stack.append(text)
        elif token_type == FSTRING_START:  # pragma: >=3.12 cover
            brace_stack.append('f')
        elif token_type == tokenize.NAME and text == 'lambda':
            brace_stack.append('l')
        elif brace_stack:
            if token_type == tokenize.OP and text in {']', ')', '}'}:
                brace_stack.pop()
            elif token_type == FSTRING_END:  # pragma: >=3.12 cover
                brace_stack.pop()
            elif (
                    brace_stack[-1] == 'l' and
                    token_type == tokenize.OP and
                    text == ':'
            ):
                brace_stack.pop()

        if token_type in SKIP_COMMENTS:
            continue

        if token_type == tokenize.OP and text in {',', ';', ':'}:
            next_char = line[end[1]:end[1] + 1]
            if next_char not in WHITESPACE and next_char not in '\r\n':
                # slice
                if text == ':' and brace_stack[-1:] == ['[']:
                    pass
                # 3.12+ fstring format specifier
                elif text == ':' and brace_stack[-2:] == ['f', '{']:  # pragma: >=3.12 cover  # noqa: E501
                    pass
                # tuple (and list for some reason?)
                elif text == ',' and next_char in ')]':
                    pass
                else:
                    yield start, f'E231 missing whitespace after {text!r}'

        if need_space:
            if start != prev_end:
                # Found a (probably) needed space
                if need_space is not True and not need_space[1]:
                    yield (need_space[0],
                           "E225 missing whitespace around operator")
                need_space = False
            elif (
                    # def f(a, /, b):
                    #           ^
                    # def f(a, b, /):
                    #              ^
                    # f = lambda a, /:
                    #                ^
                    prev_text == '/' and text in {',', ')', ':'} or
                    # def f(a, b, /):
                    #               ^
                    prev_text == ')' and text == ':'
            ):
                # Tolerate the "/" operator in function definition
                # For more info see PEP570
                pass
            else:
                if need_space is True or need_space[1]:
                    # A needed trailing space was not found
                    yield prev_end, "E225 missing whitespace around operator"
                elif prev_text != '**':
                    code, optype = 'E226', 'arithmetic'
                    if prev_text == '%':
                        code, optype = 'E228', 'modulo'
                    elif prev_text not in ARITHMETIC_OP:
                        code, optype = 'E227', 'bitwise or shift'
                    yield (need_space[0], "%s missing whitespace "
                           "around %s operator" % (code, optype))
                need_space = False
        elif token_type in operator_types and prev_end is not None:
            if (
                    text == '=' and (
                        # allow lambda default args: lambda x=None: None
                        brace_stack[-1:] == ['l'] or
                        # allow keyword args or defaults: foo(bar=None).
                        brace_stack[-1:] == ['('] or
                        # allow python 3.8 fstring repr specifier
                        brace_stack[-2:] == ['f', '{']
                    )
            ):
                pass
            elif text in WS_NEEDED_OPERATORS:
                need_space = True
            elif text in UNARY_OPERATORS:
                # Check if the operator is used as a binary operator
                # Allow unary operators: -123, -x, +1.
                # Allow argument unpacking: foo(*args, **kwargs).
                if prev_type == tokenize.OP and prev_text in '}])' or (
                    prev_type != tokenize.OP and
                    prev_text not in KEYWORDS and (
                        sys.version_info < (3, 9) or
                        not keyword.issoftkeyword(prev_text)
                    )
                ):
                    need_space = None
            elif text in WS_OPTIONAL_OPERATORS:
                need_space = None

            if need_space is None:
                # Surrounding space is optional, but ensure that
                # trailing space matches opening space
                need_space = (prev_end, start != prev_end)
            elif need_space and start == prev_end:
                # A needed opening space was not found
                yield prev_end, "E225 missing whitespace around operator"
                need_space = False
        prev_type = token_type
        prev_text = text
        prev_end = end


@register_check
def whitespace_around_comma(logical_line):
    r"""Avoid extraneous whitespace after a comma or a colon.

    Note: these checks are disabled by default

    Okay: a = (1, 2)
    E241: a = (1,  2)
    E242: a = (1,\t2)
    """
    line = logical_line
    for m in WHITESPACE_AFTER_COMMA_REGEX.finditer(line):
        found = m.start() + 1
        if '\t' in m.group():
            yield found, "E242 tab after '%s'" % m.group()[0]
        else:
            yield found, "E241 multiple spaces after '%s'" % m.group()[0]


@register_check
def whitespace_around_named_parameter_equals(logical_line, tokens):
    r"""Don't use spaces around the '=' sign in function arguments.

    Don't use spaces around the '=' sign when used to indicate a
    keyword argument or a default parameter value, except when
    using a type annotation.

    Okay: def complex(real, imag=0.0):
    Okay: return magic(r=real, i=imag)
    Okay: boolean(a == b)
    Okay: boolean(a != b)
    Okay: boolean(a <= b)
    Okay: boolean(a >= b)
    Okay: def foo(arg: int = 42):
    Okay: async def foo(arg: int = 42):

    E251: def complex(real, imag = 0.0):
    E251: return magic(r = real, i = imag)
    E252: def complex(real, image: float=0.0):
    """
    parens = 0
    no_space = False
    require_space = False
    prev_end = None
    annotated_func_arg = False
    in_def = bool(STARTSWITH_DEF_REGEX.match(logical_line))

    message = "E251 unexpected spaces around keyword / parameter equals"
    missing_message = "E252 missing whitespace around parameter equals"

    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.NL:
            continue
        if no_space:
            no_space = False
            if start != prev_end:
                yield (prev_end, message)
        if require_space:
            require_space = False
            if start == prev_end:
                yield (prev_end, missing_message)
        if token_type == tokenize.OP:
            if text in '([':
                parens += 1
            elif text in ')]':
                parens -= 1
            elif in_def and text == ':' and parens == 1:
                annotated_func_arg = True
            elif parens == 1 and text == ',':
                annotated_func_arg = False
            elif parens and text == '=':
                if annotated_func_arg and parens == 1:
                    require_space = True
                    if start == prev_end:
                        yield (prev_end, missing_message)
                else:
                    no_space = True
                    if start != prev_end:
                        yield (prev_end, message)
            if not parens:
                annotated_func_arg = False

        prev_end = end


@register_check
def whitespace_before_comment(logical_line, tokens):
    """Separate inline comments by at least two spaces.

    An inline comment is a comment on the same line as a statement.
    Inline comments should be separated by at least two spaces from the
    statement. They should start with a # and a single space.

    Each line of a block comment starts with a # and one or multiple
    spaces as there can be indented text inside the comment.

    Okay: x = x + 1  # Increment x
    Okay: x = x + 1    # Increment x
    Okay: # Block comments:
    Okay: #  - Block comment list
    Okay: # \xa0- Block comment list
    E261: x = x + 1 # Increment x
    E262: x = x + 1  #Increment x
    E262: x = x + 1  #  Increment x
    E262: x = x + 1  # \xa0Increment x
    E265: #Block comment
    E266: ### Block comment
    """
    prev_end = (0, 0)
    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.COMMENT:
            inline_comment = line[:start[1]].strip()
            if inline_comment:
                if prev_end[0] == start[0] and start[1] < prev_end[1] + 2:
                    yield (prev_end,
                           "E261 at least two spaces before inline comment")
            symbol, sp, comment = text.partition(' ')
            bad_prefix = symbol not in '#:' and (symbol.lstrip('#')[:1] or '#')
            if inline_comment:
                if bad_prefix or comment[:1] in WHITESPACE:
                    yield start, "E262 inline comment should start with '# '"
            elif bad_prefix and (bad_prefix != '!' or start[0] > 1):
                if bad_prefix != '#':
                    yield start, "E265 block comment should start with '# '"
                elif comment:
                    yield start, "E266 too many leading '#' for block comment"
        elif token_type != tokenize.NL:
            prev_end = end


@register_check
def imports_on_separate_lines(logical_line):
    r"""Place imports on separate lines.

    Okay: import os\nimport sys
    E401: import sys, os

    Okay: from subprocess import Popen, PIPE
    Okay: from myclas import MyClass
    Okay: from foo.bar.yourclass import YourClass
    Okay: import myclass
    Okay: import foo.bar.yourclass
    """
    line = logical_line
    if line.startswith('import '):
        found = line.find(',')
        if -1 < found and ';' not in line[:found]:
            yield found, "E401 multiple imports on one line"


@register_check
def module_imports_on_top_of_file(
        logical_line, indent_level, checker_state, noqa):
    r"""Place imports at the top of the file.

    Always put imports at the top of the file, just after any module
    comments and docstrings, and before module globals and constants.

    Okay: import os
    Okay: # this is a comment\nimport os
    Okay: '''this is a module docstring'''\nimport os
    Okay: r'''this is a module docstring'''\nimport os
    E402: a=1\nimport os
    E402: 'One string'\n"Two string"\nimport os
    E402: a=1\nfrom sys import x

    Okay: if x:\n    import os
    """  # noqa
    def is_string_literal(line):
        if line[0] in 'uUbB':
            line = line[1:]
        if line and line[0] in 'rR':
            line = line[1:]
        return line and (line[0] == '"' or line[0] == "'")

    allowed_keywords = (
        'try', 'except', 'else', 'finally', 'with', 'if', 'elif')

    if indent_level:  # Allow imports in conditional statement/function
        return
    if not logical_line:  # Allow empty lines or comments
        return
    if noqa:
        return
    line = logical_line
    if line.startswith('import ') or line.startswith('from '):
        if checker_state.get('seen_non_imports', False):
            yield 0, "E402 module level import not at top of file"
    elif re.match(DUNDER_REGEX, line):
        return
    elif any(line.startswith(kw) for kw in allowed_keywords):
        # Allow certain keywords intermixed with imports in order to
        # support conditional or filtered importing
        return
    elif is_string_literal(line):
        # The first literal is a docstring, allow it. Otherwise, report
        # error.
        if checker_state.get('seen_docstring', False):
            checker_state['seen_non_imports'] = True
        else:
            checker_state['seen_docstring'] = True
    else:
        checker_state['seen_non_imports'] = True


@register_check
def compound_statements(logical_line):
    r"""Compound statements (on the same line) are generally
    discouraged.

    While sometimes it's okay to put an if/for/while with a small body
    on the same line, never do this for multi-clause statements.
    Also avoid folding such long lines!

    Always use a def statement instead of an assignment statement that
    binds a lambda expression directly to a name.

    Okay: if foo == 'blah':\n    do_blah_thing()
    Okay: do_one()
    Okay: do_two()
    Okay: do_three()

    E701: if foo == 'blah': do_blah_thing()
    E701: for x in lst: total += x
    E701: while t < 10: t = delay()
    E701: if foo == 'blah': do_blah_thing()
    E701: else: do_non_blah_thing()
    E701: try: something()
    E701: finally: cleanup()
    E701: if foo == 'blah': one(); two(); three()
    E702: do_one(); do_two(); do_three()
    E703: do_four();  # useless semicolon
    E704: def f(x): return 2*x
    E731: f = lambda x: 2*x
    """
    line = logical_line
    last_char = len(line) - 1
    found = line.find(':')
    prev_found = 0
    counts = {char: 0 for char in '{}[]()'}
    while -1 < found < last_char:
        update_counts(line[prev_found:found], counts)
        if (
                counts['{'] <= counts['}'] and  # {'a': 1} (dict)
                counts['['] <= counts[']'] and  # [1:2] (slice)
                counts['('] <= counts[')'] and  # (annotation)
                line[found + 1] != '='  # assignment expression
        ):
            lambda_kw = LAMBDA_REGEX.search(line, 0, found)
            if lambda_kw:
                before = line[:lambda_kw.start()].rstrip()
                if before[-1:] == '=' and before[:-1].strip().isidentifier():
                    yield 0, ("E731 do not assign a lambda expression, use a "
                              "def")
                break
            if STARTSWITH_DEF_REGEX.match(line):
                yield 0, "E704 multiple statements on one line (def)"
            elif STARTSWITH_INDENT_STATEMENT_REGEX.match(line):
                yield found, "E701 multiple statements on one line (colon)"
        prev_found = found
        found = line.find(':', found + 1)
    found = line.find(';')
    while -1 < found:
        if found < last_char:
            yield found, "E702 multiple statements on one line (semicolon)"
        else:
            yield found, "E703 statement ends with a semicolon"
        found = line.find(';', found + 1)


@register_check
def explicit_line_join(logical_line, tokens):
    r"""Avoid explicit line join between brackets.

    The preferred way of wrapping long lines is by using Python's
    implied line continuation inside parentheses, brackets and braces.
    Long lines can be broken over multiple lines by wrapping expressions
    in parentheses.  These should be used in preference to using a
    backslash for line continuation.

    E502: aaa = [123, \\n       123]
    E502: aaa = ("bbb " \\n       "ccc")

    Okay: aaa = [123,\n       123]
    Okay: aaa = ("bbb "\n       "ccc")
    Okay: aaa = "bbb " \\n    "ccc"
    Okay: aaa = 123  # \\
    """
    prev_start = prev_end = parens = 0
    comment = False
    backslash = None
    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.COMMENT:
            comment = True
        if start[0] != prev_start and parens and backslash and not comment:
            yield backslash, "E502 the backslash is redundant between brackets"
        if end[0] != prev_end:
            if line.rstrip('\r\n').endswith('\\'):
                backslash = (end[0], len(line.splitlines()[-1]) - 1)
            else:
                backslash = None
            prev_start = prev_end = end[0]
        else:
            prev_start = start[0]
        if token_type == tokenize.OP:
            if text in '([{':
                parens += 1
            elif text in ')]}':
                parens -= 1


# The % character is strictly speaking a binary operator, but the
# common usage seems to be to put it next to the format parameters,
# after a line break.
_SYMBOLIC_OPS = frozenset("()[]{},:.;@=%~") | frozenset(("...",))


def _is_binary_operator(token_type, text):
    return (
        token_type == tokenize.OP or
        text in {'and', 'or'}
    ) and (
        text not in _SYMBOLIC_OPS
    )


def _break_around_binary_operators(tokens):
    """Private function to reduce duplication.

    This factors out the shared details between
    :func:`break_before_binary_operator` and
    :func:`break_after_binary_operator`.
    """
    line_break = False
    unary_context = True
    # Previous non-newline token types and text
    previous_token_type = None
    previous_text = None
    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.COMMENT:
            continue
        if ('\n' in text or '\r' in text) and token_type != tokenize.STRING:
            line_break = True
        else:
            yield (token_type, text, previous_token_type, previous_text,
                   line_break, unary_context, start)
            unary_context = text in '([{,;'
            line_break = False
            previous_token_type = token_type
            previous_text = text


@register_check
def break_before_binary_operator(logical_line, tokens):
    r"""
    Avoid breaks before binary operators.

    The preferred place to break around a binary operator is after the
    operator, not before it.

    W503: (width == 0\n + height == 0)
    W503: (width == 0\n and height == 0)
    W503: var = (1\n       & ~2)
    W503: var = (1\n       / -2)
    W503: var = (1\n       + -1\n       + -2)

    Okay: foo(\n    -x)
    Okay: foo(x\n    [])
    Okay: x = '''\n''' + ''
    Okay: foo(x,\n    -y)
    Okay: foo(x,  # comment\n    -y)
    """
    for context in _break_around_binary_operators(tokens):
        (token_type, text, previous_token_type, previous_text,
         line_break, unary_context, start) = context
        if (_is_binary_operator(token_type, text) and line_break and
                not unary_context and
                not _is_binary_operator(previous_token_type,
                                        previous_text)):
            yield start, "W503 line break before binary operator"


@register_check
def break_after_binary_operator(logical_line, tokens):
    r"""
    Avoid breaks after binary operators.

    The preferred place to break around a binary operator is before the
    operator, not after it.

    W504: (width == 0 +\n height == 0)
    W504: (width == 0 and\n height == 0)
    W504: var = (1 &\n       ~2)

    Okay: foo(\n    -x)
    Okay: foo(x\n    [])
    Okay: x = '''\n''' + ''
    Okay: x = '' + '''\n'''
    Okay: foo(x,\n    -y)
    Okay: foo(x,  # comment\n    -y)

    The following should be W504 but unary_context is tricky with these
    Okay: var = (1 /\n       -2)
    Okay: var = (1 +\n       -1 +\n       -2)
    """
    prev_start = None
    for context in _break_around_binary_operators(tokens):
        (token_type, text, previous_token_type, previous_text,
         line_break, unary_context, start) = context
        if (_is_binary_operator(previous_token_type, previous_text) and
                line_break and
                not unary_context and
                not _is_binary_operator(token_type, text)):
            yield prev_start, "W504 line break after binary operator"
        prev_start = start


@register_check
def comparison_to_singleton(logical_line, noqa):
    r"""Comparison to singletons should use "is" or "is not".

    Comparisons to singletons like None should always be done
    with "is" or "is not", never the equality operators.

    Okay: if arg is not None:
    E711: if arg != None:
    E711: if None == arg:
    E712: if arg == True:
    E712: if False == arg:

    Also, beware of writing if x when you really mean if x is not None
    -- e.g. when testing whether a variable or argument that defaults to
    None was set to some other value.  The other value might have a type
    (such as a container) that could be false in a boolean context!
    """
    if noqa:
        return

    for match in COMPARE_SINGLETON_REGEX.finditer(logical_line):
        singleton = match.group(1) or match.group(3)
        same = (match.group(2) == '==')

        msg = "'if cond is %s:'" % (('' if same else 'not ') + singleton)
        if singleton in ('None',):
            code = 'E711'
        else:
            code = 'E712'
            nonzero = ((singleton == 'True' and same) or
                       (singleton == 'False' and not same))
            msg += " or 'if %scond:'" % ('' if nonzero else 'not ')
        yield match.start(2), ("%s comparison to %s should be %s" %
                               (code, singleton, msg))


@register_check
def comparison_negative(logical_line):
    r"""Negative comparison should be done using "not in" and "is not".

    Okay: if x not in y:\n    pass
    Okay: assert (X in Y or X is Z)
    Okay: if not (X in Y):\n    pass
    Okay: zz = x is not y
    E713: Z = not X in Y
    E713: if not X.B in Y:\n    pass
    E714: if not X is Y:\n    pass
    E714: Z = not X.B is Y
    """
    match = COMPARE_NEGATIVE_REGEX.search(logical_line)
    if match:
        pos = match.start(1)
        if match.group(2) == 'in':
            yield pos, "E713 test for membership should be 'not in'"
        else:
            yield pos, "E714 test for object identity should be 'is not'"


@register_check
def comparison_type(logical_line, noqa):
    r"""Object type comparisons should `is` / `is not` / `isinstance()`.

    Do not compare types directly.

    Okay: if isinstance(obj, int):
    Okay: if type(obj) is int:
    E721: if type(obj) == type(1):
    """
    match = COMPARE_TYPE_REGEX.search(logical_line)
    if match and not noqa:
        inst = match.group(1)
        if inst and inst.isidentifier() and inst not in SINGLETONS:
            return  # Allow comparison for types which are not obvious
        yield (
            match.start(),
            "E721 do not compare types, for exact checks use `is` / `is not`, "
            "for instance checks use `isinstance()`",
        )


@register_check
def bare_except(logical_line, noqa):
    r"""When catching exceptions, mention specific exceptions when
    possible.

    Okay: except Exception:
    Okay: except BaseException:
    E722: except:
    """
    if noqa:
        return

    match = BLANK_EXCEPT_REGEX.match(logical_line)
    if match:
        yield match.start(), "E722 do not use bare 'except'"


@register_check
def ambiguous_identifier(logical_line, tokens):
    r"""Never use the characters 'l', 'O', or 'I' as variable names.

    In some fonts, these characters are indistinguishable from the
    numerals one and zero. When tempted to use 'l', use 'L' instead.

    Okay: L = 0
    Okay: o = 123
    Okay: i = 42
    E741: l = 0
    E741: O = 123
    E741: I = 42

    Variables can be bound in several other contexts, including class
    and function definitions, lambda functions, 'global' and 'nonlocal'
    statements, exception handlers, and 'with' and 'for' statements.
    In addition, we have a special handling for function parameters.

    Okay: except AttributeError as o:
    Okay: with lock as L:
    Okay: foo(l=12)
    Okay: foo(l=I)
    Okay: for a in foo(l=12):
    Okay: lambda arg: arg * l
    Okay: lambda a=l[I:5]: None
    Okay: lambda x=a.I: None
    Okay: if l >= 12:
    E741: except AttributeError as O:
    E741: with lock as l:
    E741: global I
    E741: nonlocal l
    E741: def foo(l):
    E741: def foo(l=12):
    E741: l = foo(l=12)
    E741: for l in range(10):
    E741: [l for l in lines if l]
    E741: lambda l: None
    E741: lambda a=x[1:5], l: None
    E741: lambda **l:
    E741: def f(**l):
    E742: class I(object):
    E743: def l(x):
    """
    func_depth = None  # set to brace depth if 'def' or 'lambda' is found
    seen_colon = False  # set to true if we're done with function parameters
    brace_depth = 0
    idents_to_avoid = ('l', 'O', 'I')
    prev_type, prev_text, prev_start, prev_end, __ = tokens[0]
    for index in range(1, len(tokens)):
        token_type, text, start, end, line = tokens[index]
        ident = pos = None
        # find function definitions
        if prev_text in {'def', 'lambda'}:
            func_depth = brace_depth
            seen_colon = False
        elif (
                func_depth is not None and
                text == ':' and
                brace_depth == func_depth
        ):
            seen_colon = True
        # update parameter parentheses level
        if text in '([{':
            brace_depth += 1
        elif text in ')]}':
            brace_depth -= 1
        # identifiers on the lhs of an assignment operator
        if text == ':=' or (text == '=' and brace_depth == 0):
            if prev_text in idents_to_avoid:
                ident = prev_text
                pos = prev_start
        # identifiers bound to values with 'as', 'for',
        # 'global', or 'nonlocal'
        if prev_text in ('as', 'for', 'global', 'nonlocal'):
            if text in idents_to_avoid:
                ident = text
                pos = start
        # function / lambda parameter definitions
        if (
                func_depth is not None and
                not seen_colon and
                index < len(tokens) - 1 and tokens[index + 1][1] in ':,=)' and
                prev_text in {'lambda', ',', '*', '**', '('} and
                text in idents_to_avoid
        ):
            ident = text
            pos = start
        if prev_text == 'class':
            if text in idents_to_avoid:
                yield start, "E742 ambiguous class definition '%s'" % text
        if prev_text == 'def':
            if text in idents_to_avoid:
                yield start, "E743 ambiguous function definition '%s'" % text
        if ident:
            yield pos, "E741 ambiguous variable name '%s'" % ident
        prev_text = text
        prev_start = start


@register_check
def python_3000_invalid_escape_sequence(logical_line, tokens, noqa):
    r"""Invalid escape sequences are deprecated in Python 3.6.

    Okay: regex = r'\.png$'
    W605: regex = '\.png$'
    """
    if noqa:
        return

    # https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
    valid = [
        '\n',
        '\\',
        '\'',
        '"',
        'a',
        'b',
        'f',
        'n',
        'r',
        't',
        'v',
        '0', '1', '2', '3', '4', '5', '6', '7',
        'x',

        # Escape sequences only recognized in string literals
        'N',
        'u',
        'U',
    ]

    prefixes = []
    for token_type, text, start, _, _ in tokens:
        if token_type in {tokenize.STRING, FSTRING_START}:
            # Extract string modifiers (e.g. u or r)
            prefixes.append(text[:text.index(text[-1])].lower())

        if token_type in {tokenize.STRING, FSTRING_MIDDLE}:
            if 'r' not in prefixes[-1]:
                start_line, start_col = start
                pos = text.find('\\')
                while pos >= 0:
                    pos += 1
                    if text[pos] not in valid:
                        line = start_line + text.count('\n', 0, pos)
                        if line == start_line:
                            col = start_col + pos
                        else:
                            col = pos - text.rfind('\n', 0, pos) - 1
                        yield (
                            (line, col - 1),
                            f"W605 invalid escape sequence '\\{text[pos]}'"
                        )
                    pos = text.find('\\', pos + 1)

        if token_type in {tokenize.STRING, FSTRING_END}:
            prefixes.pop()


########################################################################
@register_check
def maximum_doc_length(logical_line, max_doc_length, noqa, tokens):
    r"""Limit all doc lines to a maximum of 72 characters.

    For flowing long blocks of text (docstrings or comments), limiting
    the length to 72 characters is recommended.

    Reports warning W505
    """
    if max_doc_length is None or noqa:
        return

    prev_token = None
    skip_lines = set()
    # Skip lines that
    for token_type, text, start, end, line in tokens:
        if token_type not in SKIP_COMMENTS.union([tokenize.STRING]):
            skip_lines.add(line)

    for token_type, text, start, end, line in tokens:
        # Skip lines that aren't pure strings
        if token_type == tokenize.STRING and skip_lines:
            continue
        if token_type in (tokenize.STRING, tokenize.COMMENT):
            # Only check comment-only lines
            if prev_token is None or prev_token in SKIP_TOKENS:
                lines = line.splitlines()
                for line_num, physical_line in enumerate(lines):
                    if start[0] + line_num == 1 and line.startswith('#!'):
                        return
                    length = len(physical_line)
                    chunks = physical_line.split()
                    if token_type == tokenize.COMMENT:
                        if (len(chunks) == 2 and
                                length - len(chunks[-1]) < MAX_DOC_LENGTH):
                            continue
                    if len(chunks) == 1 and line_num + 1 < len(lines):
                        if (len(chunks) == 1 and
                                length - len(chunks[-1]) < MAX_DOC_LENGTH):
                            continue
                    if length > max_doc_length:
                        doc_error = (start[0] + line_num, max_doc_length)
                        yield (doc_error, "W505 doc line too long "
                                          "(%d > %d characters)"
                               % (length, max_doc_length))
        prev_token = token_type


########################################################################
# Helper functions
########################################################################


def readlines(filename):
    """Read the source code."""
    try:
        with tokenize.open(filename) as f:
            return f.readlines()
    except (LookupError, SyntaxError, UnicodeError):
        # Fall back if file encoding is improperly declared
        with open(filename, encoding='latin-1') as f:
            return f.readlines()


def stdin_get_value():
    """Read the value from stdin."""
    return io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8', errors='ignore').read()


noqa = lru_cache(512)(re.compile(r'# no(?:qa|pep8)\b', re.I).search)


def expand_indent(line):
    r"""Return the amount of indentation.

    Tabs are expanded to the next multiple of 8.
    """
    line = line.rstrip('\n\r')
    if '\t' not in line:
        return len(line) - len(line.lstrip())
    result = 0
    for char in line:
        if char == '\t':
            result = result // 8 * 8 + 8
        elif char == ' ':
            result += 1
        else:
            break
    return result


def mute_string(text):
    """Replace contents with 'xxx' to prevent syntax matching."""
    # String modifiers (e.g. u or r)
    start = text.index(text[-1]) + 1
    end = len(text) - 1
    # Triple quotes
    if text[-3:] in ('"""', "'''"):
        start += 2
        end -= 2
    return text[:start] + 'x' * (end - start) + text[end:]


def parse_udiff(diff, patterns=None, parent='.'):
    """Return a dictionary of matching lines."""
    # For each file of the diff, the entry key is the filename,
    # and the value is a set of row numbers to consider.
    rv = {}
    path = nrows = None
    for line in diff.splitlines():
        if nrows:
            if line[:1] != '-':
                nrows -= 1
            continue
        if line[:3] == '@@ ':
            hunk_match = HUNK_REGEX.match(line)
            (row, nrows) = (int(g or '1') for g in hunk_match.groups())
            rv[path].update(range(row, row + nrows))
        elif line[:3] == '+++':
            path = line[4:].split('\t', 1)[0]
            # Git diff will use (i)ndex, (w)ork tree, (c)ommit and
            # (o)bject instead of a/b/c/d as prefixes for patches
            if path[:2] in ('b/', 'w/', 'i/'):
                path = path[2:]
            rv[path] = set()
    return {
        os.path.join(parent, filepath): rows
        for (filepath, rows) in rv.items()
        if rows and filename_match(filepath, patterns)
    }


def normalize_paths(value, parent=os.curdir):
    """Parse a comma-separated list of paths.

    Return a list of absolute paths.
    """
    if not value:
        return []
    if isinstance(value, list):
        return value
    paths = []
    for path in value.split(','):
        path = path.strip()
        if '/' in path:
            path = os.path.abspath(os.path.join(parent, path))
        paths.append(path.rstrip('/'))
    return paths


def filename_match(filename, patterns, default=True):
    """Check if patterns contains a pattern that matches filename.

    If patterns is unspecified, this always returns True.
    """
    if not patterns:
        return default
    return any(fnmatch(filename, pattern) for pattern in patterns)


def update_counts(s, counts):
    r"""Adds one to the counts of each appearance of characters in s,
        for characters in counts"""
    for char in s:
        if char in counts:
            counts[char] += 1


def _is_eol_token(token):
    return token[0] in NEWLINE or token[4][token[3][1]:].lstrip() == '\\\n'


########################################################################
# Framework to run all checks
########################################################################


class Checker:
    """Load a Python source file, tokenize it, check coding style."""

    def __init__(self, filename=None, lines=None,
                 options=None, report=None, **kwargs):
        if options is None:
            options = StyleGuide(kwargs).options
        else:
            assert not kwargs
        self._io_error = None
        self._physical_checks = options.physical_checks
        self._logical_checks = options.logical_checks
        self._ast_checks = options.ast_checks
        self.max_line_length = options.max_line_length
        self.max_doc_length = options.max_doc_length
        self.indent_size = options.indent_size
        self.fstring_start = 0
        self.multiline = False  # in a multiline string?
        self.hang_closing = options.hang_closing
        self.indent_size = options.indent_size
        self.verbose = options.verbose
        self.filename = filename
        # Dictionary where a checker can store its custom state.
        self._checker_states = {}
        if filename is None:
            self.filename = 'stdin'
            self.lines = lines or []
        elif filename == '-':
            self.filename = 'stdin'
            self.lines = stdin_get_value().splitlines(True)
        elif lines is None:
            try:
                self.lines = readlines(filename)
            except OSError:
                (exc_type, exc) = sys.exc_info()[:2]
                self._io_error = f'{exc_type.__name__}: {exc}'
                self.lines = []
        else:
            self.lines = lines
        if self.lines:
            ord0 = ord(self.lines[0][0])
            if ord0 in (0xef, 0xfeff):  # Strip the UTF-8 BOM
                if ord0 == 0xfeff:
                    self.lines[0] = self.lines[0][1:]
                elif self.lines[0][:3] == '\xef\xbb\xbf':
                    self.lines[0] = self.lines[0][3:]
        self.report = report or options.report
        self.report_error = self.report.error
        self.noqa = False

    def report_invalid_syntax(self):
        """Check if the syntax is valid."""
        (exc_type, exc) = sys.exc_info()[:2]
        if len(exc.args) > 1:
            offset = exc.args[1]
            if len(offset) > 2:
                offset = offset[1:3]
        else:
            offset = (1, 0)
        self.report_error(offset[0], offset[1] or 0,
                          f'E901 {exc_type.__name__}: {exc.args[0]}',
                          self.report_invalid_syntax)

    def readline(self):
        """Get the next line from the input buffer."""
        if self.line_number >= self.total_lines:
            return ''
        line = self.lines[self.line_number]
        self.line_number += 1
        if self.indent_char is None and line[:1] in WHITESPACE:
            self.indent_char = line[0]
        return line

    def run_check(self, check, argument_names):
        """Run a check plugin."""
        arguments = []
        for name in argument_names:
            arguments.append(getattr(self, name))
        return check(*arguments)

    def init_checker_state(self, name, argument_names):
        """Prepare custom state for the specific checker plugin."""
        if 'checker_state' in argument_names:
            self.checker_state = self._checker_states.setdefault(name, {})

    def check_physical(self, line):
        """Run all physical checks on a raw input line."""
        self.physical_line = line
        for name, check, argument_names in self._physical_checks:
            self.init_checker_state(name, argument_names)
            result = self.run_check(check, argument_names)
            if result is not None:
                (offset, text) = result
                self.report_error(self.line_number, offset, text, check)
                if text[:4] == 'E101':
                    self.indent_char = line[0]

    def build_tokens_line(self):
        """Build a logical line from tokens."""
        logical = []
        comments = []
        length = 0
        prev_row = prev_col = mapping = None
        for token_type, text, start, end, line in self.tokens:
            if token_type in SKIP_TOKENS:
                continue
            if not mapping:
                mapping = [(0, start)]
            if token_type == tokenize.COMMENT:
                comments.append(text)
                continue
            if token_type == tokenize.STRING:
                text = mute_string(text)
            elif token_type == FSTRING_MIDDLE:  # pragma: >=3.12 cover
                text = 'x' * len(text)
            if prev_row:
                (start_row, start_col) = start
                if prev_row != start_row:    # different row
                    prev_text = self.lines[prev_row - 1][prev_col - 1]
                    if prev_text == ',' or (prev_text not in '{[(' and
                                            text not in '}])'):
                        text = ' ' + text
                elif prev_col != start_col:  # different column
                    text = line[prev_col:start_col] + text
            logical.append(text)
            length += len(text)
            mapping.append((length, end))
            (prev_row, prev_col) = end
        self.logical_line = ''.join(logical)
        self.noqa = comments and noqa(''.join(comments))
        return mapping

    def check_logical(self):
        """Build a line from tokens and run all logical checks on it."""
        self.report.increment_logical_line()
        mapping = self.build_tokens_line()
        if not mapping:
            return

        mapping_offsets = [offset for offset, _ in mapping]
        (start_row, start_col) = mapping[0][1]
        start_line = self.lines[start_row - 1]
        self.indent_level = expand_indent(start_line[:start_col])
        if self.blank_before < self.blank_lines:
            self.blank_before = self.blank_lines
        if self.verbose >= 2:
            print(self.logical_line[:80].rstrip())
        for name, check, argument_names in self._logical_checks:
            if self.verbose >= 4:
                print('   ' + name)
            self.init_checker_state(name, argument_names)
            for offset, text in self.run_check(check, argument_names) or ():
                if not isinstance(offset, tuple):
                    # As mappings are ordered, bisecting is a fast way
                    # to find a given offset in them.
                    token_offset, pos = mapping[bisect.bisect_left(
                        mapping_offsets, offset)]
                    offset = (pos[0], pos[1] + offset - token_offset)
                self.report_error(offset[0], offset[1], text, check)
        if self.logical_line:
            self.previous_indent_level = self.indent_level
            self.previous_logical = self.logical_line
            if not self.indent_level:
                self.previous_unindented_logical_line = self.logical_line
        self.blank_lines = 0
        self.tokens = []

    def check_ast(self):
        """Build the file's AST and run all AST checks."""
        try:
            tree = compile(''.join(self.lines), '', 'exec', PyCF_ONLY_AST)
        except (ValueError, SyntaxError, TypeError):
            return self.report_invalid_syntax()
        for name, cls, __ in self._ast_checks:
            checker = cls(tree, self.filename)
            for lineno, offset, text, check in checker.run():
                if not self.lines or not noqa(self.lines[lineno - 1]):
                    self.report_error(lineno, offset, text, check)

    def generate_tokens(self):
        """Tokenize file, run physical line checks and yield tokens."""
        if self._io_error:
            self.report_error(1, 0, 'E902 %s' % self._io_error, readlines)
        tokengen = tokenize.generate_tokens(self.readline)
        try:
            prev_physical = ''
            for token in tokengen:
                if token[2][0] > self.total_lines:
                    return
                self.noqa = token[4] and noqa(token[4])
                self.maybe_check_physical(token, prev_physical)
                yield token
                prev_physical = token[4]
        except (SyntaxError, tokenize.TokenError):
            self.report_invalid_syntax()

    def maybe_check_physical(self, token, prev_physical):
        """If appropriate for token, check current physical line(s)."""
        # Called after every token, but act only on end of line.

        if token.type == FSTRING_START:  # pragma: >=3.12 cover
            self.fstring_start = token.start[0]
        # a newline token ends a single physical line.
        elif _is_eol_token(token):
            # if the file does not end with a newline, the NEWLINE
            # token is inserted by the parser, but it does not contain
            # the previous physical line in `token[4]`
            if token.line == '':
                self.check_physical(prev_physical)
            else:
                self.check_physical(token.line)
        elif (
                token.type == tokenize.STRING and '\n' in token.string or
                token.type == FSTRING_END
        ):
            # Less obviously, a string that contains newlines is a
            # multiline string, either triple-quoted or with internal
            # newlines backslash-escaped. Check every physical line in
            # the string *except* for the last one: its newline is
            # outside of the multiline string, so we consider it a
            # regular physical line, and will check it like any other
            # physical line.
            #
            # Subtleties:
            # - we don't *completely* ignore the last line; if it
            #   contains the magical "# noqa" comment, we disable all
            #   physical checks for the entire multiline string
            # - have to wind self.line_number back because initially it
            #   points to the last line of the string, and we want
            #   check_physical() to give accurate feedback
            if noqa(token.line):
                return
            if token.type == FSTRING_END:  # pragma: >=3.12 cover
                start = self.fstring_start
            else:
                start = token.start[0]
            end = token.end[0]

            self.multiline = True
            self.line_number = start
            for line_number in range(start, end):
                self.check_physical(self.lines[line_number - 1] + '\n')
                self.line_number += 1
            self.multiline = False

    def check_all(self, expected=None, line_offset=0):
        """Run all checks on the input file."""
        self.report.init_file(self.filename, self.lines, expected, line_offset)
        self.total_lines = len(self.lines)
        if self._ast_checks:
            self.check_ast()
        self.line_number = 0
        self.indent_char = None
        self.indent_level = self.previous_indent_level = 0
        self.previous_logical = ''
        self.previous_unindented_logical_line = ''
        self.tokens = []
        self.blank_lines = self.blank_before = 0
        parens = 0
        for token in self.generate_tokens():
            self.tokens.append(token)
            token_type, text = token[0:2]
            if self.verbose >= 3:
                if token[2][0] == token[3][0]:
                    pos = '[{}:{}]'.format(token[2][1] or '', token[3][1])
                else:
                    pos = 'l.%s' % token[3][0]
                print('l.%s\t%s\t%s\t%r' %
                      (token[2][0], pos, tokenize.tok_name[token[0]], text))
            if token_type == tokenize.OP:
                if text in '([{':
                    parens += 1
                elif text in '}])':
                    parens -= 1
            elif not parens:
                if token_type in NEWLINE:
                    if token_type == tokenize.NEWLINE:
                        self.check_logical()
                        self.blank_before = 0
                    elif len(self.tokens) == 1:
                        # The physical line contains only this token.
                        self.blank_lines += 1
                        del self.tokens[0]
                    else:
                        self.check_logical()
        if self.tokens:
            self.check_physical(self.lines[-1])
            self.check_logical()
        return self.report.get_file_results()


class BaseReport:
    """Collect the results of the checks."""

    print_filename = False

    def __init__(self, options):
        self._benchmark_keys = options.benchmark_keys
        self._ignore_code = options.ignore_code
        # Results
        self.elapsed = 0
        self.total_errors = 0
        self.counters = dict.fromkeys(self._benchmark_keys, 0)
        self.messages = {}

    def start(self):
        """Start the timer."""
        self._start_time = time.time()

    def stop(self):
        """Stop the timer."""
        self.elapsed = time.time() - self._start_time

    def init_file(self, filename, lines, expected, line_offset):
        """Signal a new file."""
        self.filename = filename
        self.lines = lines
        self.expected = expected or ()
        self.line_offset = line_offset
        self.file_errors = 0
        self.counters['files'] += 1
        self.counters['physical lines'] += len(lines)

    def increment_logical_line(self):
        """Signal a new logical line."""
        self.counters['logical lines'] += 1

    def error(self, line_number, offset, text, check):
        """Report an error, according to options."""
        code = text[:4]
        if self._ignore_code(code):
            return
        if code in self.counters:
            self.counters[code] += 1
        else:
            self.counters[code] = 1
            self.messages[code] = text[5:]
        # Don't care about expected errors or warnings
        if code in self.expected:
            return
        if self.print_filename and not self.file_errors:
            print(self.filename)
        self.file_errors += 1
        self.total_errors += 1
        return code

    def get_file_results(self):
        """Return the count of errors and warnings for this file."""
        return self.file_errors

    def get_count(self, prefix=''):
        """Return the total count of errors and warnings."""
        return sum(self.counters[key]
                   for key in self.messages if key.startswith(prefix))

    def get_statistics(self, prefix=''):
        """Get statistics for message codes that start with the prefix.

        prefix='' matches all errors and warnings
        prefix='E' matches all errors
        prefix='W' matches all warnings
        prefix='E4' matches all errors that have to do with imports
        """
        return ['%-7s %s %s' % (self.counters[key], key, self.messages[key])
                for key in sorted(self.messages) if key.startswith(prefix)]

    def print_statistics(self, prefix=''):
        """Print overall statistics (number of errors and warnings)."""
        for line in self.get_statistics(prefix):
            print(line)

    def print_benchmark(self):
        """Print benchmark numbers."""
        print('{:<7.2f} {}'.format(self.elapsed, 'seconds elapsed'))
        if self.elapsed:
            for key in self._benchmark_keys:
                print('%-7d %s per second (%d total)' %
                      (self.counters[key] / self.elapsed, key,
                       self.counters[key]))


class FileReport(BaseReport):
    """Collect the results of the checks and print the filenames."""

    print_filename = True


class StandardReport(BaseReport):
    """Collect and print the results of the checks."""

    def __init__(self, options):
        super().__init__(options)
        self._fmt = REPORT_FORMAT.get(options.format.lower(),
                                      options.format)
        self._repeat = options.repeat
        self._show_source = options.show_source
        self._show_pep8 = options.show_pep8

    def init_file(self, filename, lines, expected, line_offset):
        """Signal a new file."""
        self._deferred_print = []
        return super().init_file(
            filename, lines, expected, line_offset)

    def error(self, line_number, offset, text, check):
        """Report an error, according to options."""
        code = super().error(line_number, offset, text, check)
        if code and (self.counters[code] == 1 or self._repeat):
            self._deferred_print.append(
                (line_number, offset, code, text[5:], check.__doc__))
        return code

    def get_file_results(self):
        """Print results and return the overall count for this file."""
        self._deferred_print.sort()
        for line_number, offset, code, text, doc in self._deferred_print:
            print(self._fmt % {
                'path': self.filename,
                'row': self.line_offset + line_number, 'col': offset + 1,
                'code': code, 'text': text,
            })
            if self._show_source:
                if line_number > len(self.lines):
                    line = ''
                else:
                    line = self.lines[line_number - 1]
                print(line.rstrip())
                print(re.sub(r'\S', ' ', line[:offset]) + '^')
            if self._show_pep8 and doc:
                print('    ' + doc.strip())

            # stdout is block buffered when not stdout.isatty().
            # line can be broken where buffer boundary since other
            # processes write to same file.
            # flush() after print() to avoid buffer boundary.
            # Typical buffer size is 8192. line written safely when
            # len(line) < 8192.
            sys.stdout.flush()
        return self.file_errors


class DiffReport(StandardReport):
    """Collect and print the results for the changed lines only."""

    def __init__(self, options):
        super().__init__(options)
        self._selected = options.selected_lines

    def error(self, line_number, offset, text, check):
        if line_number not in self._selected[self.filename]:
            return
        return super().error(line_number, offset, text, check)


class StyleGuide:
    """Initialize a PEP-8 instance with few options."""

    def __init__(self, *args, **kwargs):
        # build options from the command line
        self.checker_class = kwargs.pop('checker_class', Checker)
        parse_argv = kwargs.pop('parse_argv', False)
        config_file = kwargs.pop('config_file', False)
        parser = kwargs.pop('parser', None)
        # build options from dict
        options_dict = dict(*args, **kwargs)
        arglist = None if parse_argv else options_dict.get('paths', None)
        verbose = options_dict.get('verbose', None)
        options, self.paths = process_options(
            arglist, parse_argv, config_file, parser, verbose)
        if options_dict:
            options.__dict__.update(options_dict)
            if 'paths' in options_dict:
                self.paths = options_dict['paths']

        self.runner = self.input_file
        self.options = options

        if not options.reporter:
            options.reporter = BaseReport if options.quiet else StandardReport

        options.select = tuple(options.select or ())
        if not (options.select or options.ignore) and DEFAULT_IGNORE:
            # The default choice: ignore controversial checks
            options.ignore = tuple(DEFAULT_IGNORE.split(','))
        else:
            # Ignore all checks which are not explicitly selected
            options.ignore = ('',) if options.select else tuple(options.ignore)
        options.benchmark_keys = BENCHMARK_KEYS[:]
        options.ignore_code = self.ignore_code
        options.physical_checks = self.get_checks('physical_line')
        options.logical_checks = self.get_checks('logical_line')
        options.ast_checks = self.get_checks('tree')
        self.init_report()

    def init_report(self, reporter=None):
        """Initialize the report instance."""
        self.options.report = (reporter or self.options.reporter)(self.options)
        return self.options.report

    def check_files(self, paths=None):
        """Run all checks on the paths."""
        if paths is None:
            paths = self.paths
        report = self.options.report
        runner = self.runner
        report.start()
        try:
            for path in paths:
                if os.path.isdir(path):
                    self.input_dir(path)
                elif not self.excluded(path):
                    runner(path)
        except KeyboardInterrupt:
            print('... stopped')
        report.stop()
        return report

    def input_file(self, filename, lines=None, expected=None, line_offset=0):
        """Run all checks on a Python source file."""
        if self.options.verbose:
            print('checking %s' % filename)
        fchecker = self.checker_class(
            filename, lines=lines, options=self.options)
        return fchecker.check_all(expected=expected, line_offset=line_offset)

    def input_dir(self, dirname):
        """Check all files in this directory and all subdirectories."""
        dirname = dirname.rstrip('/')
        if self.excluded(dirname):
            return 0
        counters = self.options.report.counters
        verbose = self.options.verbose
        filepatterns = self.options.filename
        runner = self.runner
        for root, dirs, files in os.walk(dirname):
            if verbose:
                print('directory ' + root)
            counters['directories'] += 1
            for subdir in sorted(dirs):
                if self.excluded(subdir, root):
                    dirs.remove(subdir)
            for filename in sorted(files):
                # contain a pattern that matches?
                if (
                    filename_match(filename, filepatterns) and
                    not self.excluded(filename, root)
                ):
                    runner(os.path.join(root, filename))

    def excluded(self, filename, parent=None):
        """Check if the file should be excluded.

        Check if 'options.exclude' contains a pattern matching filename.
        """
        if not self.options.exclude:
            return False
        basename = os.path.basename(filename)
        if filename_match(basename, self.options.exclude):
            return True
        if parent:
            filename = os.path.join(parent, filename)
        filename = os.path.abspath(filename)
        return filename_match(filename, self.options.exclude)

    def ignore_code(self, code):
        """Check if the error code should be ignored.

        If 'options.select' contains a prefix of the error code,
        return False.  Else, if 'options.ignore' contains a prefix of
        the error code, return True.
        """
        if len(code) < 4 and any(s.startswith(code)
                                 for s in self.options.select):
            return False
        return (code.startswith(self.options.ignore) and
                not code.startswith(self.options.select))

    def get_checks(self, argument_name):
        """Get all the checks for this category.

        Find all globally visible functions where the first argument
        name starts with argument_name and which contain selected tests.
        """
        checks = []
        for check, attrs in _checks[argument_name].items():
            (codes, args) = attrs
            if any(not (code and self.ignore_code(code)) for code in codes):
                checks.append((check.__name__, check, args))
        return sorted(checks)


def get_parser(prog='pycodestyle', version=__version__):
    """Create the parser for the program."""
    parser = OptionParser(prog=prog, version=version,
                          usage="%prog [options] input ...")
    parser.config_options = [
        'exclude', 'filename', 'select', 'ignore', 'max-line-length',
        'max-doc-length', 'indent-size', 'hang-closing', 'count', 'format',
        'quiet', 'show-pep8', 'show-source', 'statistics', 'verbose']
    parser.add_option('-v', '--verbose', default=0, action='count',
                      help="print status messages, or debug with -vv")
    parser.add_option('-q', '--quiet', default=0, action='count',
                      help="report only file names, or nothing with -qq")
    parser.add_option('-r', '--repeat', default=True, action='store_true',
                      help="(obsolete) show all occurrences of the same error")
    parser.add_option('--first', action='store_false', dest='repeat',
                      help="show first occurrence of each error")
    parser.add_option('--exclude', metavar='patterns', default=DEFAULT_EXCLUDE,
                      help="exclude files or directories which match these "
                           "comma separated patterns (default: %default)")
    parser.add_option('--filename', metavar='patterns', default='*.py',
                      help="when parsing directories, only check filenames "
                           "matching these comma separated patterns "
                           "(default: %default)")
    parser.add_option('--select', metavar='errors', default='',
                      help="select errors and warnings (e.g. E,W6)")
    parser.add_option('--ignore', metavar='errors', default='',
                      help="skip errors and warnings (e.g. E4,W) "
                           "(default: %s)" % DEFAULT_IGNORE)
    parser.add_option('--show-source', action='store_true',
                      help="show source code for each error")
    parser.add_option('--show-pep8', action='store_true',
                      help="show text of PEP 8 for each error "
                           "(implies --first)")
    parser.add_option('--statistics', action='store_true',
                      help="count errors and warnings")
    parser.add_option('--count', action='store_true',
                      help="print total number of errors and warnings "
                           "to standard error and set exit code to 1 if "
                           "total is not null")
    parser.add_option('--max-line-length', type='int', metavar='n',
                      default=MAX_LINE_LENGTH,
                      help="set maximum allowed line length "
                           "(default: %default)")
    parser.add_option('--max-doc-length', type='int', metavar='n',
                      default=None,
                      help="set maximum allowed doc line length and perform "
                           "these checks (unchecked if not set)")
    parser.add_option('--indent-size', type='int', metavar='n',
                      default=INDENT_SIZE,
                      help="set how many spaces make up an indent "
                           "(default: %default)")
    parser.add_option('--hang-closing', action='store_true',
                      help="hang closing bracket instead of matching "
                           "indentation of opening bracket's line")
    parser.add_option('--format', metavar='format', default='default',
                      help="set the error format [default|pylint|<custom>]")
    parser.add_option('--diff', action='store_true',
                      help="report changes only within line number ranges in "
                           "the unified diff received on STDIN")
    group = parser.add_option_group("Testing Options")
    group.add_option('--benchmark', action='store_true',
                     help="measure processing speed")
    return parser


def read_config(options, args, arglist, parser):
    """Read and parse configurations.

    If a config file is specified on the command line with the
    "--config" option, then only it is used for configuration.

    Otherwise, the user configuration (~/.config/pycodestyle) and any
    local configurations in the current directory or above will be
    merged together (in that order) using the read method of
    ConfigParser.
    """
    config = configparser.RawConfigParser()

    cli_conf = options.config

    local_dir = os.curdir

    if USER_CONFIG and os.path.isfile(USER_CONFIG):
        if options.verbose:
            print('user configuration: %s' % USER_CONFIG)
        config.read(USER_CONFIG)

    parent = tail = args and os.path.abspath(os.path.commonprefix(args))
    while tail:
        if config.read(os.path.join(parent, fn) for fn in PROJECT_CONFIG):
            local_dir = parent
            if options.verbose:
                print('local configuration: in %s' % parent)
            break
        (parent, tail) = os.path.split(parent)

    if cli_conf and os.path.isfile(cli_conf):
        if options.verbose:
            print('cli configuration: %s' % cli_conf)
        config.read(cli_conf)

    pycodestyle_section = None
    if config.has_section(parser.prog):
        pycodestyle_section = parser.prog
    elif config.has_section('pep8'):
        pycodestyle_section = 'pep8'  # Deprecated
        warnings.warn('[pep8] section is deprecated. Use [pycodestyle].')

    if pycodestyle_section:
        option_list = {o.dest: o.type or o.action for o in parser.option_list}

        # First, read the default values
        (new_options, __) = parser.parse_args([])

        # Second, parse the configuration
        for opt in config.options(pycodestyle_section):
            if opt.replace('_', '-') not in parser.config_options:
                print("  unknown option '%s' ignored" % opt)
                continue
            if options.verbose > 1:
                print("  {} = {}".format(opt,
                                         config.get(pycodestyle_section, opt)))
            normalized_opt = opt.replace('-', '_')
            opt_type = option_list[normalized_opt]
            if opt_type in ('int', 'count'):
                value = config.getint(pycodestyle_section, opt)
            elif opt_type in ('store_true', 'store_false'):
                value = config.getboolean(pycodestyle_section, opt)
            else:
                value = config.get(pycodestyle_section, opt)
                if normalized_opt == 'exclude':
                    value = normalize_paths(value, local_dir)
            setattr(new_options, normalized_opt, value)

        # Third, overwrite with the command-line options
        (options, __) = parser.parse_args(arglist, values=new_options)
    return options


def process_options(arglist=None, parse_argv=False, config_file=None,
                    parser=None, verbose=None):
    """Process options passed either via arglist or command line args.

    Passing in the ``config_file`` parameter allows other tools, such as
    flake8 to specify their own options to be processed in pycodestyle.
    """
    if not parser:
        parser = get_parser()
    if not parser.has_option('--config'):
        group = parser.add_option_group("Configuration", description=(
            "The project options are read from the [%s] section of the "
            "tox.ini file or the setup.cfg file located in any parent folder "
            "of the path(s) being processed.  Allowed options are: %s." %
            (parser.prog, ', '.join(parser.config_options))))
        group.add_option('--config', metavar='path', default=config_file,
                         help="user config file location")
    # Don't read the command line if the module is used as a library.
    if not arglist and not parse_argv:
        arglist = []
    # If parse_argv is True and arglist is None, arguments are
    # parsed from the command line (sys.argv)
    (options, args) = parser.parse_args(arglist)
    options.reporter = None

    # If explicitly specified verbosity, override any `-v` CLI flag
    if verbose is not None:
        options.verbose = verbose

    if parse_argv and not args:
        if options.diff or any(os.path.exists(name)
                               for name in PROJECT_CONFIG):
            args = ['.']
        else:
            parser.error('input not specified')
    options = read_config(options, args, arglist, parser)
    options.reporter = parse_argv and options.quiet == 1 and FileReport

    options.filename = _parse_multi_options(options.filename)
    options.exclude = normalize_paths(options.exclude)
    options.select = _parse_multi_options(options.select)
    options.ignore = _parse_multi_options(options.ignore)

    if options.diff:
        options.reporter = DiffReport
        stdin = stdin_get_value()
        options.selected_lines = parse_udiff(stdin, options.filename, args[0])
        args = sorted(options.selected_lines)

    return options, args


def _parse_multi_options(options, split_token=','):
    r"""Split and strip and discard empties.

    Turns the following:

    A,
    B,

    into ["A", "B"]
    """
    if options:
        return [o.strip() for o in options.split(split_token) if o.strip()]
    else:
        return options


def _main():
    """Parse options and run checks on Python source."""
    import signal

    # Handle "Broken pipe" gracefully
    try:
        signal.signal(signal.SIGPIPE, lambda signum, frame: sys.exit(1))
    except AttributeError:
        pass    # not supported on Windows

    style_guide = StyleGuide(parse_argv=True)
    options = style_guide.options

    report = style_guide.check_files()

    if options.statistics:
        report.print_statistics()

    if options.benchmark:
        report.print_benchmark()

    if report.total_errors:
        if options.count:
            sys.stderr.write(str(report.total_errors) + '\n')
        sys.exit(1)


if __name__ == '__main__':
    _main()
+ sed -i '1 i #!/usr/bin/env python3' /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/java/pycharm-community/plugins/python-ce/helpers/pycodestyle-2.10.0.py
+ tail -n +2 /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/java/pycharm-community/plugins/python-ce/helpers/pycodestyle.py
+ sed -i '1 i #!/usr/bin/env python3' /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/java/pycharm-community/plugins/python-ce/helpers/pycodestyle.py
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-ldconfig
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip /bin/true
+ /usr/lib/rpm/brp-strip-comment-note /bin/true /usr/bin/objdump
+ /usr/lib/rpm/redhat/brp-strip-lto /bin/true
+ /usr/lib/rpm/brp-strip-static-archive /bin/true
+ /usr/lib/rpm/redhat/brp-mangle-shebangs
mangling shebang in /usr/share/java/pycharm-community/bin/pycharm.sh from /bin/sh to #!/usr/bin/sh
mangling shebang in /usr/share/java/pycharm-community/bin/inspect.sh from /bin/sh to #!/usr/bin/sh
mangling shebang in /usr/share/java/pycharm-community/bin/format.sh from /bin/sh to #!/usr/bin/sh
mangling shebang in /usr/share/java/pycharm-community/bin/jetbrains_client.sh from /bin/sh to #!/usr/bin/sh
mangling shebang in /usr/share/java/pycharm-community/bin/ltedit.sh from /bin/sh to #!/usr/bin/sh
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/pycodestyle.py from /usr/bin/env python3 to #!/usr/bin/python3
*** WARNING: ./usr/share/java/pycharm-community/plugins/python-ce/helpers/pockets/autolog.py is executable but has no shebang, removing executable bit
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/py3only/docutils/writers/odf_odt/prepstyles.py from /usr/bin/env python3 to #!/usr/bin/python3
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/py3only/docutils/utils/math/math2html.py from /usr/bin/env python3 to #!/usr/bin/python3
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/pydev/pydevd_attach_to_process/linux_and_mac/compile_linux_aarch64.sh from /bin/bash to #!/usr/bin/bash
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/pydev/pydevd_attach_to_process/linux_and_mac/compile_linux.sh from /bin/bash to #!/usr/bin/bash
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/pydev/pydevd_attach_to_process/linux_and_mac/compile_mac.sh from /bin/bash to #!/usr/bin/bash
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/typeshed/scripts/sync_s2clientprotocol_protobuf_stubs.sh from /bin/bash to #!/usr/bin/bash
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/typeshed/scripts/generate_proto_stubs.sh from /usr/bin/env bash to #!/usr/bin/bash
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/typeshed/scripts/sync_tensorflow_protobuf_stubs.sh from /bin/bash to #!/usr/bin/bash
mangling shebang in /usr/share/java/pycharm-community/plugins/python-ce/helpers/pycodestyle-2.10.0.py from /usr/bin/env python3 to #!/usr/bin/python3
+ /usr/lib/rpm/brp-remove-la-files
+ env
SHELL=/bin/bash
RPM_SOURCE_DIR=/builddir/build/SOURCES
HISTCONTROL=ignoredups
PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig
HOSTNAME=cb71844243a14de99ba5439c9adb3b84
HISTSIZE=1000
RPM_SPECPARTS_DIR=/builddir/build/BUILD/pycharm-community-2024.3-SPECPARTS
container_host_version_id=41
FFLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib64/gfortran/modules 
PWD=/builddir/build/BUILD/pycharm-community-2024.3
SOURCE_DATE_EPOCH=1733097600
LOGNAME=mockbuild
CXX=g++
CXXFLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection 
RPM_ARCH=ppc64le
container=systemd-nspawn
LDFLAGS=-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes 
HOME=/builddir
LANG=C.UTF-8
RPM_LD_FLAGS=-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes 
RUSTFLAGS=-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn
PROMPT_COMMAND=printf "\033]0;<mock-chroot>\007"
RPM_PACKAGE_RELEASE=3.fc39
RPM_OS=linux
LT_SYS_LIBRARY_PATH=/usr/lib64:
FCFLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib64/gfortran/modules 
TERM=vt100
USER=mockbuild
NOTIFY_SOCKET=/run/host/notify
SHLVL=1
RPM_BUILD_DIR=/builddir/build/BUILD
container_host_id=fedora
RPM_OPT_FLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection
VALAFLAGS=-g
RPM_DOC_DIR=/usr/share/doc
RPM_PACKAGE_VERSION=2024.3
container_host_variant_id=cloud
CONFIG_SITE=NONE
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
CC=gcc
CFLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection 
MAIL=/var/spool/mail/mockbuild
RPM_BUILD_NCPUS=5
container_uuid=44ce8a59-1613-4454-a6b7-ffecab6cf870
RPM_PACKAGE_NAME=pycharm-community
RPM_BUILD_ROOT=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le
OLDPWD=/builddir/build/BUILD
_=/usr/bin/env
+ /usr/lib/rpm/redhat/brp-python-hardlink
Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.ApXzYV
+ umask 022
+ cd /builddir/build/BUILD
+ CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection '
+ export CFLAGS
+ CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection '
+ export CXXFLAGS
+ FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib64/gfortran/modules '
+ export FFLAGS
+ FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib64/gfortran/modules '
+ export FCFLAGS
+ VALAFLAGS=-g
+ export VALAFLAGS
+ RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn'
+ export RUSTFLAGS
+ LDFLAGS='-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes '
+ export LDFLAGS
+ LT_SYS_LIBRARY_PATH=/usr/lib64:
+ export LT_SYS_LIBRARY_PATH
+ CC=gcc
+ export CC
+ CXX=g++
+ export CXX
+ cd pycharm-community-2024.3
+ appstream-util validate-relax --nonet /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/metainfo/pycharm-community.metainfo.xml
/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/metainfo/pycharm-community.metainfo.xml: OK
+ desktop-file-validate /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/applications/pycharm-community.desktop
+ RPM_EC=0
++ jobs -p
+ exit 0
Processing files: pycharm-community-2024.3-3.fc39.ppc64le
Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.4meBYa
+ umask 022
+ cd /builddir/build/BUILD
+ cd pycharm-community-2024.3
+ LICENSEDIR=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ export LC_ALL=
+ LC_ALL=
+ export LICENSEDIR
+ /usr/bin/mkdir -p /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/license/LICENSE.txt /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/license/NOTICE.txt /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/license/javahelp_license.txt /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/license/javolution_license.txt /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/license/launcher-third-party-libraries.html /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/license/saxon-conditions.html /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/license/third-party-libraries.html /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/license/third-party-libraries.json /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/license/yourkit-license-redist.txt /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/licenses/pycharm-community
+ RPM_EC=0
++ jobs -p
+ exit 0
warning: absolute symlink: /usr/bin/pycharm-community -> /usr/share/java/pycharm-community/bin/pycharm.sh
Provides: application() application(pycharm-community.desktop) metainfo() metainfo(pycharm-community.metainfo.xml) mimehandler(application/x-python-code) mimehandler(application/xml) mimehandler(text/markdown) mimehandler(text/plain) mimehandler(text/x-python) pycharm-community = 2024.3-3.fc39 pycharm-community(ppc-64) = 2024.3-3.fc39
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /usr/bin/sh libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.9)(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgcc_s.so.1(GCC_3.3)(64bit) libgcc_s.so.1(GCC_4.2.0)(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.12)(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) librt.so.1()(64bit) librt.so.1(GLIBC_2.2.5)(64bit) rtld(GNU_HASH)
Obsoletes: pycharm-community-jre < 2024.3-3.fc39
Processing files: pycharm-community-doc-2024.3-3.fc39.noarch
Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.LJWNAs
+ umask 022
+ cd /builddir/build/BUILD
+ cd pycharm-community-2024.3
+ DOCDIR=/builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/doc/pycharm-community-doc
+ export LC_ALL=
+ LC_ALL=
+ export DOCDIR
+ /usr/bin/mkdir -p /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/doc/pycharm-community-doc
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/help /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/doc/pycharm-community-doc
+ cp -pr /builddir/build/BUILD/pycharm-community-2024.3/Install-Linux-tar.txt /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le/usr/share/doc/pycharm-community-doc
+ RPM_EC=0
++ jobs -p
+ exit 0
Provides: pycharm-community-doc = 2024.3-3.fc39
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le
Wrote: /builddir/build/RPMS/pycharm-community-doc-2024.3-3.fc39.noarch.rpm
Wrote: /builddir/build/RPMS/pycharm-community-2024.3-3.fc39.ppc64le.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.XmiEzd
+ umask 022
+ cd /builddir/build/BUILD
+ cd pycharm-community-2024.3
+ /usr/bin/rm -rf /builddir/build/BUILDROOT/pycharm-community-2024.3-3.fc39.ppc64le
+ RPM_EC=0
++ jobs -p
+ exit 0
Executing(rmbuild): /bin/sh -e /var/tmp/rpm-tmp.IoMsv0
+ umask 022
+ cd /builddir/build/BUILD
+ rm -rf /builddir/build/BUILD/pycharm-community-2024.3-SPECPARTS
+ rm -rf pycharm-community-2024.3 pycharm-community-2024.3.gemspec
+ RPM_EC=0
++ jobs -p
+ exit 0

RPM build warnings:
    absolute symlink: /usr/bin/pycharm-community -> /usr/share/java/pycharm-community/bin/pycharm.sh
Finish: rpmbuild pycharm-community-2024.3-3.fc39.src.rpm
Finish: build phase for pycharm-community-2024.3-3.fc39.src.rpm
INFO: chroot_scan: 3 files copied to /var/lib/copr-rpmbuild/results/chroot_scan
INFO: /var/lib/mock/fedora-39-ppc64le-1733142711.527732/root/var/log/dnf.log
/var/lib/mock/fedora-39-ppc64le-1733142711.527732/root/var/log/dnf.librepo.log
/var/lib/mock/fedora-39-ppc64le-1733142711.527732/root/var/log/dnf.rpm.log
INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz
/bin/tar: Removing leading `/' from member names
INFO: Done(/var/lib/copr-rpmbuild/results/pycharm-community-2024.3-3.fc39.src.rpm) Config(child) 13 minutes 20 seconds
INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results
INFO: Cleaning up build root ('cleanup_on_success=True')
Start: clean chroot
INFO: unmounting tmpfs.
Finish: clean chroot
Finish: run
Running RPMResults tool
Package info:
{
    "packages": [
        {
            "name": "pycharm-community",
            "epoch": null,
            "version": "2024.3",
            "release": "3.fc39",
            "arch": "src"
        },
        {
            "name": "pycharm-community",
            "epoch": null,
            "version": "2024.3",
            "release": "3.fc39",
            "arch": "ppc64le"
        },
        {
            "name": "pycharm-community-doc",
            "epoch": null,
            "version": "2024.3",
            "release": "3.fc39",
            "arch": "noarch"
        }
    ]
}
RPMResults finished