diff --git a/.QT-ENTERPRISE-LICENSE-AGREEMENT b/.QT-ENTERPRISE-LICENSE-AGREEMENT index 8d68b15d..ff775f95 100644 --- a/.QT-ENTERPRISE-LICENSE-AGREEMENT +++ b/.QT-ENTERPRISE-LICENSE-AGREEMENT @@ -1061,6 +1061,7 @@ The Agreement includes following Appendices 1-10, as applicable. - Appendix 8: Intentionally left blank (optional) - Appendix 9: Support Terms - Appendix 10: Conversion from legacy Licenses to Subscription (optional) +- Appendix 11: TERMS OF USE - QT INSIGHT TRACKER LIBRARY APPENDIX 1: LICENSED SOFTWARE @@ -1252,7 +1253,7 @@ only ("Redistributables") are marked with "R" in the below table. +----------------------------------------------------------+ | Device Utilities | | | X,R | X,R | +----------------------------------------------------------+ -| Qt Debugging Bridge (QBD) Daemon | | | X,R | X,R | +| Qt Debugging Bridge (QDB) Daemon | | | X,R | X,R | +----------------------------------------------------------+ | Qt Quick Ultralite Controls | | | X,R | X,R | +----------------------------------------------------------+ @@ -1668,116 +1669,152 @@ Content Format and Channel as mentioned in paragraph 3 and 4. APPENDIX 8: INTENTIONALLY LEFT BLANK APPENDIX 9: SUPPORT TERMS +Version 2023-04 -These Qt support terms and conditions ("Support Terms") set forth the legal -framework, where under The Qt Company ("The Qt Company") provides support +These Qt support terms and conditions (“Support Terms”) set forth the legal +framework, where under The Qt Company (“The Qt Company”) provides support services (as herein defined) to the Licensee. 1 DEFINITIONS -"Application Code" shall mean a computer software program written strictly +“Application Code” shall mean a computer software program written strictly using the Qt programming language, by or for the Licensee, with a user interface, enabling the Licensee or their users to accomplish a specific task and display any results of the task on the display monitor or screen. -"Dedicated Contact" shall mean the employee of The Qt Company who will be the -first point of contact for all Designated Users' requests for Support. +“Customer Portal” shall mean The Qt Company’s web-based service and support +user interface located at https://account.qt.io/ or at another location +designated by The Qt Company. Customer Portal is used by a Designated User with +Qt Account, and it provides downloads, license management, license certificate +and other services for Designated Users. -"Errors" shall mean an error, flaw, mistake, failure, or fault in Licensed +“Dedicated Contact” shall mean the employee of The Qt Company who will be the +first point of contact for all Designated Users’ requests for Support. + +“Errors” shall mean an error, flaw, mistake, failure, or fault in Licensed Software that prevents it from behaving as described in the relevant -documentation or as agreed between the Parties. +documentation or as agreed between the Parties. Designated User can follow the +state and progress of Errors in Customer Portal. -"Extended Support" shall mean a continuation to the normal Support period, +“Extended Support” shall mean a continuation to the normal Support period, which allows Designated Users to receive selected Support (Standard Support or Premium Support) for a version of Licensed Software that is no longer generally supported by The Qt Company. -"Install Support" shall mean Support that is limited to installation related +”Install Support” shall mean Support that is limited to installation-related Error(s) on Development Platforms specified as supported host platforms for -each Qt release under doc.qt.io. +each Qt release under doc.qt.io. Install Support covers also operational use of +the QA Tools, but not operational use of Qt Software. -"Maintenance Release" shall mean a release or version of Licensed Software +“Maintenance Release” shall mean a release or version of Licensed Software containing bug fixes, error corrections and other changes targeted to maintaining and improving product stability and quality. Maintenance Releases are generally depicted as a change to the third digit of Licensed Software version number. -"Platforms" shall mean both Development Platforms and Deployment Platforms. +“Platforms” shall mean both Development Platforms and Deployment Platforms. Supported host and target Platforms may vary from for each Qt release as defined under doc.qt.io. -"Premium Support" shall mean an upgraded level of Support that The Qt Company +“Premium Support” shall mean an upgraded level of Support that The Qt Company provides pursuant to these Support Terms to Licensee if Licensee has purchased -Premium Support instead of Standard Support. Premium Support shall always be -purchased for all Designated User(s) in the respective development team of the -Licensee. +Premium Support instead of Standard Support. Premium Support also covers what +is included in Standard Support. Premium Support shall always be purchased for +all Designated User(s) in the respective development team of the Licensee. -"Response Time" shall mean the period of time from when Licensee notifies -TheQt Company about an Error or requests Support until The Qt Company provides +“Qt Account” shall mean the Qt Account for a Designated User used for using Qt +services and Customer Portal. A Qt Account is mapped to the Licensee company +with the corporate email domain or domains. + +”Qualification Kit” shall mean a set of documents and validation test cases +used for product certification needs as defined in section 2.6. + +“Response Time” shall mean the period of time from when Licensee notifies The +Qt Company about an Error or requests Support until The Qt Company provides Licensee with a response that addresses (but not necessarily resolves) the reported Error or provides the requested Support. -"Standard Support" shall mean standard level of Support that The Qt Company -provides pursuant to these Support Terms to Licensee. +“Standard Support” shall mean standard level of Support that The Qt Company +provides pursuant to these Support Terms to Licensee. Standard Support also +covers what is included in Install Support. -"Support" shall mean developer assistance that is provided by The Qt Company -to assist eligible Designated Users in Licensed Software installation, usage -and functionality problem resolution for Error(s) and Error workarounds -pursuant to the terms of these Support Terms. Support for different products is -available as specified in the below table ("X" marking the Support that is -included in the license price, optional Add-on Support services are marked as -"O"): +“Security Issue” shall mean an Error that may cause a vulnerability in a system +or application that uses the Licensed Software. -+-----------------------------------------------------------------------+ -| |ADP|ADE|DCP|DCE|DSP|DSE|Squish|Coco|Test Center| -+-----------------------------------------------------------------------+ -| Install Support | X | X | X | X | X | X | X | X | X | -+-----------------------------------------------------------------------+ -| Standard Support | | X | X | X | X | X | X | X | X | -+-----------------------------------------------------------------------+ -| Premium Support | | O | O | O | O | O | O | O | O | -+-----------------------------------------------------------------------+ -| Extended Support | | O | O | O | O | O | | | | -+-----------------------------------------------------------------------+ -| Tool Qualification Kit| | | | | | | O | O | | -+-----------------------------------------------------------------------+ +“Support” shall mean developer assistance that is provided by The Qt Company to +assist eligible Designated Users in Licensed Software installation, usage and +functionality problem resolution for Error(s) and Error workarounds pursuant to +the terms of these Support Terms. Support for different products is available +as specified in the below table (‘X’ marking the Support that is included in +the license price, optional Add-on Support services are marked as ‘O’): -"Support Validity Term" shall mean the Development License Term or any other -fixed time period agreed between the Parties during which time the Customer is ++-----------------------------------------------------------------------------+ +| | Install| Standard| Premium| Extended| Qualification| +| | Support| Support | Support| Support | Kit | ++-----------------------------------------------------------------------------+ +| DSP | X | X | O | O | | ++-----------------------------------------------------------------------------+ +| DSE | X | X | O | O | | ++-----------------------------------------------------------------------------+ +| ADP | X | | | | | ++-----------------------------------------------------------------------------+ +| ADE | X | X | O | O | | ++-----------------------------------------------------------------------------+ +| DCP | X | X | O | O | | ++-----------------------------------------------------------------------------+ +| DCE | X | X | O | O | | ++-----------------------------------------------------------------------------+ +| Squish | X | X | O | | O | ++-----------------------------------------------------------------------------+ +| Coco | X | X | O | | O | ++-----------------------------------------------------------------------------+ +| Test Center | X | X | O | | O | ++-----------------------------------------------------------------------------+ +| Axivion Suite | X | X | | | | ++-----------------------------------------------------------------------------+ +| Architecture Analysis | X | X | | | | ++-----------------------------------------------------------------------------+ +| Static Code Analysis | X | X | | | | ++-----------------------------------------------------------------------------+ +| Static Coverage | X | X | | | | +| Analysis Professional | | | | | | ++-----------------------------------------------------------------------------+ +| Qt Insight | | X | | | | ++-----------------------------------------------------------------------------+ + +“Support Validity Term” shall mean the Development License Term or any other +fixed time period agreed between the Parties during which time the Licensee is eligible to receive Support from The Qt Company. -"Tool Qualification Kit" shall mean a customized set of documents and -validation test cases. - 2 SUPPORT SERVICES 2.1 Support Services Provided by The Qt Company Subject to these Support Terms and during the Support Validity Term, The Qt -Company will via its web-based support user-interface, provide Designated -User(s) with Support for the Platforms which Customer has licensed under the -Agreement. -The Qt Company will make commercially reasonable efforts to solve any Errors -reported by Designated User(s). Resolution of an Error may be provided through +Company will via its Customer Portal, provide Designated User(s) with Support +for the Licensed Software which Licensee has licensed under the Agreement. The +Qt Company will make commercially reasonable efforts to solve any Errors +reported by Designated User(s). Resolution of an Error may be provided through Designated User(s) themselves downloading of a later released version of the applicable Licensed Software product(s) or providing the Designated User with a -temporary workaround addressing such Error. +workaround addressing such Error or providing the Designated User with an +updated tool configuration. 2.2 Licensee's Obligations -To report an Error, the Designated User shall register the Error on The Qt -Company's web-based support user interface located at: -https://account.qt.io/login or at another location designated by The Qt Company. +To report an Error, the Designated User shall register the Error on the +Customer Portal. If the Designated User considers the reported Error to be a +Security Issue, the Error shall be marked as a Security Issue. The Designated User must provide adequate information and documentation to The Qt Company to enable it to recreate the Error or problem for which the -Designated User has sought assistance. -To ensure efficient handling of Errors, the Designated User must provide the -following information, where relevant: +Designated User has sought assistance. To ensure efficient handling of Errors, +the Designated User must provide the following information, where relevant: - A clear, detailed description of the problem, question or suggestion; - Identification of which Licensed Software product and version is affected; - Identification of the operating environment (e.g. operating system, hardware - Platform, build tools, etc.) on which the problem exists; + Platform, build tools, tool configuration, etc.) on which the problem exists; +- Marking the issue as a Security Issue, when reporting a Security Issue; - On Standard Support: A complete and compilable test case of not more than 500 lines of code that demonstrates the problem; - On Premium Support: A complete and compilable test case that demonstrates the @@ -1799,29 +1836,30 @@ General limitations: Each version or release of the Licensed Software will be Supported under Standard Support or Premium Support only for limited time period as set forth -in doc.qt.io. For example, regular releases of Qt Software are supported for -one (1) year from the release date of the version x.y.0 and Long Term Support -(LTS) Releases are supported for a period of three (3) years from the release -date of the LTS version x.y.0. +in doc.qt.io or in documentation provided with the respective Licensed Software +product. If nothing is documented, a release of Licensed Software is supported +for one (1) year from the release date of the version x.y.0 and Long Term +Support (LTS) Releases are supported for a period of three (3) years from the +release date of the LTS version x.y.0. -The Qt Company shall only provide Support for Designated User(s). - -Support is made available for the entire development teams only: It is not -allowed to purchase Support only for some members of the development team, and -all Designated Users of the respective development team must be eligible for -the same level of Support. +The Qt Company shall only provide Support for Designated User(s) through +Customer Portal.Support is made available for the entire development teams +only: It is not allowed to purchase Support only for some members of the +development team, and all Designated Users of the respective development team +must be eligible for the same level of Support. Support is not provided for snapshots, preview releases, beta releases or release candidates. -The Qt Company shall have no obligation to provide Support for hardware or -operating system specific problems or problems arising from improper use, -accident, neglect or modification of Qt. +The Qt Company shall have no obligation to provide Support for 3rd party +components, hardware or operating system specific problems or problems arising +from improper use, accident, neglect, or modification of Qt. Limitations with Install Support: -Support limited to Error(s) regarding installation and setting up of the Qt -development environment on host Platforms. +Support limited to (i) Error(s) regarding installation and setting up of the Qt +development environment on host Platforms, or (ii) Errors impacting operational +use of the QA Tools. Limitations with Standard Support: @@ -1847,31 +1885,60 @@ will make commercially reasonable efforts to provide a solution on closest corresponding supported Platform. Premium Support is optional and purchased for an agreed bucket of hours -("Bucket"). Hours can be used by any Designated User in the respective +(“Bucket”). Hours can be used by any Designated User in the respective development team. To encourage continuous usage of the Support, ten percent (10%) of the purchased Bucket shall automatically expire (regardless of whether such support hours are actually used or not by the Licensee) each month after three (3) months from the purchase of the Premium Support. -2.4 Extended Support +2.4 Handling of Security Issues + +The reported Errors marked as Security Issues will be assessed by experts to +determine the severity of the issue and to verify if it indeed is a valid +Security Issue. The Designated User who reported the issue may be contacted for +more details. If the reported issue is not deemed to be a Security Issue, it +will be treated as a normal Error and handled accordingly. + +A verified Security Issue will be fixed as soon as possible. Qt Company will +notify all Licensees via appropriate channels about the Security Errors and +availability of patches for Licensed Software. Typically, a fix for the +Security Issue is included in the next Maintenance Release of Licensed +Software. + +If the Security Issue is reported in a third-party library used in Licensed +Software, The Qt Company will notify the relevant third party of such Security +Issue detected in their library. When the Security Issue is fixed in the +third-party library, the new version of the third-party library will be in the +next feasible Maintenance Release of the Licensed Software. If a fixed version +of the third-party library is not available, The Qt Company may instead decide +to include documentation regarding the issue, or a patch for this third-party +library. + +All known Security Issues in Licensed Software will be mentioned as part of the +change notes released with each version of Licensed Software. + +2.5 Extended Support Extended Support extends the Support Validity Term for a release of Licensed Software that is no longer generally supported. Extended Support includes and is by default provided with Standard Support -rules and limitations, unless Extended Support is purchased with Premium -Support in which case Premium Support rules and limitations will apply. +rules and limitations, unless Extended Support is purchased together with +Premium Support in which case Premium Support rules and limitations will apply. Extended Support is optional and purchased with annual fee and separately per each Licensee product. Extended Support will need definition of (i) Licensee -product, (ii) used Platform(s) and (iii) Licensed Software version(s). +product, (ii) used Platform(s) and (iii) Licensed Software version(s). For +avoidance of doubt, Extended Support requires that the Designated User has a +valid license for the respective Licensed Software. -2.5 Tool Qualification Kit +2.6 Qualification Kit -The Qt Company shall provide set of customized documents and validation tests -that enable Licensee to qualify QA testing tool for the purpose of ISO 26262, -EN 50128, DO-330, IEC 61508, IEC 62304 or IEC 13485 certification Licensee end -to end solution. +The Qt Company shall provide a set of documents and validation tests that +enable the Licensee to qualify QA testing tool (subject to a separate fee) or +Qt Safe Renderer for the purpose of safety certification of Licensee end-to-end +solution. Exact complied safety standards may vary between products, used +features, use case, and industry. 3 RESPONSE TIME @@ -1884,6 +1951,9 @@ exceed two (2) business days. Premium Support: Errors and Support requests will have a Response Time not to exceed one (1) business day. +Security Issues: Errors that are Security Issues will have a Response Time not +to exceed one (1) business day. + For complex issues, The Qt Company may provide an initial response to the Designated User and then follow up, without undue delay, with additional communication before an Error is properly addressed or Support provided. @@ -1907,7 +1977,7 @@ All Support requests will be handled with high priority. 5 MAINTENANCE RELEASES, UPDATES AND UPGRADES -Under the Support the Customer is eligible for Maintenance Releases and Updates +Under the Support the Licensee is eligible for Maintenance Releases and Updates that The Qt Company generally makes available to customers who has purchased Support. Unless otherwise decided by The Company at its free and absolute discretion, Upgrades will not be provided under the Support. @@ -1919,6 +1989,7 @@ previous version of Licensed Software: - Fixes related to build issues on supported Platforms; - Error corrections specific to a single Platform that are not present on other Platforms; +- Corrections to Security Issues; - Critical Error corrections such as crashes, data corruption, loss of data, race conditions; and - Updates to documentation and license information when deemed necessary by @@ -1975,3 +2046,46 @@ remain outstanding on the Current Licenses under the applicable terms Licensee will continue to make such payments in accordance with the applicable order documentation, notwithstanding the fact that the Current Licenses are being converted to Development Licenses pursuant to this Appendix. + +APPENDIX 11: TERMS OF USE - QT INSIGHT TRACKER LIBRARY +Version 1.0 + +Qt Insight Tracker Library ("Tracker Library") is a software module used to +collect end user data from Customer's Application and Devices relating to The +Qt Company's Qt Insight online service the Customer is ordering from The Qt +Company under a separate service agreement ("Service Agreement"). + +Unless otherwise set forth herein, definitions written in capital letters used +herein shall have the meaning set forth in the Service Agreement. + +Subject to these terms The Qt Company grants to Customer a worldwide, +non-exclusive, non-transferable, royalty-free, revocable (for cause) right and +license, valid for the term of the Service Agreement, to + (i) use, copy and modify Tracker Library for the purpose of including it + into the Devices and Applications and solely for the purpose of being + used only in conjunction with Insight Cloud or Insight Private Cloud, + and + (ii) distribute, by itself or through its Contractors, Tracker Library as + installed, incorporated, or integrated into Applications and/or + Devices. + +Use of Tracker Library in a way or for the purpose other than the above is +strictly prohibited. Tracker Library is licensed to the Customer in all +respects "as is". + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF +ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER +WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND +NON-INFRINGEMENT WITH REGARD TO THE TRACKER LIBRARY. THE QT COMPANY DOES NOT +WARRANT THAT THE TRACKER LIBRARY WILL SATISFY CUSTOMER'S REQUIREMENTS OR THAT +IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE +UNINTERRUPTED. +IN NO EVENT SHALL THE QT COMPANY BE LIABLE TO THE CUSTOMER FOR ANY LOSS OF +PROFIT, LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, +SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY +KIND, HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THE USE OF THE TRACKER +LIBRARY. + +THE TOTAL MAXIMUM LIABILITY OF THE QT COMPANY UNDER THESE TERMS SHALL IN NO +EVENT EXCEED 10,000 EUROS. diff --git a/.qmake.conf b/.qmake.conf index 4048b20d..b5521889 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -6,4 +6,4 @@ DEFINES += QT_NO_JAVA_STYLE_ITERATORS QT_SOURCE_TREE = $$PWD QT_BUILD_TREE = $$shadowed($$PWD) -MODULE_VERSION = 5.15.8 +MODULE_VERSION = 5.15.10 diff --git a/.release-timestamp b/.release-timestamp index 9fb3e690..9384b1d9 100644 --- a/.release-timestamp +++ b/.release-timestamp @@ -1 +1 @@ -QT_PACKAGEDATE_STR=2022-11-12 \ No newline at end of file +QT_PACKAGEDATE_STR=2023-06-01 \ No newline at end of file diff --git a/.tag b/.tag index 58d98946..d107099a 100644 --- a/.tag +++ b/.tag @@ -1 +1 @@ -4ee4fc18b4067b90efa46ca9baba74f53b54d9ec +29400a683f96867133b28299c0d0bd6bcf40df35 diff --git a/LICENSE.QT-LICENSE-AGREEMENT b/LICENSE.QT-LICENSE-AGREEMENT index 8b80e563..8d68b15d 100644 --- a/LICENSE.QT-LICENSE-AGREEMENT +++ b/LICENSE.QT-LICENSE-AGREEMENT @@ -1,48 +1,65 @@ QT LICENSE AGREEMENT -Agreement version 4.3 +Agreement version 4.4.1 This Qt License Agreement ("Agreement") is a legal agreement for the licensing of Licensed Software (as defined below) between The Qt Company (as defined -below) and the Licensee who has accepted the terms of this Agreement by -downloading or using the Licensed Software and/or as defined herein: +below) and the Licensee who has accepted the terms of this Agreement by signing +this Agreement or by downloading or using the Licensed Software or in any other +appropriate means. Capitalized terms used herein are defined in Section 1. WHEREAS: - (A) Licensee wishes to use the Licensed Software for the purpose of - developing and distributing Applications and/or Devices (each as - defined below); and - (B) The Qt Company is willing to grant the Licensee a right to use - Licensed Software for such a purpose pursuant to term and conditions - of this Agreement. + (A) Licensee wishes to use the Licensed Software for the purpose of + developing and distributing Applications and/or Devices (each as defined + below); + (B) The Qt Company is willing to grant the Licensee a right to use Licensed + Software for such a purpose pursuant to term and conditions of this + Agreement; and + (C) Parties wish to enable that their respective Affiliates also can sell + and purchase licenses to serve Licensee Affiliates' needs to use Licensed + Software pursuant to terms of the Agreement. Any such license purchases by + Licensee Affiliates from The Qt Company or its Affiliates will create + contractual relationship directly between the relevant The Qt Company and + the respective ordering Licensee Affiliate "Acceding Agreement"). + Accordingly, Licensee shall not be a party to any such Acceding Agreement, + and no rights or obligations are created to the Licensee thereunder but all + rights and obligations under such Acceding Agreement are vested and borne + solely by the ordering Licensee Affiliate and the relevant The Qt Company + as a contracting parties under such Acceding Agreement. NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: 1. DEFINITIONS -"Affiliate" of a Party shall mean an entity (i) which is directly -or indirectly controlling such Party; (ii) which is under the same direct or -indirect ownership or control as such Party; or (iii) which is directly or -indirectly owned or controlled by such Party. For these purposes, an entity -shall be treated as being controlled by another if that other entity has fifty -percent (50 %) or more of the votes in such entity, is able to direct its -affairs and/or to control the composition of its board of directors or -equivalent body. +"Affiliate" of a Party shall mean an entity + (i) which is directly or indirectly controlling such Party; + (ii) which is under the same direct or indirect ownership or control as + such Party; or + (iii) which is directly or indirectly owned or controlled by such Party. +For these purposes, an entity shall be treated as being controlled by another +if that other entity has fifty percent (50 %) or more of the votes in such +entity, is able to direct its affairs and/or to control the composition of its +board of directors or equivalent body. "Add-on Products" shall mean The Qt Company's specific add-on software products -(for example Qt Safe Renderer, Qt for Automation, Qt Application Manager), which -are not licensed as part of The Qt Company's standard offering, but shall be -included into the scope of Licensed Software only if so specifically agreed -between the Parties. +which are not licensed as part of The Qt Company's standard product offering, +but shall be included into the scope of Licensed Software only if so +specifically agreed between the Parties. -"Applications" shall mean Licensee's software products created using the -Licensed Software, which may include the Redistributables, or part thereof. +"Agreement Term" shall mean the validity period of this Agreement, as set forth +in Section 12. -"Contractor(s)" shall mean third party consultants, distributors and contractors -performing services to the Licensee under applicable contractual arrangement. +"Applications" shall mean software products created using the Licensed +Software, which include the Redistributables, or part thereof. -"Customer(s)" shall mean Licensee's end users to whom Licensee, directly or -indirectly, distributes copies of the Redistributables. +"Contractor(s)" shall mean third party consultants, distributors and +contractors performing services to the Licensee under applicable contractual +arrangement. + +"Customer(s)" shall mean Licensee's customers to whom Licensee, directly or +indirectly, distributes copies of the Redistributables as integrated or +incorporated into Applications or Devices. "Data Protection Legislation" shall mean the General Data Protection Regulation (EU 2016/679) (GDPR) and any national implementing laws, regulations and @@ -50,44 +67,61 @@ secondary legislation, as may be amended or updated from time to time, as well as any other data protection laws or regulations applicable in relevant territory. -"Deployment Platforms" shall mean operating systems and/or hardware specified -in the License Certificate, on which the Redistributables can be distributed -pursuant to the terms and conditions of this Agreement. +"Deployment Platforms" shall mean target operating systems and/or hardware +specified in the License Certificate, on which the Redistributables can be +distributed pursuant to the terms and conditions of this Agreement. "Designated User(s)" shall mean the employee(s) of Licensee or Licensee's -Affiliates acting within the scope of their employment or Licensee's Contractors -acting within the scope of their services for Licensee and on behalf of -Licensee. Designated Users shall be named in the License Certificate. +Affiliates acting within the scope of their employment or Licensee's +Contractors acting within the scope of their services on behalf of Licensee. "Development License" shall mean the license needed by the Licensee for each Designated User to use the Licensed Software under the license grant described in Section 3.1 of this Agreement. Development Licenses are available per respective Licensed Software products, each product having its designated scope -and purpose of use. Distribution Licenses are always connected to Qt for Device -Creation product and Qt for MCUs product only. +and purpose of use. -"Development Platforms" shall mean those operating systems specified in the -License Certificate, in which the Licensed Software can be used under the -Development License, but not distributed in any form or used for any other purpose. +"Development License Term" shall mean the agreed validity period of the +Development License or QA Tools license during which time the relevant Licensed +Software product can be used pursuant to this Agreement. Agreed Development +License Term, as ordered and paid for by the Licensee, shall be memorialized in +the applicable License Certificate. -"Devices" shall mean hardware devices or products that 1) are manufactured -and/or distributed by the Licensee or its Affiliates or Contractors, and (2)(i) -incorporate or integrate the Redistributables or parts thereof; or (ii) where -the main user interface or substantial functionality of such unit , when used by -a Customer, is provided by Application(s) or otherwise depends on the Licensed -Software, regardless of whether the Redistributables are distributed together -with the hardware or not. Devices covered with this Agreement shall be specified -in Appendix 2 or in a quote. +"Development Platforms" shall mean those host operating systems specified in +the License Certificate, in which the Licensed Software can be used under the +Development License. -"Distribution License(s)" shall mean the license required for any kind of sale, -trade, exchange, loan, lease, rental or other distribution by or on behalf of -Licensee to a third party of Redistributables in connection with Devices -pursuant to license grant described in Section 3.3 of this Agreement. +"Devices" shall mean + (1) hardware devices or products that + i. are manufactured and/or distributed by the Licensee, its Affiliates, + Contractors or Customers, and + ii. incorporate, integrate or link to Applications such that + substantial functionality of such unit, when used by an End User, + is provided by Application(s) or otherwise depends on the Licensed + Software, regardless of whether the Application is developed by + Licensee or its Contractors; or + (2) Applications designed for the hardware devices specified in item (1). -"Distribution License Packs" shall mean set of prepaid Distribution Licenses for -distribution of Redistributables, as defined in The Qt Company's standard price -list, quote, Purchase Order confirmation or in an appendix hereto, as the case -may be. + Devices covered by this Agreement shall be specified in Appendix 2 or in a + quote. + +"Distribution License(s)" shall mean a royalty-bearing license required for any +kind of sale, trade, exchange, loan, lease, rental or other distribution by or +on behalf of Licensee to a third party of Redistributables in connection with +Devices pursuant to license grant described in Section 3.3 of this Agreement. +Distribution Licensed are sold separately for each type of Device respectively +and cannot be used for any type of Devices at Licensee's discretion. + +"Distribution License Packs" shall mean set of prepaid Distribution Licenses +for distribution of Redistributables, as defined in The Qt Company's standard +price list, quote, Purchase Order confirmation or in an Appendix 2 hereto, as +the case may be. + +"End User" shall mean the final end user of the Application or a Device. + +"Evaluation License Term" shall mean a time period specified in the License +Certificate for the Licensee to use the relevant Licensed Software for +evaluation purposes according to Section 3.6 herein. "Intellectual Property Rights" shall mean patents (including utility models), design patents, and designs (whether or not capable of registration), chip @@ -99,136 +133,117 @@ well as any trade secrets. "License Certificate" shall mean a certificate generated by The Qt Company for each Designated User respectively upon them downloading the Licensed Software, which will be available under respective Designated User's Qt Account at -account.qt.io. License Certificates will specify the Designated User, the -Development Platforms, Deployment Platforms and the License Term. Such terms are -considered part of the licenses granted hereunder and shall be updated from time -to time to reflect any agreed changes to the foregoing terms relating to -Designated User's rights to the Licensed Software. +account.qt.io. License Certificates will specify relevant information +pertaining the Licensed Software purchased by Licensee and Designated User's +license to the Licensed Software. "License Fee" shall mean the fee charged to the Licensee for rights granted under the terms of this Agreement. -"License Term" shall mean the agreed validity period of the Development License -of the respective Designated User, during which time the Designated User is -entitled to use the Licensed Software, as set forth in the respective License -Certificate. - -"Licensed Software" shall mean either - (i) Qt for Application Development or - (ii) Qt for Device Creation, and/or - (iii) Qt 3D Studio, and/or - (iv) Qt Design Studio, and/or - (v) Qt for MCUs, and/or - (vi) selected Add-on Products, if any, - -depending on which product(s) the Licensee has purchased under this Agreement, -as well as corresponding online or electronic documentation, associated media -and printed materials, including the source code (where applicable), example -programs and the documentation, licensed to the Licensee under this Agreement. -Licensed Software does not include Third Party Software (as defined in -Section 4) or Open Source Qt. The Qt Company may, in the course of its -development activities, at its free and absolute discretion and without any -obligation to send or publish any notifications to the Licensee or in general, -make changes, additions or deletions in the components and functionalities of -the Licensed Software, provided that no such changes, additions or deletions -will affect the already released version of the Licensed Software, but only -upcoming version(s). +"Licensed Software" shall mean specified product of commercially licensed +version of Qt Software and/or QA Tools defined in Appendix 1 and/or Appendix 3, +which Licensee has purchased and which is provided to Licensee under the terms +of this Agreement. Licensed Software shall include corresponding online or +electronic documentation, associated media and printed materials, including the +source code (where applicable), example programs and the documentation. +Licensed Software does not include Third Party Software (as defined in Section +4) or Open Source Qt. The Qt Company may, in the course of its development +activities, at its free and absolute discretion and without any obligation to +send or publish any notifications to the Licensee or in general, make changes, +additions or deletions in the components and functionalities of the Licensed +Software, provided that no such changes, additions or deletions will affect +the already released version of the Licensed Software, but only upcoming +version(s). "Licensee" shall mean the individual or legal entity that is party to this -Agreement, as identified on the signature page hereof. +Agreement. -"Licensee's Records" shall mean books and records that are likely to contain -information bearing on Licensee's compliance with this Agreement, Licensee's use -of Open Source Qt and/or the payments due to The Qt Company under this -Agreement, including, but not limited to user information, assembly logs, sales -records and distribution records. +"Licensee's Records" shall mean books and records that contain information +bearing on Licensee's compliance with this Agreement, Licensee's use of Open +Source Qt and/or the payments due to The Qt Company under this Agreement, +including, but not limited to user information, assembly logs, sales records +and distribution records. "Modified Software" shall have the meaning as set forth in Section 2.3. -"Online Services" shall mean any services or access to systems made available by -The Qt Company to the Licensee over the Internet relating to the Licensed +"Online Services" shall mean any services or access to systems made available +by The Qt Company to the Licensee over the Internet relating to the Licensed Software or for the purpose of use by the Licensee of the Licensed Software or Support. Use of any such Online Services is discretionary for the Licensee and some of them may be subject to additional fees. -"Open Source Qt" shall mean the non-commercial Qt computer software products, -licensed under the terms of the GNU Lesser General Public License, version 2.1 -or later ("LGPL") or the GNU General Public License, version 2.0 or later -("GPL"). For clarity, Open Source Qt shall not be provided nor governed under -this Agreement. +"Open Source Qt" shall mean Qt Software available under the terms of the GNU +Lesser General Public License, version 2.1 or later ("LGPL") or the GNU General +Public License, version 2.0 or later ("GPL"). For clarity, Open Source Qt shall +not be provided, governed or used under this Agreement. "Party" or "Parties" shall mean Licensee and/or The Qt Company. -"Permitted Combination" shall have the meaning as set forth in Section -3.4(viii). +"Permitted Software" shall mean (i) third party open source software products +that are generally available for public in source code form and free of any +charge under any of the licenses approved by Open Source Initiative as listed +on https://opensource.org/licenses, which may include parts of Open Source Qt +or be developed using Open Source Qt; and (ii) software The Qt Company has made +available via its Qt Marketplace online distribution channel. "Pre-Release Code" shall have the meaning as set forth in Section 4. -"Prohibited Combination" shall mean any means to (i) use, combine, incorporate, +"Prohibited Combination" shall mean any effort to use, combine, incorporate, link or integrate Licensed Software with any software created with or -incorporating Open Source Qt, (ii) use Licensed Software for creation of any -software created with or incorporating Open Source Qt, or (iii) incorporate or -integrate Applications into a hardware device or product other than a Device. +incorporating Open Source Qt, or use Licensed Software for creation of any such +software. -"Qt 3D Studio" shall mean The Qt Company's productized offering, which consist -of all versions of modules and tools as set forth in Appendix 1. +"Purchase Order" shall have the meaning as set forth in Section 10.2. -"Qt Design Studio" shall mean The Qt Company's productized offering, which -consist of all versions of modules and tools as set forth in Appendix 1. +"QA Tools" shall mean software libraries and tools as defined in Appendix 1 +depending on which product(s) the Licensee has purchased under the Agreement. -"Qt for Application Development" shall mean The Qt Company's productized -offering, which consist of all versions of modules and tools as set forth in -Appendix 1. - -"Qt for Device Creation" shall mean The Qt Company's productized offering, -which consist of all versions of modules and tools as set forth in Appendix 1. - -"Qt for MCUs" shall mean The Qt Company's productized offering, which consist -of all versions of modules and tools as set forth in Appendix 1. +"Qt Software" shall mean the software libraries and tools of The Qt Company, +which The Qt Company makes available under commercial and/or open source +licenses. "Redistributables" shall mean the portions of the Licensed Software set forth in Appendix 1 that may be distributed pursuant to the terms of this Agreement -in object code form only, including any relevant documentation. Where -relevant, any reference to Licensed Software in this Agreement shall include -and refer also to Redistributables. +in object code form only, including any relevant documentation. Where relevant, +any reference to Licensed Software in this Agreement shall include and refer +also to Redistributables. -"Renewal Term" shall mean an extension of previous License Term as agreed -between the Parties. +"Renewal Term" shall mean an extension of previous Development License Term as +agreed between the Parties. "Submitted Modified Software" shall have the meaning as set forth in Section 2.3. "Support" shall mean standard developer support that is provided by The Qt Company to assist Designated Users in using the Licensed Software in accordance -with The Qt Company's standard support terms available at -https://www.qt.io/terms-conditions/ and as further defined in Section 8 -hereunder. +with this Agreement and the Support Terms. + +"Support Terms" shall mean The Qt Company's standard support terms specified in +Appendix 9 hereto. "Taxes" shall have the meaning set forth in Section 10.5. -"Term" shall have the meaning set forth in Section 12. - "The Qt Company" shall mean: - (i) in the event Licensee is an individual residing in the United States - or a legal entity incorporated in the United States or having its - headquarters in the United States, The Qt Company Inc., a - Delaware corporation with its office at 2350 Mission College Blvd., - Suite 1020, Santa Clara, CA 95054, USA.; or - (ii) in the event the Licensee is an individual residing outside of the - United States or a legal entity incorporated outside of the United - States or having its registered office outside of the United States, - The Qt Company Ltd., a Finnish company with its registered office - at Bertel Jungin aukio D3A, 02600 Espoo, Finland. + (i) in the event Licensee is an individual residing in the United States or + a legal entity incorporated in the United States or having its + headquarters in the United States, The Qt Company Inc., a Delaware + corporation with its office at 3031 Tisch Way, 110 Plaza West, + San Jose, CA 95128, USA.; or + (ii) in the event the Licensee is an individual residing outside of the + United States or a legal entity incorporated outside of the United + States or having its registered office outside of the United States, + The Qt Company Ltd., a Finnish company with its registered office at + Miestentie 7, 02150 Espoo, Finland. "Third-Party Software" shall have the meaning set forth in Section 4. "Updates" shall mean a release or version of the Licensed Software containing -bug fixes, error corrections and other changes that are generally made available -to users of the Licensed Software that have contracted for Support. Updates are -generally depicted as a change to the digits following the decimal in the -Licensed Software version number. The Qt Company shall make Updates available to -the Licensee under the Support. Updates shall be considered as part of the -Licensed Software hereunder. +bug fixes, error corrections and other changes that are generally made +available to users of the Licensed Software that have contracted for Support. +Updates are generally depicted as a change to the digits following the decimal +in the Licensed Software version number. The Qt Company shall make Updates +available to the Licensee under the Support. Updates shall be considered as +part of the Licensed Software hereunder. "Upgrades" shall mean a release or version of the Licensed Software containing enhancements and new features and are generally depicted as a change to the @@ -239,38 +254,45 @@ of the Licensed Software hereunder. 2. OWNERSHIP 2.1. Ownership of The Qt Company -The Licensed Software is protected by copyright laws and international copyright -treaties, as well as other intellectual property laws and treaties. The Licensed -Software is licensed, not sold. + +The Licensed Software is protected by copyright laws and international +copyright treaties, as well as other intellectual property laws and treaties. +The Licensed Software is licensed, not sold. All of The Qt Company's Intellectual Property Rights are and shall remain the -exclusive property of The Qt Company or its licensors respectively. +exclusive property of The Qt Company or its licensors respectively. No rights +to The Qt Company's Intellectual Property Rights are assigned or granted to +Licensee under this Agreement, except when and to the extent expressly +specified herein. 2.2. Ownership of Licensee + All the Licensee's Intellectual Property Rights are and shall remain the exclusive property of the Licensee or its licensors respectively. -All Intellectual Property Rights to the Modified Software, Applications and Devices -shall remain with the Licensee and no rights thereto shall be granted by the -Licensee to The Qt Company under this Agreement (except as set forth in Section -2.3 below). +All Intellectual Property Rights to the Modified Software, Applications and +Devices shall remain with the Licensee and no rights thereto shall be granted +by the Licensee to The Qt Company under this Agreement (except as set forth in +Section 2.3 below). 2.3. Modified Software + Licensee may create bug-fixes, error corrections, patches or modifications to the Licensed Software ("Modified Software"). Such Modified Software may break -the source or binary compatibility with the Licensed Software (including without -limitation through changing the application programming interfaces ("API") or by -adding, changing or deleting any variable, method, or class signature in the -Licensed Software and/or any inter-process protocols, services or standards in -the Licensed Software libraries). To the extent that Licensee's Modified -Software so breaks source or binary compatibility with the Licensed Software, -Licensee acknowledges that The Qt Company's ability to provide Support may be -prevented or limited and Licensee's ability to make use of Updates may be restricted. +the source or binary compatibility with the Licensed Software (including +without limitation through changing the application programming interfaces +("API") or by adding, changing or deleting any variable, method, or class +signature in the Licensed Software and/or any inter-process protocols, +services or standards in the Licensed Software libraries). To the extent that +Licensee's Modified Software so breaks source or binary compatibility with the +Licensed Software, Licensee acknowledges that The Qt Company's ability to +provide Support may be prevented or limited and Licensee's ability to make use +of Updates may be restricted. Licensee may, at its sole and absolute discretion, choose to submit Modified Software to The Qt Company ("Submitted Modified Software") in connection with -Licensee's Support request, service request or otherwise. In the event Licensee -does so, then, Licensee hereby grants The Qt Company a sublicensable, +Licensee's Support request, service request or otherwise. In the event +Licensee does so, then, Licensee hereby grants The Qt Company a sublicensable, assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and fully paid-up license, under all of Licensee's Intellectual Property Rights, to reproduce, adapt, translate, modify, and prepare derivative works of, publicly @@ -281,181 +303,222 @@ discretion. 3. LICENSES GRANTED 3.1. Development with Licensed Software + Subject to the terms of this Agreement, The Qt Company grants to Licensee a -worldwide, non-exclusive, non-transferable license, valid for the License Term, -to use, modify and copy the Licensed Software by Designated Users on the -Development Platforms for the sole purposes of designing, developing, -demonstrating and testing Application(s) and/or Devices, and to provide thereto -related support and other related services to end-user Customers. Each -Application and/or Device can only include, incorporate or integrate code -generated under this Agreement by such Designated Users who are duly licensed -for the applicable Development Platform(s) and Deployment Platform(s) (i.e have -a valid license for the appropriate Licensed Software product). +worldwide, non-exclusive, non-transferable license, valid for each Development +License Term, to use, modify and copy the Licensed Software by Designated +Users on the Development Platforms for the sole purposes of designing, +developing, demonstrating and testing Application(s) and/or Devices, and to +provide thereto related support and other related services to Customers. Each +Application and/or Device can only include, incorporate or integrate +contributions by such Designated Users who are duly licensed for the applicable +Development Platform(s) and Deployment Platform(s) (i.e have a valid license +for the appropriate Licensed Software product). Licensee may install copies of the Licensed Software on five (5) computers per Designated User, provided that only the Designated Users who have a valid Development License may use the Licensed Software. Licensee may at any time designate another Designated User to replace a -then-current Designated User by notifying The Qt Company in writing, provided -that any Designated User may be replaced only once during any six-month period. +then-current Designated User by notifying The Qt Company in writing, where such +replacement is due to termination of employment, change of job duties, long +time absence or other such permanent reason affecting Designated User's need +for Licensed Software. -Upon expiry of the initially agreed License Term, the respective License Terms -shall be automatically extended to one or more Renewal Term(s), unless and -until either Party notifies the other Party in writing, or any other method -acceptable to The Qt Company, that it does not wish to continue the License -Term, such notification to be provided to the other Party no less than thirty -(30) days before expiry of the respective License Term. - -Unless otherwise agreed between the Parties, Renewal Term shall be of equal -length with the initial License Term. +Upon expiry of the initially agreed Development License Term, the respective +Development License Term shall be automatically extended to one or more Renewal +Term(s), unless and until either Party notifies the other Party in writing, or +any other method acceptable to The Qt Company (it being specifically +acknowledged and understood that verbal notification is explicitly deemed +inadequate in all circumstances), that it does not wish to continue the +Development License Term, such notification to be provided to the other Party +no less than thirty (30) days before expiry of the respective Development +License Term. The Qt Company shall, in good time before the due date for the +above notification, remind the Licensee on the coming Renewal Term. Unless +otherwise agreed between the Parties, Renewal Term shall be 12 months. Any such Renewal Term shall be subject to License Fees agreed between the -Parties or, if no advance agreement exists, subject to The Qt Company's standard -pricing applicable at the commencement date of any such Renewal Term. - -Any price or other term specified for a Renewal Term shall be valid only for the -specified time. +Parties or, if no advance agreement exists, subject to The Qt Company's +standard list pricing applicable at the commencement date of any such +Renewal Term. The Qt Company may either request the Licensee to place a purchase order -corresponding to a quote by The Qt Company, or uses Licensees stored Credit -Card information in the QtAccount to automatically charge the Licensee for the +corresponding to a quote by The Qt Company, or use Licensee's stored Credit +Card information in the Qt Account to automatically charge the Licensee for the relevant Renewal Term. -In the event Licensee does not prevent auto-renewal pursuant the above, but a -Renewal Term is nevertheless not duly ordered within 30 days from the date of -the respective notification from The Qt Company and/or the respective License -Fee paid by due date specified in The Qt Company's respective invoice, The Qt -Company shall apply a reinstatement fee equal to ten percent (10 %) of the -total value of the License Fees of the Development Licenses for the expired -term to be added to the License Fee of the respective Renewal Term. - -In the event Licensee chooses not to renew a Development License for a Renewal -Term by notifying The Qt Company thereof no less than thirty (30) days before -expiry of the respective License Term, Licensee may still reinstate such -expired Development Licenses for a Renewal Term subject to applicable renewal -Term License Fees until thirty (30) days from the expiry of the initially -agreed License Term or preceding Renewal Term. After such thirty (30) day -period a Development License shall be subject to applicable License Fees for -a new Development License and not any Renewal Term License Fees. - 3.2. Distribution of Applications -Subject to the terms of this Agreement, The Qt Company grants to Licensee -a worldwide, non-exclusive, non-transferable, revocable (for cause pursuant to -this Agreement) right and license, valid for the Term, to - (i) distribute, by itself or through its Contractors, Redistributables as - installed, incorporated or integrated into Applications for execution - on the Deployment Platforms, and - (ii) grant sublicenses to Redistributables, as distributed hereunder, for - Customers solely for Customer's internal use and to the extent - necessary in order for the Customers to use the Applications for their - respective intended purposes. -Right to distribute the Redistributables as part of an Application as provided -herein is not royalty-bearing but is conditional upon the Licensee not having -any unpaid License Fees for Development Licenses owed to The Qt Company at the -time of distribution of any Redistributables to Customers. - -3.3. Distribution of Devices Subject to the terms of this Agreement, The Qt Company grants to Licensee a worldwide, non-exclusive, non-transferable, revocable (for cause pursuant to -this Agreement) right and license, valid for the Term, to - (i) distribute, by itself or through one or more tiers of Contractors, - Redistributables as installed, incorporated or integrated, or intended - to be installed, incorporated or integrated into Devices for execution - on the Deployment Platforms, and - (ii) grant sublicenses to Redistributables, as distributed hereunder, for - Customers solely for Customer's internal use and to the extent - necessary in order for the Customers to use the Devices for their - respective intended purposes. +this Agreement), right and license, valid for the Agreement Term, to + (i) distribute, by itself or through its Contractors, Redistributables as + installed, incorporated or integrated into Applications for execution + on the Deployment Platforms, and + (ii) grant perpetual and irrevocable sublicenses to Redistributables, as + distributed hereunder, for Customers solely to the extent necessary in + order for the Customers to use the Applications for their respective + intended purposes. -Right to distribute the Redistributables with Devices as provided herein is -conditional upon the Licensee (i) not having any unpaid License Fees for -Development Licenses owed to The Qt Company, and (ii) having purchased and paid -corresponding Distribution Licenses at the time of distribution of any -Redistributables to Customers. +Right to distribute the Redistributables as part of an Application as provided +herein is not royalty-bearing but is conditional upon the Application having +been created, updated and maintained under a valid and duly paid Development +Licenses. + +3.3. Distribution of Devices + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +worldwide, non-exclusive, non-transferable, revocable (for cause pursuant to +this Agreement), right and license, valid for the Agreement Term, to + (i) distribute, by itself or through one or more tiers of Contractors, + Redistributables as installed, incorporated or integrated, or intended + to be installed, incorporated or integrated into Devices for execution + on the Deployment Platforms, and + (ii) grant perpetual and irrevocable sublicenses to Redistributables, as + distributed hereunder, for Customers solely to the extent necessary in + order for the Customers to use the Devices for their respective + intended purposes. + +Right to distribute the Devices as provided herein is conditional upon + (i) the Devices having been created, updated and maintained under a valid + and duly paid Development Licenses, and + (ii) the Licensee having acquired corresponding Distribution Licenses at + the time of distribution of any Devices to Customers. 3.4. Further Requirements + The licenses granted above in this Section 3 by The Qt Company to Licensee are conditional and subject to Licensee's compliance with the following terms: - (i) Licensee shall not remove or alter any copyright, trademark or other - proprietary rights notice(s) contained in any portion of the Licensed - Software; - (ii) Applications must add primary and substantial functionality to the - Licensed Software so as not to compete with the Licensed Software; - (iii) Applications may not pass on functionality which in any way makes it - possible for others to create software with the Licensed Software; - provided however that Licensee may use the Licensed Software's - scripting and QML ("Qt Quick") functionality solely in order to - enable scripting, themes and styles that augment the functionality - and appearance of the Application(s) without adding primary and - substantial functionality to the Application(s); - (iv) Licensee shall not use Licensed Software in any manner or for any - purpose that infringes, misappropriates or otherwise violates any - Intellectual property or right of any third party, or that violates - any applicable law; - (v) Licensee shall not use The Qt Company's or any of its suppliers' - names, logos, or trademarks to market Applications, except that - Licensee may use "Built with Qt" logo to indicate that - Application(s) was developed using the Licensed Software; - (vi) Licensee shall not distribute, sublicense or disclose source code - of Licensed Software to any third party (provided however that - Licensee may appoint employee(s) of Contractors as Designated - Users to use Licensed Software pursuant to this Agreement). Such - right may be available for the Licensee subject to a separate - software development kit ("SDK") license agreement to be concluded - with The Qt Company; - (vii) Licensee shall not grant the Customers a right to (i) make copies of - the Redistributables except when and to the extent required to use the - Applications and/or Devices for their intended purpose, (ii) modify - the Redistributables or create derivative works thereof, (iii) - decompile, disassemble or otherwise reverse engineer Redistributables, - or (iv) redistribute any copy or portion of the Redistributables to - any third party, except as part of the onward sale of the Device on - which the Redistributables are installed; - (viii) Licensee shall not and shall cause that its Affiliates or - Contractors shall not use Licensed Software in any Prohibited - Combination, unless Licensee has received an advance written - permission from The Qt Company to do so. Absent such written - permission, any and all distribution by the Licensee during the Term - of a hardware device or product a) which incorporate or integrate any - part of Licensed Software or Open Source Qt; or b) where the main - user interface or substantial functionality is provided by software - built with Licensed Software or Open Source Qt or otherwise depends - on the Licensed Software or Open Source Qt, shall be considered to be - Device distribution under this Agreement and shall be dependent on - Licensee's compliance thereof (including but not limited to - obligation to pay applicable License Fees for such distribution). - Notwithstanding what is provided above in this sub-section (viii), - Licensee is entitled to use and combine Licensed Software with any - Permitted Software; - (ix) Licensee shall cause all of its Affiliates and Contractors entitled - to make use of the licenses granted under this Agreement, to be - contractually bound to comply with the relevant terms of this - Agreement and not to use the Licensed Software beyond the terms - hereof and for any purposes other than operating within the scope - of their services for Licensee. Licensee shall be responsible for - any and all actions and omissions of its Affiliates and Contractors - relating to the Licensed Software and use thereof (including but not - limited to payment of all applicable License Fees); - (x) Except when and to the extent explicitly provided in this Section 3, - Licensee shall not transfer, publish, disclose, display or otherwise - make available the Licensed Software; and - (xi) Licensee shall not attempt or enlist a third party to conduct or - attempt to conduct any of the above. + (i) Licensee acknowledges that The Qt Company has separate products of + Licensed Software for the purpose of Applications and Devices + respectively, where development and distribution of Devices is only + allowed using the correct designated product. Licensee shall make sure + and bear the burden of proof that Licensee is using a correct product + of Licensed Software entitling Licensee to development and distribution + of Devices; + (ii) Licensee shall not remove or alter any copyright, trademark or other + proprietary rights notice(s) contained in any portion of the Licensed + Software; + (iii) Applications must add primary and substantial functionality to the + Licensed Software so as not to compete with the Licensed Software; + (iv) Applications may not pass on functionality which in any way makes it + possible for others to create software with the Licensed Software; + provided however that Licensee may use the Licensed Software's + scripting and QML ("Qt Quick") functionality solely in order to enable + scripting, themes and styles that augment the functionality and + appearance of the Application(s) without adding primary and substantial + functionality to the Application(s); + (v) Licensee shall not use Licensed Software in any manner or for any + purpose that infringes, misappropriates or otherwise violates any + Intellectual property or right of any third party, or that violates any + applicable law; + (vi) Licensee shall not use The Qt Company's or any of its suppliers' + names, logos, or trademarks to market Applications, except that + Licensee may use "Built with Qt" logo to indicate that Application(s) + or Device(s) was developed using the Licensed Software; + (vii) Licensee shall not distribute, sublicense or disclose source code of + Licensed Software to any third party (provided however that Licensee + may appoint employee(s) of Contractors and Affiliates as Designated + Users to use Licensed Software pursuant to this Agreement). Such right + may be available for the Licensee subject to a separate software + development kit ("SDK") license agreement to be concluded with The Qt + Company; + (viii) Licensee shall not grant the Customers a right to (a) make copies of + the Redistributables except when and to the extent required to use the + Applications and/or Devices for their intended purpose, (b) modify the + Redistributables or create derivative works thereof, (c) decompile, + disassemble or otherwise reverse engineer Redistributables, or (d) + redistribute any copy or portion of the Redistributables to any third + party, except as part of the onward sale of the Application or Device + on which the Redistributables are installed; + (ix) Licensee shall not and shall cause that its Affiliates or Contractors + shall not use Licensed Software in any Prohibited Combination, unless + Licensee has received an advance written permission from The Qt Company + to do so. Absent such written permission, any and all distribution by + the Licensee during the Agreement Term of a hardware device or product + a) which incorporate or integrate any part of Licensed Software or Open + Source Qt; or b) where substantial functionality is provided by + software built with Licensed Software or Open Source Qt or otherwise + depends on the Licensed Software or Open Source Qt, shall be considered + to be Device distribution under this Agreement and shall be dependent + on Licensee's compliance thereof (including but not limited to + obligation to pay applicable License Fees for such distribution). + Notwithstanding what is provided above in this sub-section (ix), + Licensee is entitled to use and combine Licensed Software with any + Permitted Software; + (x) Licensee shall cause all of its Affiliates, Contractors and Customers + entitled to make use of the licenses granted under this Agreement, to + be contractually bound to comply with the relevant terms of this + Agreement and not to use the Licensed Software beyond the terms hereof + and for any purposes other than operating within the scope of their + services for Licensee. Licensee shall be responsible for any and all + actions and omissions of its Affiliates and Contractors relating to the + Licensed Software and use thereof (including but not limited to payment + of all applicable License Fees); + (xi) Except when and to the extent explicitly provided in this Section 3, + Licensee shall not transfer, publish, disclose, display or otherwise + make available the Licensed Software; and + (xii) Licensee shall not attempt or enlist a third party to conduct or + attempt to conduct any of the above. Above terms shall not be applicable if and to the extent they conflict with any mandatory provisions of any applicable laws. + Any use of Licensed Software beyond the provisions of this Agreement is strictly prohibited and requires an additional license from The Qt Company. +3.5 QA Tools License + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +worldwide, non-exclusive, non-transferable license, valid for the Development +License Term, to use the QA Tools for Licensee's internal business purposes in +the manner provided below and in Appendix 1 hereto. + +Licensee may modify the QA Tools except for altering or removing any details of +ownership, copyright, trademark or other property right connected with the QA +Tools. + +Licensee shall not distribute the QA Tools or any part thereof, modified or +unmodified, separately or as part of any software package, Application or +Device. + +Upon expiry of the initially agreed Development License Term, the respective +Development License Term shall be automatically extended to one or more Renewal +Term(s), unless and until either Party notifies the other Party in writing, or +any other method acceptable to The Qt Company (it being specifically +acknowledged and understood that verbal notification is explicitly deemed +inadequate in all circumstances), that it does not wish to continue the +Development License Term, such notification to be provided to the other Party +no less than thirty (30) days before expiry of the respective Development +License Term. The Qt Company shall, in good time before the due date for the +above notification, remind the Licensee on the coming Renewal Term. Unless +otherwise agreed between the Parties, Renewal Term shall be 12 months. + +Any such Renewal Term shall be subject to License Fees agreed between the +Parties or, if no advance agreement exists, subject to The Qt Company's +standard list pricing applicable at the commencement date of any such +Renewal Term. + +3.6 Evaluation License + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +worldwide, non-exclusive, non-transferable license, valid for the Evaluation +License Term to use the Licensed Software solely for the Licensee's internal +use to evaluate and determine whether the Licensed Software meets Licensee's +business requirements, specifically excluding any commercial use of the +Licensed Software or any derived work thereof. + +Upon the expiry of the Evaluation License Term, Licensee must either +discontinue use of the relevant Licensed Software or acquire a commercial +Development License or QA Tools License specified herein. + 4. THIRD-PARTY SOFTWARE -The Licensed Software may provide links to third party libraries or code -(collectively "Third-Party Software") to implement various functions. -Third-Party Software does not comprise part of the Licensed Software. In some -cases, access to Third-Party Software may be included with the Licensed -Software. Such Third-Party Software will be listed in the ".../src/3rdparty" +The Licensed Software may provide links or access to third party libraries or +code (collectively "Third-Party Software") to implement various functions. +Third-Party Software does not, however, comprise part of the Licensed Software, +but is provided to Licensee complimentary and use thereof is discretionary for +the Licensee. Third-Party Software will be listed in the ".../src/3rdparty" source tree delivered with the Licensed Software or documented in the Licensed Software, as such may be amended from time to time. Licensee acknowledges that use or distribution of Third-Party Software is in all respects subject to @@ -464,68 +527,66 @@ applicable license terms of applicable third-party right holders. 5. PRE-RELEASE CODE The Licensed Software may contain pre-release code and functionality, or sample -code marked or otherwise stated with appropriate designation such as "Technology -Preview", "Alpha", "Beta", "Sample" etc. ("Pre-Release Code"). +code marked or otherwise stated with appropriate designation such as +"Technology Preview", "Alpha", "Beta", "Sample", "Example" etc. +("Pre-Release Code"). -Such Pre-Release Code may be present complimentary for the Licensee, in order to -provide experimental support or information for new platforms or preliminary -versions of one or more new functionalities or for other similar reasons. The -Pre-Release Code may not be at the level of performance and compatibility of a -final, generally available, product offering. The Pre-Release Code may not -operate correctly, may contain errors and may be substantially modified by The -Qt Company prior to the first commercial product release, if any. The Qt -Company is under no obligation to make Pre-Release Code commercially available, -or provide any Support or Updates relating thereto. The Qt Company assumes no -liability whatsoever regarding any Pre-Release Code, but any use thereof is -exclusively at Licensee's own risk and expense. +Such Pre-Release Code may be present complimentary for the Licensee, in order +to provide experimental support or information for new platforms or +preliminary versions of one or more new functionalities or for other similar +reasons. The Pre-Release Code may not be at the level of performance and +compatibility of a final, generally available, product offering. The +Pre-Release Code may not operate correctly, may contain errors and may be +substantially modified by The Qt Company prior to the first commercial +product release, if any. The Qt Company is under no obligation to make +Pre-Release Code commercially available, or provide any Support or Updates +relating thereto. The Qt Company assumes no liability whatsoever regarding +any Pre-Release Code, but any use thereof is exclusively at Licensee's own risk +and expense. -For clarity, unless Licensed Software specifies different license terms for -the respective Pre-Release Code, the Licensee is entitled to use such -pre-release code pursuant to Section 3, just like other Licensed Software, -provided however that in the event Add-on Products are included and available -as such Pre-Release Code, Licensee's right to use such Add-on Products is -nevertheless subject to and conditional upon conclusion of separate agreement -with The Qt Company. +For clarity, unless Licensed Software specifies different license terms for the +respective Pre-Release Code, the Licensee is entitled to use such pre-release +code pursuant to Section 3, just like other Licensed Software. 6. LIMITED WARRANTY AND WARRANTY DISCLAIMER -The Qt Company hereby represents and warrants that it has the power and +The Qt Company hereby represents and warrants that (i) it has the power and authority to grant the rights and licenses granted to Licensee under this -Agreement. +Agreement, and (ii) Licensed Software will operate materially in accordance +with its specifications. -Except as set forth above, the Licensed Software is licensed to Licensee -"as is" and Licensee's exclusive remedy and The Qt Company's entire liability -for errors in the Licensed Software shall be limited, at The Qt Company's -option, to correction of the error, replacement of the Licensed Software or -return of the applicable fees paid for the defective Licensed Software for -the time period during which the License is not able to utilize the Licensed -Software under the terms of this Agreement. +Except as set forth above, the Licensed Software is licensed to Licensee "as +is" and Licensee's exclusive remedy and The Qt Company's entire liability for +errors in the Licensed Software shall be limited, at The Qt Company's option, +to correction of the error, replacement of the Licensed Software or return of +the applicable fees paid for the defective Licensed Software for the time +period during which the License is not able to utilize the Licensed Software +under the terms of this Agreement. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND -NON-INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES -NOT WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE'S REQUIREMENTS OR -THAT IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF -WILL BE UNINTERRUPTED. +NON-INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT +WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE'S REQUIREMENTS OR THAT +IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE +UNINTERRUPTED. -7. INDEMNIFICATION AND LIMITATION OF LIABILITY +7. LIMITATION OF LIABILITY -7.1. Limitation of Liability -EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. -EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO -EVENT SHALL EITHER PARTY'S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED -THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM LICENSEE -DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT -RESULTING IN SUCH LIABILITY. +EVENT SHALL EITHER PARTY'S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT +EXCEED THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY BY LICENSEE +DURING THE DEVELOPMENT LICENSE TERM DURING WHICH THE EVENT RESULTING IN SUCH +LIABILITY OCCURRED. THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE @@ -533,55 +594,54 @@ LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS AGREEMENT. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS AGREEMENT, LICENSEE SHALL -ALWAYS BE LIABLE TO PAY THE APPLICABLE LICENSE FEES CORRESPONDING TO ITS ACTUAL -USE OF LICENSED SOFTWARE. +ALWAYS BE LIABLE TO PAY THE APPLICABLE LICENSE FEES CORRESPONDING TO ITS +ACTUAL USE OF LICENSED SOFTWARE. 8. SUPPORT, UPDATES AND ONLINE SERVICES Upon due payment of the agreed License Fees the Licensee will be eligible to -receive Support and Updates and to use the Online Services during the License -Term, provided, however, that in the event the License Term is longer than 36 -months, the initial payment includes Support for only the first 12 months, -unless the Parties specifically otherwise agree. +receive Support and Updates and to use the Online Services during the agreed +Development License Term or other agreed fixed time period. Support is +provided according to agreed support level and subject to applicable +requirements and restrictions, as specified in the Support Terms. -Unless otherwise decided by The Company at its free and absolute discretion, +Unless otherwise decided by The Qt Company at its free and absolute discretion, Upgrades will not be included in the Support but may be available subject to additional fees. -From time to time The Qt Company may change the Support terms, provided that -during the respective ongoing License Term the level of Support provided by The -Qt Company may not be reduced without the consent of the Licensee. +From time to time The Qt Company may change the Support Terms, provided that +during the respective ongoing Support period the level of Support may not be +reduced without the consent of the Licensee. Unless otherwise agreed, The Qt Company shall not be responsible for providing any service or support to Customers. 9. CONFIDENTIALITY -Each Party acknowledges that during the Term of this Agreement each Party may -receive information about the other Party's business, business methods, -business plans, customers, business relations, technology, and other -information, including the terms of this Agreement, that is confidential and -of great value to the other Party, and the value of which would be -significantly reduced if disclosed to third parties ("Confidential -Information"). Accordingly, when a Party (the "Receiving Party") receives -Confidential Information from the other Party (the "Disclosing Party"), the -Receiving Party shall only disclose such information to employees and -Contractors on a need to know basis, and shall cause its employees and -employees of its Affiliates to: (i) maintain any and all Confidential -Information in confidence; (ii) not disclose the Confidential Information to -a third party without the Disclosing Party's prior written approval; and (iii) -not, directly or indirectly, use the Confidential Information for any purpose -other than for exercising its rights and fulfilling its responsibilities -pursuant to this Agreement. Each Party shall take reasonable measures to -protect the Confidential Information of the other Party, which measures shall -not be less than the measures taken by such Party to protect its own -confidential and proprietary information. +Each Party acknowledges that during the Agreement Term each Party may receive +information about the other Party's business, business methods, business plans, +customers, business relations, technology, and other information, including the +terms of this Agreement, that is confidential and of great value to the other +Party, and the value of which would be significantly reduced if disclosed to +third parties ("Confidential Information"). Accordingly, when a Party (the +"Receiving Party") receives Confidential Information from the other Party (the +"Disclosing Party"), the Receiving Party shall only disclose such information +to employees and Contractors on a need to know basis, and shall cause its +employees and employees of its Affiliates to: (i) maintain any and all +Confidential Information in confidence; (ii) not disclose the Confidential +Information to a third party without the Disclosing Party's prior written +approval; and (iii) not, directly or indirectly, use the Confidential +Information for any purpose other than for exercising its rights and +fulfilling its responsibilities pursuant to this Agreement. Each Party shall +take reasonable measures to protect the Confidential Information of the other +Party, which measures shall not be less than the measures taken by such Party +to protect its own confidential and proprietary information. Obligation of confidentiality shall not apply to information that (i) is or becomes generally known to the public through no act or omission of the -Receiving Party; (ii) was in the Receiving Party's lawful possession prior -to the disclosure hereunder and was not subject to limitations on disclosure -or use; (iii) is developed independently by employees or Contractors of the +Receiving Party; (ii) was in the Receiving Party's lawful possession prior to +the disclosure hereunder and was not subject to limitations on disclosure or +use; (iii) is developed independently by employees or Contractors of the Receiving Party or other persons working for the Receiving Party who have not had access to the Confidential Information of the Disclosing Party, as proven by the written records of the Receiving Party; (iv) is lawfully disclosed to @@ -595,721 +655,1323 @@ Information to the minimum extent necessary. The obligations under this Section 9 shall continue to remain in force for a period of five (5) years after the last disclosure, and, with respect to trade -secrets, for so long as such trade secrets are protected under applicable -trade secret laws. +secrets, for so long as such trade secrets are protected under applicable trade +secret laws. 10. FEES, DELIVERY AND PAYMENT 10.1. License Fees -License Fees are described in The Qt Company's standard price list, quote or -Purchase Order confirmation or in an appendix hereto, as the case may be. -The License Fees shall not be refunded or claimed as a credit in any event or -for any reason whatsoever. +License Fees are described in The Qt Company's standard price list, quote or +Purchase Order confirmation or in an Appendix 2 hereto, as the case may be. + +Unless otherwise expressly provided in this Agreement, the License Fees shall +not be refunded or claimed as a credit in any event or for any reason +whatsoever. 10.2. Ordering Licenses -Licensee may purchase Development Licenses and Distribution Licenses pursuant -to agreed pricing terms or, if no specific pricing terms have been agreed -upon, at The Qt Company's standard pricing terms applicable at the time of -purchase. Unless specifically otherwise provided, any pricing terms -referenced in this Agreement shall be valid for twelve (12) months from the -date of this Agreement. + +Licensee may purchase Development Licenses, Distribution Licenses and QA Tools +Licenses pursuant to agreed pricing terms or, if no specific pricing terms have +been agreed upon, at The Qt Company's standard pricing terms applicable at the +time of purchase. + +Unless expressly otherwise agreed, any price or other term quoted to the +Licensee or specified herein shall only be valid for the thirty (30) days from +the effective date of this Agreement, Appendix 2 or the date of the quote, as +applicable. Licensee shall submit all purchase orders for Development Licenses and -Distribution Licenses to The Qt Company by email or any other method -acceptable to The Qt Company (each such order is referred to herein as a -"Purchase Order") for confirmation, whereupon the Purchase Order shall -become binding between the Parties. +Distribution Licenses to The Qt Company by email or any other method acceptable +to The Qt Company (each such order is referred to herein as a "Purchase Order") +for confirmation, whereupon the Purchase Order shall become binding between the +Parties. + +Licensee acknowledges and agrees that all Purchase Orders for Licensed Software +the Licensee makes during the Agreement Term shall be governed exclusively +under the terms of this Agreement. 10.3. Distribution License Packs + Unless otherwise agreed, Distribution Licenses shall be purchased by way of Distribution License Packs. -Upon due payment of the ordered Distribution License Pack(s), the Licensee -will have an account of Distribution Licenses available for distributing -the Redistributables in accordance with this Agreement. +Upon due payment of the ordered Distribution License Pack(s), the Licensee will +have an account of Distribution Licenses available for distributing the +Redistributables in accordance with this Agreement. Each time Licensee distributes a copy of Redistributables, then one -Distribution License is used, and Licensee's account of available -Distribution Licenses is decreased accordingly. +Distribution License is used, and Licensee's account of available Distribution +Licenses is decreased accordingly. -Licensee may distribute copies of the Redistributables so long as Licensee -has Distribution Licenses remaining on its account. +Licensee may distribute copies of the Redistributables so long as Licensee has +Distribution Licenses remaining on its account. 10.4. Payment Terms + License Fees and any other charges under this Agreement shall be paid by -Licensee no later than thirty (30) days from the date of the applicable -invoice from The Qt Company. +Licensee no later than thirty (30) days from the date of the applicable invoice +from The Qt Company. The Qt Company will submit an invoice to Licensee after the date of this Agreement and/or after The Qt Company receives a Purchase Order from Licensee. A late payment charge of the lower of (a) one percent per month; or (b) the interest rate stipulated by applicable law, shall be charged on any unpaid -balances that remain past due. +balances that remain past due and which have not been disputed by the Licensee +in good faith. 10.5. Taxes + All License Fees and other charges payable hereunder are gross amounts but -exclusive of any value added tax, use tax, sales tax, withholding tax and -other taxes, duties or tariffs ("Taxes") levied directly for the sale, -delivery or use of Licensed Software hereunder pursuant to any applicable -law. Such applicable Taxes shall be paid by Licensee to The Qt Company, or, -where applicable, in lieu of payment of such Taxes to The Qt Company, -Licensee shall provide an exemption certificate to The Qt Company and any -applicable authority. +exclusive of any value added tax, use tax, sales tax, withholding tax and other +taxes, duties or tariffs ("Taxes") levied directly for the sale, delivery or +use of Licensed Software hereunder pursuant to any applicable law. Such +applicable Taxes shall be paid by Licensee to The Qt Company, or, where +applicable, in lieu of payment of such Taxes to The Qt Company, Licensee shall +provide an exemption certificate to The Qt Company and any applicable +authority. 11. RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS 11.1. Licensee's Record-keeping -Licensee shall at all times during the Term of this Agreement and for a -period of seven (7) years thereafter maintain Licensee's Records in an -accurate and up-to-date form. Licensee's Records shall be adequate to -reasonably enable The Qt Company to determine Licensee's compliance with -the provisions of this Agreement. The records shall conform to general -good accounting practices. -Licensee shall, within thirty (30) days from receiving The Qt Company's -request to that effect, deliver to The Qt Company a report based on -Licensee's Records, such report to contain information, in sufficient -detail, on (i) number and identity of users working with Licensed Software -or Open Source Qt, (ii) copies of Redistributables distributed by Licensee -during the most recent calendar quarter and/or any other term specified by -The Qt Company, (iii) number of undistributed copies of Redistributables -and corresponding number of unused Distribution Licenses remaining on -Licensee's account, and (iv) any other information as The Qt Company may -reasonably require from time to time. +Licensee shall at all times during the Agreement Term and for a period of two +(2) years thereafter maintain Licensee's Records in an accurate and up-to-date +form. Licensee's Records shall be adequate to reasonably enable The Qt Company +to determine Licensee's compliance with the provisions of this Agreement. The +records shall conform to general good accounting practices. + +Licensee shall, within thirty (30) days from receiving The Qt Company's request +to that effect, deliver to The Qt Company a report based on Licensee's Records, +such report to contain information, in sufficient detail, on (i) number and +identity of users working with Licensed Software or Open Source Qt, (ii) copies +of Redistributables distributed by Licensee during the most recent calendar +quarter and/or any other term specified by The Qt Company, , and (iii) any +other information pertaining to Licensee's compliance with the terms of this +Agreement (like e.g. information on products and/or projects relating to use of +Distribution Licenses), as The Qt Company may reasonably require from time to +time. 11.2. The Qt Company's Audit Rights -The Qt Company or an independent auditor acting on behalf of The Qt -Company's, may, upon at least five (5) business days' prior written -notice and at its expense, audit Licensee with respect to the Licensee's -use of the Licensed Software, but not more frequently than once during -each 6-month period. Such audit may be conducted by mail, electronic means -or through an in-person visit to Licensee's place of business. Any such -in-person audit shall be conducted during regular business hours at -Licensee's facilities and shall not unreasonably interfere with Licensee's -business activities. The Qt Company or the independent auditor acting on -behalf of The Qt Company shall be entitled to inspect Licensee's Records -and conduct necessary interviews of Licensee's relevant employees and -Contractors. All such Licensee's Records and use thereof shall be subject -to an obligation of confidentiality under this Agreement. -If an audit reveals that Licensee is using the Licensed Software beyond -scope of the licenses Licensee has paid for, Licensee agrees to pay The Qt -Company any amounts owed for such unauthorized use within 30 days from -receipt of the corresponding invoice from The Qt Company. +The Qt Company or an independent auditor acting on behalf of The Qt Company's, +may, upon at least thirty (30) days' prior written notice and at its expense, +audit Licensee with respect to the Licensee's use of the Licensed Software, but +not more frequently than once during each 6-month period. Such audit may be +conducted by mail, electronic means or through an in-person visit to Licensee's +place of business. Any possible in-person audit shall be conducted during +regular business hours at Licensee's facilities and shall not unreasonably +interfere with Licensee's business activities and shall be limited in scope to +verify Licensee's compliance with the terms of this Agreement. The Qt Company +or the independent auditor acting on behalf of The Qt Company shall be entitled +to inspect Licensee's Records and conduct necessary interviews of Licensee's +relevant employees and Contractors. All such Licensee's Records and use thereof +shall be subject to an obligation of confidentiality under this Agreement. -In addition, in the event the audit reveals a material violation of the -terms of this Agreement (without limitation, either (i) underpayment of -more than 10 % of License Fees or 10,000 euros (whichever is more) or -(ii) distribution of products, which include or result from Prohibited -Combination, shall be deemed a material violation for purposes of this -section), then the Licensee shall pay The Qt Company's reasonable cost of -conducting such audit. +If an audit reveals that Licensee is using the Licensed Software beyond scope +of the licenses Licensee has paid for, Licensee shall pay to The Qt Company any +amounts owed for such unauthorized use within 30 days from receipt of the +corresponding invoice from The Qt Company. + +In addition, in the event the audit reveals a material violation of the terms +of this Agreement (without limitation, either (i) underpayment of more than 10 +% of License Fees or 10,000 euros (whichever is more) or (ii) distribution of +products, which include or result from Prohibited Combination, shall be deemed +a material violation for purposes of this section), then the Licensee shall +pay The Qt Company's reasonable cost of conducting such audit. 12. TERM AND TERMINATION -12.1. Agreement Term -This Agreement shall enter into force upon due acceptance by both -Parties and remain in force for as long as there is any Development -License(s) purchased under this Agreement in force ("Term"), unless and -until terminated pursuant to the terms of this Section 12. -12.2. Termination and suspension of rights -Either Party shall have the right to terminate this Agreement upon thirty -(30) days prior written notice if the other Party commits a material -breach of any obligation of this Agreement and fails to remedy such breach -within such notice period. +12.1. Agreement Term + +This Agreement shall enter into force upon due acceptance by both Parties and +remain in force until terminated pursuant to the terms of this Section 12 +("Agreement Term"). + +12.2. Termination for breach and suspension of rights +Either Party shall have the right to terminate this Agreement upon thirty (30) +days prior written notice if the other Party commits a material breach of any +obligation of this Agreement and fails to remedy such breach within such notice +period. Instead of termination, The Qt Company shall have the right to suspend or -withhold grants of all rights to the Licensed Software hereunder, -including but not limited to the Development Licenses, Distribution -License, and Support, should Licensee fail to make payment in timely -fashion or otherwise violates or is reasonably suspected to violate its -obligations or terms of this Agreement, and where such violation or breach -is not cured within five (5) business days following The Qt Company's -written notice thereof. +withhold grants of all rights to the Licensed Software hereunder, including but +not limited to the Development Licenses, Distribution License, and Support, +should Licensee fail to make payment in timely fashion or otherwise violates or +is reasonably suspected to violate its obligations or terms of this Agreement, +and where such violation or breach is not cured within ten (10) business days +following The Qt Company's written notice thereof. -12.3. Mutual Right to Terminate -Either Party shall have the right to terminate this Agreement immediately -upon written notice in the event that the other Party becomes insolvent, -files for any form of bankruptcy, makes any assignment for the benefit of -creditors, has a receiver, administrative receiver or officer appointed -over the whole or a substantial part of its assets, ceases to conduct -business, or an act equivalent to any of the above occurs under the laws -of the jurisdiction of the other Party. +12.3. Termination for insolvency + +Either Party shall have the right to terminate this Agreement immediately upon +written notice in the event that the other Party becomes insolvent, files for +any form of bankruptcy, makes any assignment for the benefit of creditors, has +a receiver, administrative receiver or officer appointed over the whole or a +substantial part of its assets, ceases to conduct business, or an act +equivalent to any of the above occurs under the laws of the jurisdiction of the +other Party. 12.4. Parties' Rights and Duties upon Termination -Upon expiry or termination of the Agreement, Licensee shall cease and -shall cause all Designated Users (including those of its Affiliates' and -Contractors') to cease using the Licensed Software and distribution of the -Redistributables under this Agreement. -Notwithstanding the above, in the event the Agreement expires or is terminated: - (i) as a result of The Qt Company choosing not to renew the Development - License(s) as set forth in Section 3.1, and where such decision of - non-renewal is not due to any ongoing breach or alleged breach (as - reasonably determined by The Qt Company) by Licensee of the terms of this - Agreement or any applicable license terms of Open Source Qt, then all valid - licenses possessed by the Licensee at such date shall be extended to be - valid in perpetuity under the terms of this Agreement and Licensee is - entitled to purchase additional licenses as set forth in Section 10.2; or - (ii) for reason other than by The Qt Company pursuant to item (i) above - or pursuant to Section 12.2, then the Licensee is entitled, for a - period of six (6) months after the effective date of termination, - to continue distribution of Devices under the Distribution Licenses - paid but unused at such effective date of termination. +Upon expiry or termination of the Agreement, Licensee shall cease and shall +cause all Designated Users (including those of its Affiliates' and +Contractors') to cease using the Licensed Software under this Agreement. For +clarity, a Development License of a Designated User or a QA Tools License, and +all rights relating thereto, shall always terminate at the expiry of the +respective Development License Term, even if the Agreement continues to remain +in force. -Upon any such termination the Licensee shall destroy or return to The Qt -Company all copies of the Licensed Software and all related materials and will -certify the same to The Qt Company upon its request, provided however that -Licensee may retain and exploit such copies of the Licensed Software as it may -reasonably require in providing continued support to Customers. +Upon such termination the Licensee shall destroy or return to The Qt Company +all copies of the Licensed Software and all related materials and will certify +the same by Licensee's duly authorized officer to The Qt Company upon its +request, provided however that Licensee may retain and exploit such copies of +the Licensed Software as it may reasonably require in providing continued +support to Customers. + +Except when this Agreement is terminated by The Qt Company due to Licensee's +material breach as set forth in Section 12.2, the Licensee may continue +distribution of Applications and Devices under the terms of this Agreement +despite the termination of this Agreement. In such event the terms hereof will +continue to be applicable and govern any such distribution of Applications and +Devices beyond the expiry or termination of this Agreement. In case of +termination by The Qt Company due to Licensee's material breach, Licensee must +cease any distribution of Applications and Devices at the date of termination +of this Agreement. Expiry or termination of this Agreement for any reason whatsoever shall not relieve Licensee of its obligation to pay any License Fees accrued or payable -to The Qt Company prior to the effective date of termination, and Licensee -shall immediately pay to The Qt Company all such fees upon the effective date -of termination. Termination of this Agreement shall not affect any rights of -Customers to continue use of Applications and Devices (and therein -incorporated Redistributables). +to The Qt Company prior to the effective date of termination, and Licensee pay +to The Qt Company all such fees within 30 days from the effective date of +termination of this Agreement. -12.5. Extension in case of bankruptcy -In the event The Qt Company is declared bankrupt under a final, -non-cancellable decision by relevant court of law, and this Agreement is not, -at the date of expiry of the Development License(s) pursuant to Section 3.1, -assigned to party, who has assumed The Qt Company's position as a legitimate -licensor of Licensed Software under this Agreement, then all valid licenses -possessed by the Licensee at such date of expiry, and which the Licensee has -not notified for expiry, shall be extended to be valid in perpetuity under the -terms of this Agreement. +Termination of this Agreement shall not affect any rights of Customers to +continue use of Applications and Devices (and therein incorporated +Redistributables). + +12.5. Extension of Rights under Special Circumstances + +In the event of The Qt Company choosing not to renew the Development License(s) +or QA Tools Licenses, as set forth in Section 3.1 and 3.5 respectively, and +where such decision of non-renewal is not due to any ongoing breach or alleged +breach (as reasonably determined by The Qt Company) by Licensee of the terms of +this Agreement or any applicable license terms of Open Source Qt, then all +valid and affected Development Licenses and QA Tools licenses possessed by the +Licensee at such date shall be extended to be valid in perpetuity under the +terms of this Agreement and Licensee is entitled to purchase additional +licenses as set forth in Section 10.2. + +In the event The Qt Company is declared bankrupt under a final, non-cancellable +decision by relevant court of law, and this Agreement is not, at the date of +expiry of the Development License(s) or QA Tools Licenses, assigned to party, +who has assumed The Qt Company's position as a legitimate licensor of Licensed +Software under this Agreement, then all valid Development Licenses and QA Tools +Licenses possessed by the Licensee at such date of expiry, and which the +Licensee has not notified for expiry, shall be extended to be valid in +perpetuity under the terms of this Agreement. + +For clarity, in case of an extension under this Section 12.5, any such +extension shall not apply to The Qt Company's Support obligations, but Support +shall be provided only up until the end of the respective fixed Development +License Term regardless of the extension of relevant Development License or QA +Tools License, unless otherwise agreed between the Parties. 13. GOVERNING LAW AND LEGAL VENUE In the event this Agreement is in the name of The Qt Company Inc., a Delaware Corporation, then: - (i) this Agreement shall be construed and interpreted in accordance with - the laws of the State of California, USA, excluding its choice of - law provisions; - (ii) the United Nations Convention on Contracts for the International - Sale of Goods will not apply to this Agreement; and - (iii) any dispute, claim or controversy arising out of or relating to this - Agreement or the breach, termination, enforcement, interpretation or - validity thereof, including the determination of the scope or - applicability of this Agreement to arbitrate, shall be determined by - arbitration in San Francisco, USA, before one arbitrator. The - arbitration shall be administered by JAMS pursuant to JAMS' - Streamlined Arbitration Rules and Procedures. Judgment on the Award - may be entered in any court having jurisdiction. This Section shall - not preclude parties from seeking provisional remedies in aid of - arbitration from a court of appropriate jurisdiction. + (i) this Agreement shall be construed and interpreted in accordance with + the laws of the State of California, USA, excluding its choice of law + provisions; + (ii) the United Nations Convention on Contracts for the International Sale + of Goods will not apply to this Agreement; and + (iii) any dispute, claim or controversy arising out of or relating to this + Agreement or the breach, termination, enforcement, interpretation or + validity thereof, including the determination of the scope or + applicability of this Agreement to arbitrate, shall be determined by + arbitration in San Francisco, USA, before one arbitrator. The + arbitration shall be administered by JAMS pursuant to JAMS' Streamlined + Arbitration Rules and Procedures. Judgment on the Award may be entered + in any court having jurisdiction. This Section shall not preclude + parties from seeking provisional remedies in aid of arbitration from a + court of appropriate jurisdiction. In the event this Agreement is in the name of The Qt Company Ltd., a Finnish Company, then: - (i) this Agreement shall be construed and interpreted in accordance with - the laws of Finland, excluding its choice of law provisions; - (ii) the United Nations Convention on Contracts for the International - Sale of Goods will not apply to this Agreement; and - (iii) any disputes, controversy or claim arising out of or relating to - this Agreement, or the breach, termination or validity thereof shall - be finally settled by arbitration in accordance with the Arbitration - Rules of Finland Chamber of Commerce. The arbitration tribunal shall - consist of one (1), or if either Party so requires, of three (3), - arbitrators. The award shall be final and binding and enforceable in - any court of competent jurisdiction. The arbitration shall be held - in Helsinki, Finland and the process shall be conducted in the - English language. This Section shall not preclude parties from - seeking provisional remedies in aid of arbitration from a court of - appropriate jurisdiction. + (i) this Agreement shall be construed and interpreted in accordance with + the laws of Finland, excluding its choice of law provisions; + (ii) the United Nations Convention on Contracts for the International Sale + of Goods will not apply to this Agreement; and + (iii) any disputes, controversy or claim arising out of or relating to this + Agreement, or the breach, termination or validity thereof shall be + finally settled by arbitration in accordance with the Arbitration Rules + of International Chamber of Commerce. The arbitration tribunal shall + consist of one (1), or if either Party so requires, of three (3), + arbitrators. The award shall be final and binding and enforceable in + any court of competent jurisdiction. The arbitration shall be held in + Helsinki, Finland and the process shall be conducted in the English + language. This Section shall not preclude parties from seeking + provisional remedies in aid of arbitration from a court of appropriate + jurisdiction. 14. GENERAL PROVISIONS 14.1. No Assignment + Except in the case of a merger or sale of substantially all of its corporate -assets, Licensee shall not be entitled to assign or transfer all or any of -its rights, benefits and obligations under this Agreement without the prior -written consent of The Qt Company, which shall not be unreasonably withheld -or delayed. The Qt Company shall be entitled to freely assign or transfer any -of its rights, benefits or obligations under this Agreement. +assets, Licensee shall not be entitled to assign or transfer all or any of its +rights, benefits and obligations under this Agreement without the prior written +consent of The Qt Company, which shall not be unreasonably withheld or delayed. +The Qt Company shall be entitled to freely assign or transfer any of its +rights, benefits or obligations under this Agreement. 14.2. No Third-Party Representations + Licensee shall make no representations or warranties concerning the Licensed Software on behalf of The Qt Company. Any representation or warranty Licensee -makes or purports to make on The Qt Company's behalf shall be void as to The -Qt Company. +makes or purports to make on The Qt Company's behalf shall be void as to +The Qt Company. 14.3. Surviving Sections + Any terms and conditions that by their nature or otherwise reasonably should survive termination of this Agreement shall so be deemed to survive. Such sections include especially the following: 1, 2, 6, 7, 9, 11, 12.4, 13 and 14. 14.4. Entire Agreement -This Agreement, the exhibits hereto, the License Certificate and any -applicable Purchase Order accepted by The Qt Company constitute the complete -agreement between the Parties and supersedes all prior or contemporaneous -discussions, representations, and proposals, written or oral, with respect -to the subject matters discussed herein. + +This Agreement, the Appendices hereto, the License Certificate and any +applicable quote and Purchase Order accepted by The Qt Company constitute the +complete agreement between the Parties and supersedes all prior or +contemporaneous discussions, representations, and proposals, written or oral, +with respect to the subject matters discussed herein. In the event of any conflict or inconsistency between this Agreement and any -Purchase Order, the terms of this Agreement will prevail over the terms of -the Purchase Order with respect to such conflict or inconsistency. +Purchase Order, the terms of this Agreement will prevail over the terms of the +Purchase Order with respect to such conflict or inconsistency. -Parties specifically acknowledge and agree that this Agreement prevails -over any click-to-accept or similar agreements the Designated Users may -need to accept online upon download of the Licensed Software, as may be -required by The Qt Company's applicable processes relating to Licensed -Software. +Parties specifically acknowledge and agree that this Agreement prevails over +any click-to-accept or similar agreements the Designated Users may need to +accept online upon download of the Licensed Software, as may be required by +The Qt Company's applicable processes relating to Licensed Software. 14.5. Modifications + No modification of this Agreement shall be effective unless contained in a writing executed by an authorized representative of each Party. No term or condition contained in Licensee's Purchase Order ("Deviating Terms") shall apply unless The Qt Company has expressly agreed such Deviating Terms in -writing. Unless and to the extent expressly agreed by The Qt Company, any -such Deviating Terms shall be deemed void and with no legal effect. For -clarity, delivery of the Licensed Software following the receipt of the -Purchase Order including Deviating Terms shall not constitute acceptance of -such Deviating Terms." +writing. Unless and to the extent expressly agreed by The Qt Company, any such +Deviating Terms shall be deemed void and with no legal effect. For clarity, +delivery of the Licensed Software following the receipt of the Purchase Order +including Deviating Terms shall not constitute acceptance of such Deviating +Terms. 14.6. Force Majeure -Except for the payment obligations hereunder, neither Party shall be liable -to the other for any delay or non-performance of its obligations hereunder -in the event and to the extent that such delay or non-performance is due to -an event of act of God, terrorist attack or other similar unforeseeable -catastrophic event that prevents either Party for fulfilling its -obligations under this Agreement and which such Party cannot avoid or -circumvent ("Force Majeure Event"). If the Force Majeure Event results in -a delay or non-performance of a Party for a period of three (3) months or -longer, then either Party shall have the right to terminate this Agreement -with immediate effect without any liability (except for the obligations of -payment arising prior to the event of Force Majeure) towards the other -Party. + +Except for the payment obligations hereunder, neither Party shall be liable to +the other for any delay or non-performance of its obligations hereunder in the +event and to the extent that such delay or non-performance is due to an event +of act of God, terrorist attack or other similar unforeseeable catastrophic +event that prevents either Party for fulfilling its obligations under this +Agreement and which such Party cannot avoid or circumvent ("Force Majeure +Event"). If the Force Majeure Event results in a delay or non-performance of a +Party for a period of three (3) months or longer, then either Party shall have +the right to terminate this Agreement with immediate effect without any +liability (except for the obligations of payment arising prior to the event of +Force Majeure) towards the other Party. 14.7. Notices -Any notice given by one Party to the other shall be deemed properly given -and deemed received if specifically acknowledged by the receiving Party in -writing or when successfully delivered to the recipient by hand, fax, or -special courier during normal business hours on a business day to the -addresses specified for each Party on the signature page. Each -communication and document made or delivered by one Party to the other -Party pursuant to this Agreement shall be in the English language. + +Any notice given by one Party to the other shall be deemed properly given and +deemed received if specifically acknowledged by the receiving Party in writing +or when successfully delivered to the recipient by hand, fax, or special +courier during normal business hours on a business day to the addresses +specified for each Party on the signature page. Each communication and document +made or delivered by one Party to the other Party pursuant to this Agreement +shall be in the English language. 14.8. Export Control + Licensee acknowledges that the Redistributables, as incorporated in -Applications or Devices, may be subject to export control restrictions -under the applicable laws of respective countries. Licensee shall fully -comply with all applicable export license restrictions and requirements -as well as with all laws and regulations relating to the Redistributables -and exercise of licenses hereunder and shall procure all necessary -governmental authorizations, including without limitation, all necessary -licenses, approvals, permissions or consents, where necessary for the -re-exportation of the Redistributables, Applications and/or Devices. +Applications or Devices, may be subject to export control restrictions under +the applicable laws of respective countries. Licensee shall fully comply with +all applicable export license restrictions and requirements as well as with all +laws and regulations relating to the Redistributables and exercise of licenses +hereunder and shall procure all necessary governmental authorizations, +including without limitation, all necessary licenses, approvals, permissions or +consents, where necessary for the re-exportation of the Redistributables, +Applications and/or Devices. 14.9. No Implied License -There are no implied licenses or other implied rights granted under -this Agreement, and all rights, save for those expressly granted hereunder, -shall remain with The Qt Company and its licensors. In addition, no licenses -or immunities are granted to the combination of the Licensed Software with -any other software or hardware not delivered by The Qt Company under this + +There are no implied licenses or other implied rights granted under this +Agreement, and all rights, save for those expressly granted hereunder, shall +remain with The Qt Company and its licensors. In addition, no licenses or +immunities are granted to the combination of the Licensed Software with any +other software or hardware not delivered by The Qt Company under this Agreement. 14.10. Attorney Fees -The prevailing Party in any action to enforce this Agreement shall be -entitled to recover its attorney's fees and costs in connection with such -action. + +The prevailing Party in any action to enforce this Agreement shall be entitled +to recover its attorney's fees and costs in connection with such action, as to +be ordered by the relevant dispute resolution body. 14.11. Privacy + Licensee acknowledges and agrees that for the purpose of this Agreement, -The Qt Company may collect, use, transfer and disclose personal data -pertaining to Designated Users as well as any other employees and directors -of the Licensee and its Contractors relevant for carrying out the intent of -this Agreement. Such personal data may be collected from the Licensee or -directly from the relevant individuals. The Parties acknowledge that with -regard to such personal data processed hereunder, The Qt Company shall be -regarded as the Data Controller under the applicable Data Protection -Legislation. The Qt Company shall process any such personal data in -accordance with its privacy policies and practices, which will comply with -all applicable requirements of the Data Protection Legislation. +The Qt Company may collect, use, transfer and disclose personal data pertaining +to Designated Users as well as any other employees and directors of the +Licensee and its Contractors relevant for carrying out the intent of this +Agreement. Such personal data will be primarily collected from the relevant +individuals but may be collected also from Licensee (e.g. in the course of +Licensee's reporting obligations). The Parties acknowledge that as +The Qt Company determines the purpose and means for such collection and +processing of the applicable personal data, The Qt Company shall be regarded as +the Data Controller under the applicable Data Protection Legislation. +The Qt Company shall process any such personal data in accordance with its +privacy and security policies and practices, which will comply with all +applicable requirements of the Data Protection Legislation. 14.12. Severability -If any provision of this Agreement shall be adjudged by any court of -competent jurisdiction to be unenforceable or invalid, that provision shall -be limited or eliminated to the minimum extent necessary so that this -Agreement shall otherwise remain in full force and effect and enforceable. + +If any provision of this Agreement shall be adjudged by any court of competent +jurisdiction to be unenforceable or invalid, that provision shall be limited or +eliminated to the minimum extent necessary so that this Agreement shall +otherwise remain in full force and effect and enforceable. + +14.13. Marketing Rights + +Parties have agreed upon Marketing Rights pursuant to Appendix 7, if any. + + + APPENDICES - -The Agreement includes Appendix 1, and possibly one or more of the -appendices 3-5, depending on the product(s) purchased by the Licensee, -what is stated in the quote or invoice, and/or what is stated in the -Licensee's License Certificate. - -APPENDIX 1 - -The modules and/or tools that are included in the respective product - Qt -for Application Development (QtAD), Qt for Device Creation (QtDC), Qt for -MCUs (QtMCU), Qt 3D Studio (Qt3DS) and Qt Design Studio (QtDS) - are -marked with 'X' in the below table. The modules and tools are ported to Qt 6 -in stages and are subject to availability. - -Parts of the product that are permitted for distribution in object-code -form only ("Redistributables") are marked with 'R' in the below table. - -+-----------------------------------------------------------------------+ -| Modules / Tools | QtAD | QtDC | QtMCU | Qt3DS | QtDS | -+-----------------------------------------------------------------------+ -| Qt Core | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt GUI | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Multimedia | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Multimedia Widgets | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Network | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt PDF | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt QML | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Quick | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Quick Controls 2 | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Quick Dialogs | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Quick Layouts | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Quick Test | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt SQL | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Test | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Widgets | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Active Qt | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt 3D | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Android Extras | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Bluetooth | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Canvas 3D | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Concurrent | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt D-Bus | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Gamepad | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Graphical Effects | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Help | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Image Formats | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Location | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Mac Extras | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Network Authorization | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt NFC | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Platform Headers | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Positioning | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Print Support | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Purchasing | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt for Python | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Quick Controls | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Quick Extras | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Quick Widgets | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt SCXML | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Sensors | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Serial Bus | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Serial Port | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Speech | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt SVG | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt UI Tools | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt WebChannel | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt WebEngine | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt WebSockets | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt WebView | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Windows Extras | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt X11 Extras | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt XML | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt XML Patterns | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Wayland Compositor | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Charts | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Data Visualization | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Virtual Keyboard | X, R | X, R | | | | -+-----------------------------------------------------------------------+ -| Boot 2 Qt stack | | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt OTA | | X, R | | | | -+-----------------------------------------------------------------------+ -| Device Utilities | | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Debugging Bridge (QDB) Daemon | | X, R | | | | -+-----------------------------------------------------------------------+ -| Qt Quick Ultralite Controls | | | X, R | | | -+-----------------------------------------------------------------------+ -| Qt Quick Ultralite | | | X, R | | | -+-----------------------------------------------------------------------+ -| Qt Creator | X | X | X | | | -+-----------------------------------------------------------------------+ -| Qt Designer (Qt Widget Designer) | X | X | | | | -+-----------------------------------------------------------------------+ -| Qt Quick Designer (Qt Creator | X, R | X, R | X, R | | | -| plugin) | | | | | | -+-----------------------------------------------------------------------+ -| Qt Linguist | X, R | X, R | X, R | | | -+-----------------------------------------------------------------------+ -| Qt Assistant | X, R | X, R | X, R | | | -+-----------------------------------------------------------------------+ -| Lupdate | X, R | X, R | X, R | | | -+-----------------------------------------------------------------------+ -| Lrelease | X, R | X, R | X, R | | | -+-----------------------------------------------------------------------+ -| Qmake | X | X | | | | -+-----------------------------------------------------------------------+ -| Uic | X | X | | | | -+-----------------------------------------------------------------------+ -| Rcc | X | X | | | | -+-----------------------------------------------------------------------+ -| Qlalr | X | X | | | | -+-----------------------------------------------------------------------+ -| Qdoc | X | X | | | | -+-----------------------------------------------------------------------+ -| Qmlscene | X | X | | | | -+-----------------------------------------------------------------------+ -| Qmlviewer | X | X | | | | -+-----------------------------------------------------------------------+ -| Target toolchains | | X | X | | | -+-----------------------------------------------------------------------+ -| Qt Debugging Bridge (QDB) Host | | X | | | | -| Tools | | | | | | -+-----------------------------------------------------------------------+ -| qtconfig-gui | | X | | | | -+-----------------------------------------------------------------------+ -| Qt Emulator | | X | | | | -+-----------------------------------------------------------------------+ -| Qmlinterfacegenerator | | | X | | | -+-----------------------------------------------------------------------+ -| Qmltocpp | | | X | | | -+-----------------------------------------------------------------------+ -| qulfontcompiler | | | X | | | -+-----------------------------------------------------------------------+ -| Qt53DStudioRuntime2 | | | | X, R | | -+-----------------------------------------------------------------------+ -| Qt 3D Studio | | | | X | | -+-----------------------------------------------------------------------+ -| Qt Design Studio | | | | | X | -+-----------------------------------------------------------------------+ +The Agreement includes following Appendices 1-10, as applicable. +- Appendix 1: Licensed Software details +- Appendix 2: Pricing +- Appendix 3: Add-on Software details (optional) +- Appendix 4: Small business and startup Licenses (optional) +- Appendix 5: Non-commercial and educational Licenses (optional) +- Appendix 6: License Reporting (optional) +- Appendix 7: Marketing Rights (optional) +- Appendix 8: Intentionally left blank (optional) +- Appendix 9: Support Terms +- Appendix 10: Conversion from legacy Licenses to Subscription (optional) -APPENDIX 3: ADDITIONS TO LICENSED SOFTWARE +APPENDIX 1: LICENSED SOFTWARE -In addition to what is provided under the definition of the Licensed Software, -Parties agree that Licensed Software shall also include the Add-On Products of -The Qt Company, as mentioned in this Appendix, if included in the quote / -invoice. +The modules and/or tools that are included in the latest publicly available +version of the respective product at the effective date of this Agreement- Qt +for Application Development Professional (ADP), Qt for Application Development +Enterprise (ADE), Qt for Device Creation Professional (DCP), Qt for Device +Creation Enterprise (DCE), - are marked with "X" in the below table. The +modules and tools are specific to each product version respectively and may +vary from version to version. Modules and tools included in the latest publicly +available version of the respective product at any given time are listed in +Appendix 1 of the latest version of this Agreement available at +www.qt.io/terms-conditions/. If a new version of Licensed Software does not +include a module or tool present in an older version which Licensee is entitled +to use under a valid license from The Qt Company, then Licensee will continue +to have such right during the Term of this Agreement. In the event a new +version of the Licensed Software adds modules or tools to any previous +version(s), Licensee's rights will extend to cover also such additional modules +and tools. -The Modules and/or Tools of the Licensed Software that are included with each -Add-On Product respectively are marked with 'X' in the below table. The modules -are ported to Qt 6 in stages and are subject to availability. +Parts of the product that are permitted for distribution in object-code form +only ("Redistributables") are marked with "R" in the below table. -Parts of the respective Add-On Product that are permitted for distribution in -object-code form only ("Redistributables") are marked with 'R' in the below -table. - -+------------------------------------------------------------------------------------------------+ -| | Add-On Product(s) | -| +--------------------------------------------------------------------------+ -| Modules / Tools of | Qt for | Qt | Qt | Qt | Qt | Qt | -| Licensed Software | Automation | Automotive | Safe | Application | GammaRay | Deployment | -| | / Qt M2M | Suite | Renderer | Manager | | Platform | -| | Protocols | | | | | Package | -+------------------------------------------------------------------------------------------------+ -| Qt MQTT | X, R | | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt KNX | X, R | | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt OPC UA | X, R | | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt CoAP | X, R | | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt Safe Renderer | | X, R | X, R | | | | -+------------------------------------------------------------------------------------------------+ -| Qt Application | | X, R | | X, R | | | -| Manager | | | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt IVI | | X, R | | | | | -+------------------------------------------------------------------------------------------------+ -| Reference UI | | X, R | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt GENIVI Extras | | X, R | | | | | -+------------------------------------------------------------------------------------------------+ -| QML Live | | X | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt Creator | | X | | | | | -| Deployment | | | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt Creator Plugin | | X | | X | | | -| for Qt Application Manager | | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt Automotive Suite | | X | | | | | -| Deployment Server | | | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt Design Studio | | X | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt 3D Studio | | X | | | | | -+------------------------------------------------------------------------------------------------+ -| GammaRay | | X | | | X | | -+------------------------------------------------------------------------------------------------+ -| Platform adaptations| | | | | | X | -| for specified | | | | | | -| Deployment Platforms | | | | | | -+------------------------------------------------------------------------------------------------+ -| Qt for Device | | X | | | | | -| Creation | | | | | | | -+------------------------------------------------------------------------------------------------+ ++----------------------------------------------------------+ +| Modules / Tools | ADP | ADE | DCP | DCE | ++----------------------------------------------------------+ +| Active Qt | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt 3D | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt 5 Core Compatibility APIs | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Android Extras | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Bluetooth | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Canvas 3D | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Charts | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Concurrent | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Core | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Data Visualization | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt D-Bus | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt for Python | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt for WebAssembly | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Gamepad | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Graphical Effects | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt GUI | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Help | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Image Formats | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Location | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Lottie Animation | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Mac Extras | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Multimedia | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Multimedia Widgets | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Network | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Network Authorization | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt NFC | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt OpenGL | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt PDF | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Platform Headers | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Positioning | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Print Support | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Purchasing | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt QML | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick 3D | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Controls 1 | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Controls | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Dialogs | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Extras | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Layouts | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Test | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Timeline | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick WebGL | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Widgets | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Remote Objects | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Script | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Script Tools | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt SCXML | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Sensors | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Serial Bus | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Serial Port | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Shader Tools | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Speech | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt State Machine | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt SQL | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt SVG | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Test | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt UI Tools | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Virtual Keyboard | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Wayland Compositor | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt WebChannel | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt WebEngine | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt WebSockets | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt WebView | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Widgets | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Windows Extras | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt X11 Extras | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt XML | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt XML Patterns | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Designer (Qt Widget Designer) | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Linguist | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt Assistant | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| lupdate | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| lrelease | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| lconvert | X,R | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt MQTT | | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt KNX | | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt OPC UA | | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Qt CoAP | | X,R | X,R | X,R | ++----------------------------------------------------------+ +| Boot 2 Qt stacks | | | X,R | X,R | ++----------------------------------------------------------+ +| Qt OTA | | | X,R | X,R | ++----------------------------------------------------------+ +| Device Utilities | | | X,R | X,R | ++----------------------------------------------------------+ +| Qt Debugging Bridge (QBD) Daemon | | | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Ultralite Controls | | | X,R | X,R | ++----------------------------------------------------------+ +| Qt Quick Ultralite | | | X,R | X,R | ++----------------------------------------------------------+ +| Qt Safe Renderer (QSR) | | | | X,R | ++----------------------------------------------------------+ +| Qt Application Manager | | | | X,R | ++----------------------------------------------------------+ +| Qt Interface Framework | | | | X,R | ++----------------------------------------------------------+ +| Neptune Reference UI | | | | X,R | ++----------------------------------------------------------+ +| Qt for Android Automotive (QAA) | | | | X,R | ++----------------------------------------------------------+ +| Qt Creator | X | X | X | X | ++----------------------------------------------------------+ +| Qt Design Studio Professional | X | X | X | X | ++----------------------------------------------------------+ +| androiddeployqt | X | X | X | X | ++----------------------------------------------------------+ +| androidtestrunner | X | X | X | X | ++----------------------------------------------------------+ +| canbusutil | X | X | X | X | ++----------------------------------------------------------+ +| dumpcpp | X | X | X | X | ++----------------------------------------------------------+ +| dumpdoc | X | X | X | X | ++----------------------------------------------------------+ +| fixqt4headers.pl | X | X | X | X | ++----------------------------------------------------------+ +| idc | X | X | X | X | ++----------------------------------------------------------+ +| moc | X | X | X | X | ++----------------------------------------------------------+ +| pixeltool | X | X | X | X | ++----------------------------------------------------------+ +| qdbus | X | X | X | X | ++----------------------------------------------------------+ +| qdbuscpp2xml | X | X | X | X | ++----------------------------------------------------------+ +| qdbusviwer | X | X | X | X | ++----------------------------------------------------------+ +| qdbusxml2cpp | X | X | X | X | ++----------------------------------------------------------+ +| qdistancefieldgenerator | X | X | X | X | ++----------------------------------------------------------+ +| qdoc | X | X | X | X | ++----------------------------------------------------------+ +| qhelpgenerator | X | X | X | X | ++----------------------------------------------------------+ +| qlalr | X | X | X | X | ++----------------------------------------------------------+ +| qmake | X | X | X | X | ++----------------------------------------------------------+ +| qml | X | X | X | X | ++----------------------------------------------------------+ +| qmlcachegen | X | X | X | X | ++----------------------------------------------------------+ +| qmldom | X | X | X | X | ++----------------------------------------------------------+ +| qmleasing | X | X | X | X | ++----------------------------------------------------------+ +| qmlformat | X | X | X | X | ++----------------------------------------------------------+ +| qmllint | X | X | X | X | ++----------------------------------------------------------+ +| qmlpreview | X | X | X | X | ++----------------------------------------------------------+ +| qmlprofiler | X | X | X | X | ++----------------------------------------------------------+ +| qmlscene | X | X | X | X | ++----------------------------------------------------------+ +| qmltestrunner | X | X | X | X | ++----------------------------------------------------------+ +| qmltime | X | X | X | X | ++----------------------------------------------------------+ +| qmlviewer | X | X | X | X | ++----------------------------------------------------------+ +| qtdiag | X | X | X | X | ++----------------------------------------------------------+ +| qtpaths | X | X | X | X | ++----------------------------------------------------------+ +| qtplugininfo | X | X | X | X | ++----------------------------------------------------------+ +| qvkgen | X | X | X | X | ++----------------------------------------------------------+ +| rcc | X | X | X | X | ++----------------------------------------------------------+ +| tracegen | X | X | X | X | ++----------------------------------------------------------+ +| uic | X | X | X | X | ++----------------------------------------------------------+ +| windeployqt | X | X | X | X | ++----------------------------------------------------------+ +| Target toolchains | | | X | X | ++----------------------------------------------------------+ +| Qt Debugging Bridge Host Tools | | | X | X | ++----------------------------------------------------------+ +| qtconfig-gui | | | X | X | ++----------------------------------------------------------+ +| Qt Emulator | | | X | X | ++----------------------------------------------------------+ +| Qt Creator VxWorks plugin | | | X | X | ++----------------------------------------------------------+ +| Qt Creator plugin for Qt | | | | X | +| Application Manager | | | | | ++----------------------------------------------------------+ +| qmlinterfacegenerator | | | | X | ++----------------------------------------------------------+ +| qmltocpp | | | | X | ++----------------------------------------------------------+ +| qulfontcompiler | | | | X | ++----------------------------------------------------------+ +| Qt Deployment Server | | | | X | ++----------------------------------------------------------+ -All the above Redistributables are subject to applicable provisions and -limitations including but not limited to what is defined in section 3 of the -Agreement. +Rights for Application and Device use cases + +Following table summarizes the rights afforded by different products of the +Licensed Software to create and distribute Applications and Devices as defined +in this Agreement (X marks for rights): + ++---------------------------------------------------------------+ +| | Applications | Devices | ++---------------------------------------------------------------+ +| ADP | X | | ++---------------------------------------------------------------+ +| ADE | X | | ++---------------------------------------------------------------+ +| DCP | X | X | ++---------------------------------------------------------------+ +| DCE | X | X | ++---------------------------------------------------------------+ + +Licensed Software: Designer tools and modules + +The modules and/or tools that are included in the respective product - Qt for +Design Studio Professional (DSP), Qt for Design Studio Enterprise (DSE) - are +marked with "X" in the below table. + +Designer tools provides no Redistributables. + ++---------------------------------------------+ +| | DSP | DSE | ++---------------------------------------------+ +| Qt Design Studio | X | X | ++---------------------------------------------+ +| Qt Design Bridges | | X | ++---------------------------------------------+ +| QML Live on host | X | X | ++---------------------------------------------+ +| QML Live on target | | X | ++---------------------------------------------+ +| Variant Management | | X | ++---------------------------------------------+ +| Shader creation tools | | X | ++---------------------------------------------+ +| Profiling tools | | X | ++---------------------------------------------+ +| Simulink support | | X | ++---------------------------------------------+ + + +Both DSP and DSE can be used to create an user interface for use cases covered +by ADP, ADE, DCP and DCE. + +Licensed Software: QA Tools + +The modules and/or tools that are included in the respective QA Tools product +- Squish (both Tester and execution Licenses), Coco or Test Center - are marked +with "X" in the below table. Optional features that will need additional +licenses are marked with "O". QA Tools include no Redistributables. + ++---------------------------------------------------------------------+ +| | Squish | Coco | Test Center | ++---------------------------------------------------------------------+ +| Squish IDE | X | | | ++---------------------------------------------------------------------+ +| QA Tool-specific command line tools | X | X | X | ++---------------------------------------------------------------------+ +| Coverage Browser | | X | | ++---------------------------------------------------------------------+ +| HTML interface | | | X | ++---------------------------------------------------------------------+ +| Qt Support Module | X | | | ++---------------------------------------------------------------------+ +| Java support module | X | | | ++---------------------------------------------------------------------+ +| Windows support module | X | | | ++---------------------------------------------------------------------+ +| iOS support module | X | | | ++---------------------------------------------------------------------+ +| Android support module | X | | | ++---------------------------------------------------------------------+ +| Web support module | X | | | ++---------------------------------------------------------------------+ +| macOS support module | X | | | ++---------------------------------------------------------------------+ +| VNC support module | X | | | ++---------------------------------------------------------------------+ +| MCU support module | X | | | ++---------------------------------------------------------------------+ +| C and C++ language module | | X | | ++---------------------------------------------------------------------+ +| C# language module | | X | | ++---------------------------------------------------------------------+ +| QML language module | | X | | ++---------------------------------------------------------------------+ +| Tester Cross-Compilation Add-On | O | O | | ++---------------------------------------------------------------------+ + +License capabilities for Squish + +License capabilities that are included in the Squish Tester and Execution +Licenses are marked with "X" in the below table. + ++-----------------------------------------------------------------------------+ +| | Squish Tester License | Squish Execution License | ++-----------------------------------------------------------------------------+ +| Ability to create, edit, | X | | +| and debug test cas | | | ++-----------------------------------------------------------------------------+ +| Ability to execute test | X | X | +| cases | | | ++-----------------------------------------------------------------------------+ + +Install and use capabilities for QA Tools + +Install and use capabilities that are included in the respective QA Tools +products are defined in the below table. + ++-----------------------------------------------------------------------------+ +| | Squish | Squish | Coco | Test | +| | Tester | Execution | License | Center | +| | License | License | | License | ++-----------------------------------------------------------------------------+ +| Number of installation | Unlimited | Unlimited | Unlimited | One(1) | +| instances per license | | | | | ++-----------------------------------------------------------------------------+ +| Number of concurrent | Limited by| Limited by | Limited by | Limited by | +| users | number of | number of | number of | number of | +| | Squish | Squish | Coco | Test Center | +| | Tester | Execution | Tester | Licenses | +| | Licenses | Licenses | Licenses | | ++-----------------------------------------------------------------------------+ + + +APPENDIX 2: PRICING + +Separate template + +APPENDIX 3: ADD-ON PRODUCTS TO LICENSED SOFTWARE + +Intentionally left blank. APPENDIX 4: SMALL BUSINESS AND STARTUP The provisions of this Appendix 4 are applicable for companies with an annual -revenue, including funding, equivalent to maximum of 250,000 USD (in -applicable currency) during the latest full calendar year, as evidenced by -duly audited records of the Licensee and approved by The Qt Company -("Start-up Company"). +revenue, including funding, equivalent to maximum of 250,000 USD (in applicable +currency) during the latest full calendar year, as evidenced by duly audited +records of the Licensee and approved by The Qt Company ("Start-up Company"). Start-up Companies are qualified for a discounted License Fee for maximum of -four (4) Development Licenses ("Start-up Development License") unless -otherwise agreed between the parties. +four (4) Development Licenses ("Start-up Development License") unless otherwise +agreed between the parties. Start-up Development License entitles the respective Designated User for -Support only for installation related issues. +Support only for Install Support as defined in Appendix 9, Support Terms. -Upon expiry of the respective License Term, the Start-up Development -Licenses shall be automatically extended, pursuant to Section 3.1 of the -Agreement, for a Renewal Term either as new Start-up Development Licenses -(if the Licensee still qualifies as a Start-up Company), or as normal -Development Licenses (if the Licensee no longer qualifies as a Start-up -company). +Upon expiry of the respective Development License Term, the Start-up +Development Licenses shall be automatically extended, pursuant to Section 3.1 +of the Agreement, for a Renewal Term either as new Start-up Development +Licenses (if the Licensee still qualifies as a Start-up Company), or as normal +then standard list price Development Licenses (if the Licensee no longer +qualifies as a Start-up Company). -APPENDIX 5: NON-COMMERCIAL USE -The provisions of this Appendix 5 are applicable for non-commercial use of -the Licensed Software by the Licensee. +APPENDIX 5: NON-COMMERCIAL AND EDUCATIONAL USE + +The provisions of this Appendix 5 are applicable for non-commercial use of the +Licensed Software by the Licensee. For the purpose of this Appendix 5, the following additional definitions -(replacing the relevant definition of the Agreement, where applicable) -shall be applicable: +(replacing the relevant definition of the Agreement, where applicable) shall be +applicable: "Demo Units" shall mean (i) hardware development platform, which incorporates -the Licensed Software along with Licensee's software and/or hardware, and -(ii) prototype versions of Applications or Devices. +the Licensed Software along with Licensee's software and/or hardware, and (ii) +prototype versions of Applications or Devices. "Designated User(s)" shall mean the employees and students of the Licensee. "Licensee Products" shall mean Applications and/or Devices. -"Permitted Purpose" shall mean (i) Licensee's internal evaluation and -testing of Licensed Software, (ii) building Demo Units as well as (iii) -educational use. +"Permitted Purpose" shall mean (i) Licensee's internal evaluation and testing +of Licensed Software, (ii) building Demo Units as well as (iii) educational +use. -"Term" shall mean a period of twelve (12) months or any such other period -as may be agreed between the Parties. +"Agreement Term" shall mean a period of twelve (12) months or any such other +period as may be agreed between the Parties. -For the purpose of this Appendix 5, the following changes shall be agreed -with respect to relevant Sections of the Agreement: - - I. Recital (A) shall be replaced in its entirety to read as follows: - "(A) Licensee wishes to use the Licensed Software for the Permitted - Purpose." - II. Section 3.1 shall be replaced in its entirety to read as follows: +For the purpose of this Appendix 5, the following changes shall be agreed with +respect to relevant Sections of the Agreement: + I. Recital (A) shall be replaced in its entirety to read as follows: + "(A) Licensee wishes to use the Licensed Software for the Permitted + Purpose." + II. Section 3.1 shall be replaced in its entirety to read as follows: "The Qt Company grants to Licensee a personal, non-exclusive, non-transferable, revocable, royalty-free license, valid for the - Term, to use, modify and copy the Licensed Software solely for the - Permitted Purpose. - Licensee may install copies of the Licensed Software on five (5) - computers per Designated User, provided that only the Designated - Users who have a valid Development License may use the Licensed - Software. - Licensee may demonstrate the Demo Units, provided that such - demonstrations must be conducted by Licensee, and the Demo Units - must remain in Licensee's possession and under Licensee's control + Agreement Term, to use, modify and copy the Licensed Software solely + for the Permitted Purpose. Licensee may install copies of the Licensed + Software on five (5) computers per Designated User, provided that only + the Designated Users who have a valid Development License may use the + Licensed Software. Licensee may demonstrate the Demo Units, provided + that such demonstrations must be conducted by Licensee, and the Demo + Units must remain in Licensee's possession and under Licensee's control at all times. For clarity, this Agreement does not (i) entitle Licensee to use Licensed Software to create Applications or Devices (other than - prototypes thereof) or (ii) carry any distribution rights to - Licensee, but such rights are subject to and conditional upon - conclusion of a separate license agreement with The Qt Company." - III. Sections 3.2, 3.3, 8 and 10 shall be deleted. - IV. Section 3.4 shall be replaced in its entirety to read as follows: + prototypes thereof) or (ii) carry any distribution rights to Licensee, + but such rights are subject to and conditional upon conclusion of a + separate license agreement with The Qt Company." + III. Sections 3.2, 3.3, 3.5, 3.6, 8 and 10 shall be deleted. + IV. Section 3.4 shall be replaced in its entirety to read as follows: "Licensee shall not: - - remove or alter any copyright, trademark or other proprietary - rights notice contained in any portion of the Licensed Software; - - transfer, publish, sublicense, disclose, display or otherwise - make the Licensed Software available to any third party (except - that Licensee may demonstrate the Demo Units pursuant to Section - 3.1); - - in any way combine, incorporate or integrate Licensed Software - with, or use Licensed Software for creation of, any software - created with or incorporating Open Source Qt; + - remove or alter any copyright, trademark or other proprietary rights + notice contained in any portion of the Licensed Software; + - transfer, publish, sublicense, disclose, display or otherwise make + the Licensed Software available to any third party (except that + Licensee may demonstrate the Demo Units pursuant to Section 3.1); + - in any way combine, incorporate or integrate Licensed Software with, + or use Licensed Software for creation of, any software created with + or incorporating Open Source Qt; Licensee shall cause all Designated + Users who make use of the licenses granted under this Agreement, to + be contractually bound to comply with the relevant terms of this + Agreement and not to use the Licensed Software beyond the terms + hereof. Licensee shall be responsible for any and all actions and + omissions of its Designated Users relating to the Licensed Software + and use thereof. Any use of Licensed Software beyond the provisions + of this Agreement is strictly prohibited and requires an additional + license from The Qt Company." + V. Section 12 shall be replaced in its entirety to read as follows: + "This Agreement shall enter into force upon due acceptance by both + Parties and remain in force for the Agreement Term, unless and until + terminated pursuant to the terms of Section 12. + Upon termination of the Agreement, Licensee shall cease using the + Licensed Software. All other copies of Licensed Software in the + possession or control of Licensee must be erased or destroyed. An + officer of Licensee must, upon request, promptly deliver to The Qt + Company a written confirmation that this has occurred." - Licensee shall cause all Designated Users who make use of the - licenses granted under this Agreement, to be contractually bound - to comply with the relevant terms of this Agreement and not to use - the Licensed Software beyond the terms hereof. Licensee shall be - responsible for any and all actions and omissions of its - Designated Users relating to the Licensed Software and use - thereof. +Except for the modifications specified above, this Appendix carries no change +to the terms of the Agreement which shall remain in full force. - Any use of Licensed Software beyond the provisions of this - Agreement is strictly prohibited and requires an additional license - from The Qt Company." - V. Section 12 shall be replaced in its entirety to read as follows: - "This Agreement shall enter into force upon due acceptance by both - Parties and remain in force for the Term, unless and until - terminated pursuant to the terms of Section 12. +APPENDIX 6: LICENSE REPORTING - Upon termination of the Agreement, Licensee shall cease using the - Licensed Software. All other copies of Licensed Software in the - possession or control of Licensee must be erased or destroyed. - An officer of Licensee must, upon request, promptly deliver to - The Qt Company a written confirmation that this has occurred." +Separate template -Except for the modifications specified above, this Appendix carries no -change to the terms of the Agreement which shall remain in full force. +APPENDIX 7: MARKETING RIGHTS + +This Appendix 7 has the purpose to grant visibility through The Qt Company +marketing channels of the usage of Qt and related product and service in +Licensee product. Following related marketing right are agreed between the Qt +Company and the Licensee. + +1. LICENSEE NAME AND LICENSEE LOGO + +The Qt Company has the right to use Licensee name and Licensee logo in public +channel, in respect of the value proposition that the Qt company provided to +the Licensee. + +2. MARKETING CONTENT COOPERATION + +2.1. LICENSEE CASES + +The Licensee is open to collaborate on content creation for marketing and +communication purpose. The Licensee will nominate one responsible that will be +in charge to support The Qt company with this content creation, according to +content format paragraph, answering technical questions or sharing professional +picture or video of required content. The Qt Company will have the right to +advertise this in Content Format and Channel as mentioned in paragraph 3 and 4. + +2.2. FINAL PRODUCT REFERRAL + +Licensee agree that The Qt Company could connect their software product and +services with the Licensee device or application, that the Licensee has created +using The Qt Company technology and competence. Licensee will provide high +quality picture, and video of the created final product where the Qt technology +is running into. The Qt Company will have the right to advertise this in +Content Format and Channel as mentioned in paragraph 3 and 4. + +3. CONTENT FORMAT + +- Video +- Written Licensee case +- Press release +- Social media posts +- Emails +- Event booth Graphics +- Printed material + +4. CHANNELS + +- Social media +- The Qt Company resource center and website +- Email to the Qt company contact database +- Events +- Online webinars +- Public speech +- Public presentations + +APPENDIX 8: INTENTIONALLY LEFT BLANK + +APPENDIX 9: SUPPORT TERMS + +These Qt support terms and conditions ("Support Terms") set forth the legal +framework, where under The Qt Company ("The Qt Company") provides support +services (as herein defined) to the Licensee. + +1 DEFINITIONS + +"Application Code" shall mean a computer software program written strictly +using the Qt programming language, by or for the Licensee, with a user +interface, enabling the Licensee or their users to accomplish a specific task +and display any results of the task on the display monitor or screen. + +"Dedicated Contact" shall mean the employee of The Qt Company who will be the +first point of contact for all Designated Users' requests for Support. + +"Errors" shall mean an error, flaw, mistake, failure, or fault in Licensed +Software that prevents it from behaving as described in the relevant +documentation or as agreed between the Parties. + +"Extended Support" shall mean a continuation to the normal Support period, +which allows Designated Users to receive selected Support (Standard Support or +Premium Support) for a version of Licensed Software that is no longer generally +supported by The Qt Company. + +"Install Support" shall mean Support that is limited to installation related +Error(s) on Development Platforms specified as supported host platforms for +each Qt release under doc.qt.io. + +"Maintenance Release" shall mean a release or version of Licensed Software +containing bug fixes, error corrections and other changes targeted to +maintaining and improving product stability and quality. Maintenance Releases +are generally depicted as a change to the third digit of Licensed Software +version number. + +"Platforms" shall mean both Development Platforms and Deployment Platforms. +Supported host and target Platforms may vary from for each Qt release as +defined under doc.qt.io. + +"Premium Support" shall mean an upgraded level of Support that The Qt Company +provides pursuant to these Support Terms to Licensee if Licensee has purchased +Premium Support instead of Standard Support. Premium Support shall always be +purchased for all Designated User(s) in the respective development team of the +Licensee. + +"Response Time" shall mean the period of time from when Licensee notifies +TheQt Company about an Error or requests Support until The Qt Company provides +Licensee with a response that addresses (but not necessarily resolves) the +reported Error or provides the requested Support. + +"Standard Support" shall mean standard level of Support that The Qt Company +provides pursuant to these Support Terms to Licensee. + +"Support" shall mean developer assistance that is provided by The Qt Company +to assist eligible Designated Users in Licensed Software installation, usage +and functionality problem resolution for Error(s) and Error workarounds +pursuant to the terms of these Support Terms. Support for different products is +available as specified in the below table ("X" marking the Support that is +included in the license price, optional Add-on Support services are marked as +"O"): + ++-----------------------------------------------------------------------+ +| |ADP|ADE|DCP|DCE|DSP|DSE|Squish|Coco|Test Center| ++-----------------------------------------------------------------------+ +| Install Support | X | X | X | X | X | X | X | X | X | ++-----------------------------------------------------------------------+ +| Standard Support | | X | X | X | X | X | X | X | X | ++-----------------------------------------------------------------------+ +| Premium Support | | O | O | O | O | O | O | O | O | ++-----------------------------------------------------------------------+ +| Extended Support | | O | O | O | O | O | | | | ++-----------------------------------------------------------------------+ +| Tool Qualification Kit| | | | | | | O | O | | ++-----------------------------------------------------------------------+ + +"Support Validity Term" shall mean the Development License Term or any other +fixed time period agreed between the Parties during which time the Customer is +eligible to receive Support from The Qt Company. + +"Tool Qualification Kit" shall mean a customized set of documents and +validation test cases. + +2 SUPPORT SERVICES + +2.1 Support Services Provided by The Qt Company + +Subject to these Support Terms and during the Support Validity Term, The Qt +Company will via its web-based support user-interface, provide Designated +User(s) with Support for the Platforms which Customer has licensed under the +Agreement. +The Qt Company will make commercially reasonable efforts to solve any Errors +reported by Designated User(s). Resolution of an Error may be provided through +Designated User(s) themselves downloading of a later released version of the +applicable Licensed Software product(s) or providing the Designated User with a +temporary workaround addressing such Error. + +2.2 Licensee's Obligations + +To report an Error, the Designated User shall register the Error on The Qt +Company's web-based support user interface located at: +https://account.qt.io/login or at another location designated by The Qt Company. + +The Designated User must provide adequate information and documentation to The +Qt Company to enable it to recreate the Error or problem for which the +Designated User has sought assistance. +To ensure efficient handling of Errors, the Designated User must provide the +following information, where relevant: +- A clear, detailed description of the problem, question or suggestion; +- Identification of which Licensed Software product and version is affected; +- Identification of the operating environment (e.g. operating system, hardware + Platform, build tools, etc.) on which the problem exists; +- On Standard Support: A complete and compilable test case of not more than 500 + lines of code that demonstrates the problem; +- On Premium Support: A complete and compilable test case that demonstrates the + problem or access to Application Code source codes. + +Additional relevant content, such as screenshots, etc. +Additional content should be included as attachments. The preferred image +formats are JPEG and PNG. Compressed content should be included in zip or +tar.gz archives. Executable content and documents in platform specific formats +such as Microsoft Office' are not accepted. + +In order for The Qt Company to provide prompt handling of Errors, the +Designated User shall promptly respond to any requests from The Qt Company for +additional information. + +2.3 Support Limitations + +General limitations: + +Each version or release of the Licensed Software will be Supported under +Standard Support or Premium Support only for limited time period as set forth +in doc.qt.io. For example, regular releases of Qt Software are supported for +one (1) year from the release date of the version x.y.0 and Long Term Support +(LTS) Releases are supported for a period of three (3) years from the release +date of the LTS version x.y.0. + +The Qt Company shall only provide Support for Designated User(s). + +Support is made available for the entire development teams only: It is not +allowed to purchase Support only for some members of the development team, and +all Designated Users of the respective development team must be eligible for +the same level of Support. + +Support is not provided for snapshots, preview releases, beta releases or +release candidates. + +The Qt Company shall have no obligation to provide Support for hardware or +operating system specific problems or problems arising from improper use, +accident, neglect or modification of Qt. + +Limitations with Install Support: + +Support limited to Error(s) regarding installation and setting up of the Qt +development environment on host Platforms. + +Limitations with Standard Support: + +The Qt Company shall not provide Support for third-party software or problems +caused by third-party software even if such third-party software is distributed +together with Licensed Software product(s). + +The Qt Company shall only provide Support for Error(s) that are reported on and +can be reproduced on Platforms that are officially supported for the release of +the Licensed Software. + +Limitations with Premium support: + +The Qt Company shall not provide Support for third-party software or problems +caused by third-party software. However, if such third-party software is +distributed together with Licensed Software, The Qt Company will make +commercially reasonable efforts to solve such problems. + +The Qt Company shall only provide Support for Error(s) that can be reproduced +on Platforms that are officially supported for the release of the Licensed +Software. If the Error is on a Platform that is not supported, The Qt Company +will make commercially reasonable efforts to provide a solution on closest +corresponding supported Platform. + +Premium Support is optional and purchased for an agreed bucket of hours +("Bucket"). Hours can be used by any Designated User in the respective +development team. To encourage continuous usage of the Support, ten percent +(10%) of the purchased Bucket shall automatically expire (regardless of whether +such support hours are actually used or not by the Licensee) each month after +three (3) months from the purchase of the Premium Support. + +2.4 Extended Support + +Extended Support extends the Support Validity Term for a release of Licensed +Software that is no longer generally supported. + +Extended Support includes and is by default provided with Standard Support +rules and limitations, unless Extended Support is purchased with Premium +Support in which case Premium Support rules and limitations will apply. + +Extended Support is optional and purchased with annual fee and separately per +each Licensee product. Extended Support will need definition of (i) Licensee +product, (ii) used Platform(s) and (iii) Licensed Software version(s). + +2.5 Tool Qualification Kit + +The Qt Company shall provide set of customized documents and validation tests +that enable Licensee to qualify QA testing tool for the purpose of ISO 26262, +EN 50128, DO-330, IEC 61508, IEC 62304 or IEC 13485 certification Licensee end +to end solution. + +3 RESPONSE TIME + +In performing Support, The Qt Company shall commit to following, non-binding, +Response Times: + +Standard Support: Errors and Support requests will have a Response Time not to +exceed two (2) business days. + +Premium Support: Errors and Support requests will have a Response Time not to +exceed one (1) business day. + +For complex issues, The Qt Company may provide an initial response to the +Designated User and then follow up, without undue delay, with additional +communication before an Error is properly addressed or Support provided. + +4 ADDITIONAL SERVICES IN PREMIUM SUPPORT + +The Designated User(s) will be assigned a Dedicated Contact to handle requests +for Support. Dedicated Contact is subject to change in cases such as sick +leave, vacation and other similar reasons. + +The Designated User(s) can on request ask The Qt Company to access their +computer remotely in order to resolve problems directly. + +The Designated User(s) can request a session via Instant Messaging or phone +call in the support request to The Qt Company. + +Premium Support can assist Licensee in implementing new features, bug fixes +and accessing patches in Licensed Software or Application Code. + +All Support requests will be handled with high priority. + +5 MAINTENANCE RELEASES, UPDATES AND UPGRADES + +Under the Support the Customer is eligible for Maintenance Releases and Updates +that The Qt Company generally makes available to customers who has purchased +Support. Unless otherwise decided by The Company at its free and absolute +discretion, Upgrades will not be provided under the Support. + +The primary focus of Maintenance Releases is product quality. Therefore, each +Maintenance Release typically includes the following types of changes to the +previous version of Licensed Software: +- Bug fixes caused by changes to previously working code; +- Fixes related to build issues on supported Platforms; +- Error corrections specific to a single Platform that are not present on other + Platforms; +- Critical Error corrections such as crashes, data corruption, loss of data, + race conditions; and +- Updates to documentation and license information when deemed necessary by + The Qt Company. + +The primary focus of Updates is introducing new features to Licensed Software +and covering new platforms. Therefore, each Updates typically includes the +following types of changes to the previous version of Licensed Software: +- New platform support; +- New toolchain support; +- New features and Qt modules; + +6 WARRANTY DISCLAIMER + +The Qt Company makes no warranties that the Support provided will be successful +in resolving any difficulties or problems or in diagnosing faults reported by +Licensee. Support is provided to Licensee on an "as is" basis. To the maximum +extent permitted by applicable law, The Qt Company disclaims all warranties and +conditions, either express or implied, including, but not limited to, implied +warranties of merchantability and fitness for a particular purpose for the +Support provided by The Qt Company to Licensee. + +APPENDIX 10: CONVERSION TO SUBSCRIPTION + +Subject to the terms of this Appendix Licensee's current development licenses +("Current Licenses") for commercial version of Qt Software and the license +agreements governing such Current Licenses ("Existing Agreements") are being +replaced by this Agreement and subscription based Development Licenses +governed hereunder, as further specified below. + ++---------------------------------------------------------------------------+ +| Existing Agreement(s) | and | +| signing parties, version | | +| thereof | | ++---------------------------------------------------------------------------+ + +Parties hereby agree on conversion of Current Licenses listed in attached +Exhibit A to the subscription licenses listed in attached Exhibit B for use +through License Term. As of the date hereof, + +i. Licensee's Current Licenses as listed in Exhibit A shall terminate and be +replaced with the Subscription licenses listed in Exhibit B and; +ii. Existing Agreements are terminated. + +Prices for the conversion of Current Licenses are defined in Appendix 2 +Pricing or Quote. + +Notwithstanding anything in this Appendix to the contrary, and in addition to +any payments due pursuant to this Appendix, Licensee remains fully obligated to +fulfill any and all outstanding payment obligations to The Qt Company under any +applicable Existing Agreements. For the avoidance of doubt, if any payments +remain outstanding on the Current Licenses under the applicable terms Licensee +will continue to make such payments in accordance with the applicable order +documentation, notwithstanding the fact that the Current Licenses are being +converted to Development Licenses pursuant to this Appendix. diff --git a/config_help.txt b/config_help.txt index bce61577..14bbd3e8 100644 --- a/config_help.txt +++ b/config_help.txt @@ -142,7 +142,7 @@ Build options: sanitizers or generate instrumented code to collect execution counts and enable code coverage analysis, respectively. (Clang only) - -c++std .... Select C++ standard [c++2a/c++17/c++14/c++11] + -c++std .... Select C++ standard [c++2b/c++2a/c++17/c++14/c++11] (Not supported with MSVC 2015) -sse2 ................ Use SSE2 instructions [auto] diff --git a/configure b/configure index b6c9b462..a3564276 100755 --- a/configure +++ b/configure @@ -474,6 +474,10 @@ while [ "$#" -gt 0 ]; do VAR=`echo $1 | sed 's,^-\(.*\),\1,'` VAL="yes" ;; + # Special case for macOS universal builds + QMAKE_APPLE_DEVICE_ARCHS=*) + QMAKE_APPLE_DEVICE_ARCHS=`echo $1 | sed 's,^QMAKE_APPLE_DEVICE_ARCHS=\(.*\),\1,'` + ;; # most options don't need processing in the configure script, skip them. qmake will do the real validation *) shift @@ -781,6 +785,10 @@ setBootstrapVariable() if [ "$BUILD_ON_MAC" = "yes" ]; then echo "EXTRA_CXXFLAGS += -MMD" >> "$mkfile" + for arch in $QMAKE_APPLE_DEVICE_ARCHS; do + echo "EXTRA_CXXFLAGS += -arch $arch" >> "$mkfile" + echo "EXTRA_LFLAGS += -arch $arch" >> "$mkfile" + done cat "$in_mkfile" >> "$mkfile" echo "-include \$(notdir \$(DEPEND_SRC:%.cpp=%.d))" >> "$mkfile" else diff --git a/configure.json b/configure.json index f0b5fed4..4763ff64 100644 --- a/configure.json +++ b/configure.json @@ -380,6 +380,20 @@ "qmake": "CONFIG += c++11 c++14 c++17 c++2a" } }, + "cxx2b": { + "label": "C++2b support", + "type": "compile", + "test": { + "head": [ + "#if __cplusplus > 202002L", + "// Compiler claims to support experimental C++2b, trust it", + "#else", + "# error __cplusplus must be > 202002L (the value for C++20)", + "#endif" + ], + "qmake": "CONFIG += c++11 c++14 c++17 c++2a c++2b" + } + }, "precompile_header": { "label": "precompiled header support", "type": "compile", @@ -1002,6 +1016,12 @@ "condition": "features.c++17 && tests.cxx2a", "output": [ "publicFeature", "publicQtConfig" ] }, + "c++2b": { + "label": "C++2b", + "autoDetect": false, + "condition": "features.c++2a && tests.cxx2b", + "output": [ "publicFeature", "publicQtConfig" ] + }, "c89": { "label": "C89" }, @@ -1554,7 +1574,7 @@ Configure with '-qreal float' to create a build that is binary-compatible with 5 { "message": "Using C++ standard", "type": "firstAvailableFeature", - "args": "c++2a c++17 c++14 c++11" + "args": "c++2b c++2a c++17 c++14 c++11" }, { "type": "feature", diff --git a/configure.pri b/configure.pri index 63d6b3f2..365a1640 100644 --- a/configure.pri +++ b/configure.pri @@ -22,18 +22,27 @@ defineTest(qtConfCommandline_cxxstd) { qtConfCommandlineSetInput("c++14", "no") qtConfCommandlineSetInput("c++1z", "no") qtConfCommandlineSetInput("c++2a", "no") + qtConfCommandlineSetInput("c++2b", "no") } else: contains(val, "(c\+\+)?(14|1y)") { qtConfCommandlineSetInput("c++14", "yes") qtConfCommandlineSetInput("c++1z", "no") qtConfCommandlineSetInput("c++2a", "no") + qtConfCommandlineSetInput("c++2b", "no") } else: contains(val, "(c\+\+)?(17|1z)") { qtConfCommandlineSetInput("c++14", "yes") qtConfCommandlineSetInput("c++1z", "yes") qtConfCommandlineSetInput("c++2a", "no") + qtConfCommandlineSetInput("c++2b", "no") } else: contains(val, "(c\+\+)?(2a)") { qtConfCommandlineSetInput("c++14", "yes") qtConfCommandlineSetInput("c++1z", "yes") qtConfCommandlineSetInput("c++2a", "yes") + qtConfCommandlineSetInput("c++2b", "no") + } else: contains(val, "(c\+\+)?(2b)") { + qtConfCommandlineSetInput("c++14", "yes") + qtConfCommandlineSetInput("c++1z", "yes") + qtConfCommandlineSetInput("c++2a", "yes") + qtConfCommandlineSetInput("c++2b", "yes") } else { qtConfAddError("Invalid argument $$val to command line parameter $$arg") } diff --git a/doc/global/config.qdocconf b/doc/global/config.qdocconf index acfd5869..1dd11ad7 100644 --- a/doc/global/config.qdocconf +++ b/doc/global/config.qdocconf @@ -3,7 +3,7 @@ dita.metadata.default.author = Qt Project dita.metadata.default.permissions = all dita.metadata.default.publisher = Qt Project -dita.metadata.default.copyryear = 2020 +dita.metadata.default.copyryear = 2022 dita.metadata.default.copyrholder = The Qt Company Ltd dita.metadata.default.audience = programmer diff --git a/doc/global/externalsites/qtcreator.qdoc b/doc/global/externalsites/qtcreator.qdoc index e283b323..5d97a87a 100644 --- a/doc/global/externalsites/qtcreator.qdoc +++ b/doc/global/externalsites/qtcreator.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the documentation of the Qt Toolkit. @@ -25,603 +25,641 @@ ** ****************************************************************************/ +// Up-to-date with Qt Creator 6.0.0 + /*! - \externalpage http://doc.qt.io/qtcreator/creator-deployment-qnx.html + \externalpage https://doc.qt.io/qtcreator/creator-deployment-qnx.html \title Qt Creator: Deploying Applications to QNX Neutrino Devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-developing-baremetal.html + \externalpage https://doc.qt.io/qtcreator/creator-developing-baremetal.html \title Qt Creator: Connecting Bare Metal Devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-developing-qnx.html + \externalpage https://doc.qt.io/qtcreator/creator-developing-qnx.html \title Qt Creator: Connecting QNX Devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-developing-generic-linux.html - \title Qt Creator: Connecting Embedded Linux Devices + \externalpage https://doc.qt.io/qtcreator/creator-developing-generic-linux.html + \title Qt Creator: Connecting Generic Remote Linux Devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-deployment-embedded-linux.html - \title Qt Creator: Deploying Applications to Embedded Linux Devices + \externalpage https://doc.qt.io/qtcreator/creator-developing-mcu.html + \title Qt Creator: Connecting MCUs */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-faq.html + \externalpage https://doc.qt.io/qtcreator/creator-setup-webassembly.html + \title Qt Creator: Building Applications for the Web +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-deployment-embedded-linux.html + \title Qt Creator: Deploying Applications to Generic Remote Linux Devices +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-faq.html \title Qt Creator: FAQ */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-tips.html - \title Qt Creator: Tips and Tricks + \externalpage https://doc.qt.io/qtcreator/creator-how-tos.html + \title Qt Creator: How-tos */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-help.html + \externalpage https://doc.qt.io/qtcreator/creator-help.html \title Qt Creator: Using the Help Mode */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-quick-tour.html + \externalpage https://doc.qt.io/qtcreator/creator-quick-tour.html \title Qt Creator: User Interface */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-modes.html + \externalpage https://doc.qt.io/qtcreator/creator-modes.html \title Qt Creator: Selecting Modes */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-sidebar-views.html + \externalpage https://doc.qt.io/qtcreator/creator-sidebars.html + \title Qt Creator: Working with Sidebars +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-sidebar-views.html \title Qt Creator: Browsing Project Contents */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-output-panes.html + \externalpage https://doc.qt.io/qtcreator/creator-projects-view.html + \title Qt Creator: Projects +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-file-system-view.html + \title Qt Creator: File System +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-open-documents-view.html + \title Qt Creator: Open Documents +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-output-panes.html \title Qt Creator: Viewing Output */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-cli.html + \externalpage https://doc.qt.io/qtcreator/creator-cli.html \title Qt Creator: Using Command Line Options */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-task-lists.html + \externalpage https://doc.qt.io/qtcreator/creator-task-lists.html \title Qt Creator: Showing Task List Files in Issues Pane */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-managing-sessions.html + \externalpage https://doc.qt.io/qtcreator/creator-telemetry.html + \title Qt Creator: Managing Data Collection +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/collecting-usage-statistics.html + \title Qt Creator: Collecting Usage Statistics +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-project-managing-sessions.html \title Qt Creator: Managing Sessions */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-external.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-external.html \title Qt Creator: Using External Tools */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-version-control.html + \externalpage https://doc.qt.io/qtcreator/creator-version-control.html \title Qt Creator: Using Version Control Systems */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-vcs-bazaar.html + \externalpage https://doc.qt.io/qtcreator/creator-vcs-bazaar.html \title Qt Creator: Using Bazaar */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-vcs-clearcase.html + \externalpage https://doc.qt.io/qtcreator/creator-vcs-clearcase.html \title Qt Creator: Using ClearCase */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-vcs-cvs.html + \externalpage https://doc.qt.io/qtcreator/creator-vcs-cvs.html \title Qt Creator: Using CVS */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-vcs-git.html + \externalpage https://doc.qt.io/qtcreator/creator-vcs-git.html \title Qt Creator: Using Git */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-vcs-mercurial.html + \externalpage https://doc.qt.io/qtcreator/creator-vcs-mercurial.html \title Qt Creator: Using Mercurial */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-vcs-perforce.html + \externalpage https://doc.qt.io/qtcreator/creator-vcs-perforce.html \title Qt Creator: Using Perforce */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-vcs-subversion.html + \externalpage https://doc.qt.io/qtcreator/creator-vcs-subversion.html \title Qt Creator: Using Subversion */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-keyboard-shortcuts.html + \externalpage https://doc.qt.io/qtcreator/creator-keyboard-shortcuts.html \title Qt Creator: Keyboard Shortcuts */ /*! - \externalpage http://doc.qt.io/qtcreator/qmldesigner-pathview-editor.html - \title Qt Creator: Editing PathView Properties -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/qmldesigner-connections.html - \title Qt Creator: Adding Connections -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/quick-signals.html - \title Qt Creator: Connecting Objects to Signals -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/quick-dynamic-properties.html - \title Qt Creator: Specifying Dynamic Properties -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/quick-property-bindings.html - \title Qt Creator: Adding Bindings Between Properties -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/quick-connections-backend.html - \title Qt Creator: Managing C++ Backend Objects -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/qtcreator-transitions-example.html + \externalpage https://doc.qt.io/qtcreator/qtcreator-transitions-example.html \title Qt Creator: Creating a Qt Quick Application */ /*! - \externalpage http://doc.qt.io/qtcreator/qtquick-iso-icon-browser.html - \title Qt Creator: Browsing ISO 7000 Icons -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/quick-export-to-qml.html - \title Qt Creator: Exporting Designs from Graphics Software -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/creator-qml-modules-with-plugins.html + \externalpage https://doc.qt.io/qtcreator/creator-qml-modules-with-plugins.html \title Qt Creator: Using QML Modules with Plugins */ /*! - \externalpage http://doc.qt.io/qtcreator/quick-converting-ui-projects.html + \externalpage https://doc.qt.io/qtcreator/quick-converting-ui-projects.html \title Qt Creator: Converting UI Projects to Applications */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-visual-editor.html + \externalpage https://doc.qt.io/qtcreator/creator-visual-editor.html \title Qt Creator: Developing Qt Quick Applications */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-using-qt-quick-designer.html - \title Qt Creator: Editing QML Files in Design Mode -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/quick-projects.html + \externalpage https://doc.qt.io/qtcreator/quick-projects.html \title Qt Creator: Creating Qt Quick Projects */ /*! - \externalpage http://doc.qt.io/qtcreator/quick-components.html - \title Qt Creator: Creating Components + \externalpage https://doc.qt.io/qtcreator/creator-qtquickdesigner-plugin.html + \title Qt Creator: Using Qt Quick Designer */ /*! - \externalpage http://doc.qt.io/qtcreator/qt-quick-toolbars.html + \externalpage https://doc.qt.io/qtcreator/qt-quick-toolbars.html \title Qt Creator: Using Qt Quick Toolbars */ /*! - \externalpage http://doc.qt.io/qtcreator/quick-buttons.html - \title Qt Creator: Creating Buttons -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/quick-scalable-image.html - \title Qt Creator: Creating Scalable Buttons and Borders -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-options.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-options.html \title Qt Creator: Configuring the Editor */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-functions.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-functions.html \title Qt Creator: Writing Code */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-coding-navigating.html + \externalpage https://doc.qt.io/qtcreator/creator-coding-navigating.html \title Qt Creator: Working in Edit Mode */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-highlighting.html + \externalpage https://doc.qt.io/qtcreator/creator-highlighting.html \title Qt Creator: Semantic Highlighting */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-checking-code-syntax.html + \externalpage https://doc.qt.io/qtcreator/creator-checking-code-syntax.html \title Qt Creator: Checking Code Syntax */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-completing-code.html + \externalpage https://doc.qt.io/qtcreator/creator-completing-code.html \title Qt Creator: Completing Code */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-codepasting.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-codepasting.html \title Qt Creator: Pasting and Fetching Code Snippets */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-macros.html + \externalpage https://doc.qt.io/qtcreator/creator-macros.html \title Qt Creator: Using Text Editing Macros */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-fakevim.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-fakevim.html \title Qt Creator: Using FakeVim Mode */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-indenting-code.html + \externalpage https://doc.qt.io/qtcreator/creator-indenting-code.html \title Qt Creator: Indenting Text or Code */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-finding.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-finding.html \title Qt Creator: Finding and Replacing */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-refactoring.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-refactoring.html \title Qt Creator: Refactoring */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-locator.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-quick-fixes.html + \title Qt Creator: Applying Refactoring Actions +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-editor-locator.html \title Qt Creator: Searching with the Locator */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-coding.html + \externalpage https://doc.qt.io/qtcreator/creator-coding.html \title Qt Creator: Coding */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-options-text.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-options-text.html \title Qt Creator: Specifying Text Editor Settings */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-finding-overview.html + \externalpage https://doc.qt.io/qtcreator/creator-finding-overview.html \title Qt Creator: Finding */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-mime-types.html + \externalpage https://doc.qt.io/qtcreator/creator-mime-types.html \title Qt Creator: Editing MIME Types */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-modeling.html + \externalpage https://doc.qt.io/qtcreator/creator-modeling.html \title Qt Creator: Modeling */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-qml-debugging-example.html + \externalpage https://doc.qt.io/qtcreator/creator-qml-debugging-example.html \title Qt Creator: Debugging a Qt Quick Example Application */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-debugging-example.html + \externalpage https://doc.qt.io/qtcreator/creator-debugging-example.html \title Qt Creator: Debugging a C++ Example Application */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-debugger-engines.html + \externalpage https://doc.qt.io/qtcreator/creator-debugger-engines.html \title Qt Creator: Setting Up Debugger */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-debugging-qml.html + \externalpage https://doc.qt.io/qtcreator/creator-debugging-qml.html \title Qt Creator: Debugging Qt Quick Projects */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-debugging.html + \externalpage https://doc.qt.io/qtcreator/creator-debugging.html \title Qt Creator: Debugging */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-debugger-operating-modes.html + \externalpage https://doc.qt.io/qtcreator/creator-debugger-operating-modes.html \title Qt Creator: Launching the Debugger */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-debug-mode.html + \externalpage https://doc.qt.io/qtcreator/creator-debug-mode.html \title Qt Creator: Interacting with the Debugger */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-debugging-helpers.html + \externalpage https://doc.qt.io/qtcreator/creator-debugging-helpers.html \title Qt Creator: Using Debugging Helpers */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-troubleshooting-debugging.html + \externalpage https://doc.qt.io/qtcreator/creator-troubleshooting-debugging.html \title Qt Creator: Troubleshooting Debugger */ /*! - \externalpage http://doc.qt.io/qtcreator/index.html + \externalpage https://doc.qt.io/qtcreator/index.html \title Qt Creator Manual */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-advanced.html + \externalpage https://doc.qt.io/qtcreator/creator-advanced.html \title Qt Creator: Advanced Use */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-os-supported-platforms.html + \externalpage https://doc.qt.io/qtcreator/creator-os-supported-platforms.html \title Qt Creator: Supported Platforms */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-connecting-mobile.html + \externalpage https://doc.qt.io/qtcreator/creator-desktop-platforms.html + \title Qt Creator: Desktop Platforms +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-embedded-platforms.html + \title Qt Creator: Embedded Platforms +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-mobile-platforms.html + \title Qt Creator: Mobile Platforms +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-connecting-mobile.html \title Qt Creator: Connecting Devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-usability.html + \externalpage https://doc.qt.io/qtcreator/creator-usability.html \title Qt Creator: Optimizing Applications for Mobile Devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-acknowledgements.html + \externalpage https://doc.qt.io/qtcreator/creator-acknowledgements.html \title Qt Creator: Acknowledgements */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-help-overview.html + \externalpage https://doc.qt.io/qtcreator/creator-help-overview.html \title Qt Creator: Getting Help */ /*! - \externalpage http://doc.qt.io/qtcreator/technical-support.html + \externalpage https://doc.qt.io/qtcreator/technical-support.html \title Qt Creator: Technical Support */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-overview.html + \externalpage https://doc.qt.io/qtcreator/creator-overview.html \title Qt Creator: IDE Overview */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-testing.html + \externalpage https://doc.qt.io/qtcreator/creator-testing.html \title Qt Creator: Testing */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-deployment.html + \externalpage https://doc.qt.io/qtcreator/creator-deployment.html \title Qt Creator: Deploying to Devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-tutorials.html + \externalpage https://doc.qt.io/qtcreator/creator-tutorials.html \title Qt Creator: Tutorials */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-known-issues.html + \externalpage https://doc.qt.io/qtcreator/creator-known-issues.html \title Qt Creator: Known Issues */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-design-mode.html + \externalpage https://doc.qt.io/qtcreator/creator-design-mode.html \title Qt Creator: Designing User Interfaces */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-glossary.html + \externalpage https://doc.qt.io/qtcreator/creator-glossary.html \title Qt Creator: Glossary */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-getting-started.html + \externalpage https://doc.qt.io/qtcreator/creator-getting-started.html \title Qt Creator: Getting Started */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-analyzer.html + \externalpage https://doc.qt.io/qtcreator/creator-analyzer.html \title Qt Creator: Detecting Memory Leaks with Memcheck */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-cache-profiler.html + \externalpage https://doc.qt.io/qtcreator/creator-cache-profiler.html \title Qt Creator: Profiling Function Execution */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-running-valgrind-remotely.html + \externalpage https://doc.qt.io/qtcreator/creator-running-valgrind-remotely.html \title Qt Creator: Running Valgrind Tools on External Applications */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-valgrind-overview.html + \externalpage https://doc.qt.io/qtcreator/creator-valgrind-overview.html \title Qt Creator: Using Valgrind Code Analysis Tools */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-analyze-mode.html + \externalpage https://doc.qt.io/qtcreator/creator-analyze-mode.html \title Qt Creator: Analyzing Code */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-qml-performance-monitor.html + \externalpage https://doc.qt.io/qtcreator/creator-qml-performance-monitor.html \title Qt Creator: Profiling QML Applications */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-deploying-android.html + \externalpage https://doc.qt.io/qtcreator/creator-deploying-android.html \title Qt Creator: Deploying Applications to Android Devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-developing-ios.html + \externalpage https://doc.qt.io/qtcreator/creator-developing-ios.html \title Qt Creator: Connecting iOS devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-developing-android.html + \externalpage https://doc.qt.io/qtcreator/creator-developing-android.html \title Qt Creator: Connecting Android Devices */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-build-example-application.html + \externalpage https://doc.qt.io/qtcreator/creator-build-example-application.html \title Qt Creator: Building and Running an Example */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-generic.html + \externalpage https://doc.qt.io/qtcreator/creator-project-generic.html \title Qt Creator: Setting Up a Generic Project */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-sharing-project-settings.html + \externalpage https://doc.qt.io/qtcreator/creator-sharing-project-settings.html \title Qt Creator: Sharing Project Settings */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-opening.html + \externalpage https://doc.qt.io/qtcreator/creator-project-opening.html \title Qt Creator: Opening Projects */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-managing.html + \externalpage https://doc.qt.io/qtcreator/creator-project-managing.html \title Qt Creator: Managing Projects */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-cmake.html + \externalpage https://doc.qt.io/qtcreator/creator-project-cmake.html \title Qt Creator: Setting Up CMake */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-targets.html + \externalpage https://doc.qt.io/qtcreator/creator-targets.html \title Qt Creator: Adding Kits */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-tool-chains.html + \externalpage https://doc.qt.io/qtcreator/creator-tool-chains.html \title Qt Creator: Adding Compilers */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-qbs.html + \externalpage https://doc.qt.io/qtcreator/creator-project-qbs.html \title Qt Creator: Setting Up Qbs */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-creating.html + \externalpage https://doc.qt.io/qtcreator/creator-project-creating.html \title Qt Creator: Creating Projects */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-wizards.html + \externalpage https://doc.qt.io/qtcreator/creator-project-wizards.html \title Qt Creator: Adding New Custom Wizards */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-wizards-json.html - \title Qt Creator: Adding JSON-Based Wizards + \externalpage https://doc.qt.io/qtcreator/creator-project-meson.html + \title Qt Creator: Setting Up Meson */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-wizards-xml.html - \title Qt Creator: Adding XML-Based Wizards + \externalpage https://doc.qt.io/qtcreator/creator-project-nimble.html + \title Qt Creator: Setting Up Nimble */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-projects-autotools.html + \externalpage https://doc.qt.io/qtcreator/creator-project-incredibuild.html + \title Qt Creator: Setting Up IncrediBuild +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-project-conan.html + \title Qt Creator: Setting Up Conan +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-projects-autotools.html \title Qt Creator: Setting Up an Autotools Project */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-configuring-projects.html + \externalpage https://doc.qt.io/qtcreator/creator-configuring-projects.html \title Qt Creator: Configuring Projects */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-build-process-customizing.html + \externalpage https://doc.qt.io/qtcreator/creator-build-process-customizing.html \title Qt Creator: Customizing the Build Process */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-build-settings.html + \externalpage https://doc.qt.io/qtcreator/creator-build-settings.html \title Qt Creator: Specifying Build Settings */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-code-style-settings.html + \externalpage https://doc.qt.io/qtcreator/creator-build-settings-cmake.html + \title Qt Creator: CMake Build Configuration +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-build-settings-qmake.html + \title Qt Creator: qmake Build Configuration +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-build-settings-qbs.html + \title Qt Creator: Qbs Build Configuration +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-build-settings-meson.html + \title Qt Creator: Meson Build Configuration +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-build-settings-incredibuild.html + \title Qt Creator: IncrediBuild Build Configuration +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-build-settings-conan.html + \title Qt Creator: Conan Build Configuration +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-code-style-settings.html \title Qt Creator: Specifying Code Style Settings */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-run-settings.html + \externalpage https://doc.qt.io/qtcreator/creator-run-settings.html \title Qt Creator: Specifying Run Settings */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-qmake-libraries.html + \externalpage https://doc.qt.io/qtcreator/creator-project-qmake-libraries.html \title Qt Creator: Adding Libraries to Projects */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-other.html - \title Qt Creator: Using Other Build Systems + \externalpage https://doc.qt.io/qtcreator/creator-project-other.html + \title Qt Creator: Build Systems */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-running-targets.html + \externalpage https://doc.qt.io/qtcreator/creator-running-targets.html \title Qt Creator: Running on Multiple Platforms */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-build-dependencies.html + \externalpage https://doc.qt.io/qtcreator/creator-build-dependencies.html \title Qt Creator: Specifying Dependencies */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-building-running.html + \externalpage https://doc.qt.io/qtcreator/creator-project-settings-environment.html + \title Qt Creator: Specifying Environment Settings +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-custom-output-parsers.html + \title Qt Creator: Using Custom Output Parsers +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-building-running.html \title Qt Creator: Building and Running */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-editor-settings.html + \externalpage https://doc.qt.io/qtcreator/creator-editor-settings.html \title Qt Creator: Specifying Editor Settings */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-qmake.html + \externalpage https://doc.qt.io/qtcreator/creator-project-qmake.html \title Qt Creator: Adding Qt Versions */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-building-targets.html + \externalpage https://doc.qt.io/qtcreator/creator-building-targets.html \title Qt Creator: Building for Multiple Platforms */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-using-qt-designer.html + \externalpage https://doc.qt.io/qtcreator/creator-using-qt-designer.html \title Qt Creator: Developing Widget Based Applications */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-writing-program.html + \externalpage https://doc.qt.io/qtcreator/creator-writing-program.html \title Qt Creator: Creating a Qt Widget Based Application */ /*! - \externalpage http://doc.qt.io/qtcreator/adding-plugins.html + \externalpage https://doc.qt.io/qtcreator/adding-plugins.html \title Qt Creator: Adding Qt Designer Plugins */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-configuring.html + \externalpage https://doc.qt.io/qtcreator/creator-configuring.html \title Qt Creator: Configuring Qt Creator */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-debuggers.html + \externalpage https://doc.qt.io/qtcreator/creator-debuggers.html \title Qt Creator: Adding Debuggers */ /*! - \externalpage http://doc.qt.io/qtcreator/qt-creator-accelbubble-example.html + \externalpage https://doc.qt.io/qtcreator/qtcreator-accelbubble-example.html \title Qt Creator: Creating a Mobile Application */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-diff-editor.html + \externalpage https://doc.qt.io/qtcreator/creator-diff-editor.html \title Qt Creator: Comparing Files */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-beautifier.html + \externalpage https://doc.qt.io/qtcreator/creator-beautifier.html \title Qt Creator: Beautifying Source Code */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-clang-codemodel.html + \externalpage https://doc.qt.io/qtcreator/creator-clang-codemodel.html \title Qt Creator: Parsing C++ Files with the Clang Code Model */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-quick-ui-forms.html - \title Qt Creator: Qt Quick UI Forms + \externalpage https://doc.qt.io/qtcreator/creator-quick-ui-forms.html + \title Qt Creator: UI Files */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-clang-tools.html + \externalpage https://doc.qt.io/qtcreator/creator-clang-tools.html \title Qt Creator: Using Clang Tools */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-heob.html + \externalpage https://doc.qt.io/qtcreator/creator-heob.html \title Qt Creator: Detecting Memory Leaks with Heob */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-cpu-usage-analyzer.html + \externalpage https://doc.qt.io/qtcreator/creator-cpu-usage-analyzer.html \title Qt Creator: Analyzing CPU Usage */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-cppcheck.html + \externalpage https://doc.qt.io/qtcreator/creator-cppcheck.html \title Qt Creator: Analyzing Code with Cppcheck */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-autotest.html + \externalpage https://doc.qt.io/qtcreator/creator-ctf-visualizer.html + \title Qt Creator: Visualizing Chrome Trace Events +*/ +/*! + \externalpage https://doc.qt.io/qtcreator/creator-autotest.html \title Qt Creator: Running Autotests */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-project-creating.html#creating-c-classes + \externalpage https://doc.qt.io/qtcreator/creator-project-creating.html#creating-c-classes \title Qt Creator: Creating C++ Classes */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-writing-program.html + \externalpage https://doc.qt.io/qtcreator/creator-writing-program.html \title Creating a Qt Widget Based Application */ /*! - \externalpage http://doc.qt.io/qtcreator/qtquick-navigator.html - \title Qt Creator: Managing Item Hierarchy -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/qtquick-properties.html - \title Qt Creator: Specifying Item Properties -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/quick-states.html - \title Qt Creator: Adding States -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/creator-scxml.html + \externalpage https://doc.qt.io/qtcreator/creator-scxml.html \title Qt Creator: Editing State Charts */ /*! - \externalpage http://doc.qt.io/qtcreator/studio-timeline.html - \title Qt Creator: Creating Animations -*/ -/*! - \externalpage http://doc.qt.io/qtcreator/creator-language-servers.html + \externalpage https://doc.qt.io/qtcreator/creator-language-servers.html \title Qt Creator: Using Language Servers */ /*! - \externalpage http://doc.qt.io/qtcreator/qtcreator-toc.html + \externalpage https://doc.qt.io/qtcreator/qtcreator-toc.html \title Qt Creator: All Topics */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-live-preview.html - \title Qt Creator: Previewing + \externalpage https://doc.qt.io/qtcreator/creator-live-preview.html + \title Qt Creator: Validating with Target Hardware */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-live-preview-desktop.html + \externalpage https://doc.qt.io/qtcreator/creator-live-preview-desktop.html \title Qt Creator: Previewing on Desktop */ /*! - \externalpage http://doc.qt.io/qtcreator/creator-live-preview-devices.html + \externalpage https://doc.qt.io/qtcreator/creator-live-preview-devices.html \title Qt Creator: Previewing on Devices */ +/*! + \externalpage https://doc.qt.io/qtcreator/qt-design-viewer.html + \title Qt Creator: Previewing in Browsers +*/ diff --git a/doc/global/html-footer-online.qdocconf b/doc/global/html-footer-online.qdocconf index f255726c..523d228b 100644 --- a/doc/global/html-footer-online.qdocconf +++ b/doc/global/html-footer-online.qdocconf @@ -78,7 +78,7 @@ HTML.footer += \ " \n" \ "\n" \ "\n" \ diff --git a/doc/global/html-footer.qdocconf b/doc/global/html-footer.qdocconf index 5c29851e..673e5002 100644 --- a/doc/global/html-footer.qdocconf +++ b/doc/global/html-footer.qdocconf @@ -8,7 +8,7 @@ HTML.footer = \ "\n" \ "
\n" \ "

\n" \ - " © 2020 The Qt Company Ltd.\n" \ + " © 2022 The Qt Company Ltd.\n" \ " Documentation contributions included herein are the copyrights of\n" \ " their respective owners.
" \ " The documentation provided herein is licensed under the terms of the" \ diff --git a/doc/global/includes/standardpath/functiondocs.qdocinc b/doc/global/includes/standardpath/functiondocs.qdocinc index 4385b644..4cbf29cd 100644 --- a/doc/global/includes/standardpath/functiondocs.qdocinc +++ b/doc/global/includes/standardpath/functiondocs.qdocinc @@ -55,6 +55,9 @@ Returns the absolute file path to the executable, or an empty string if not found. + If the given \n executableName is an absolute path pointing to + an executable its clean path is returned. + //! [findExecutable] //! [locate] diff --git a/doc/global/qt-module-defaults-online.qdocconf b/doc/global/qt-module-defaults-online.qdocconf index 41fb8acc..635caf0b 100644 --- a/doc/global/qt-module-defaults-online.qdocconf +++ b/doc/global/qt-module-defaults-online.qdocconf @@ -5,7 +5,7 @@ HTML.footer = \ "

\n" \ "

\n" \ - " © 2020 The Qt Company Ltd.\n" \ + " © 2022 The Qt Company Ltd.\n" \ " Documentation contributions included herein are the copyrights of\n" \ " their respective owners. " \ " The documentation provided herein is licensed under the terms of the" \ diff --git a/doc/global/template/style/offline.css b/doc/global/template/style/offline.css index c6bc6a96..706b1eb3 100644 --- a/doc/global/template/style/offline.css +++ b/doc/global/template/style/offline.css @@ -145,7 +145,7 @@ Top navigation display: block; position: relative; text-align: right; - top: -47px; + top: -30px; float: right; height: 20px; z-index: 1; diff --git a/examples/widgets/graphicsview/chip/view.cpp b/examples/widgets/graphicsview/chip/view.cpp index 3b1718bd..32290546 100644 --- a/examples/widgets/graphicsview/chip/view.cpp +++ b/examples/widgets/graphicsview/chip/view.cpp @@ -69,9 +69,9 @@ void GraphicsView::wheelEvent(QWheelEvent *e) { if (e->modifiers() & Qt::ControlModifier) { if (e->angleDelta().y() > 0) - view->zoomIn(6); + view->zoomInBy(6); else - view->zoomOut(6); + view->zoomOutBy(6); e->accept(); } else { QGraphicsView::wheelEvent(e); @@ -274,12 +274,22 @@ void View::print() #endif } -void View::zoomIn(int level) +void View::zoomIn() +{ + zoomSlider->setValue(zoomSlider->value() + 1); +} + +void View::zoomOut() +{ + zoomSlider->setValue(zoomSlider->value() - 1); +} + +void View::zoomInBy(int level) { zoomSlider->setValue(zoomSlider->value() + level); } -void View::zoomOut(int level) +void View::zoomOutBy(int level) { zoomSlider->setValue(zoomSlider->value() - level); } diff --git a/examples/widgets/graphicsview/chip/view.h b/examples/widgets/graphicsview/chip/view.h index ea7bd414..cb5be628 100644 --- a/examples/widgets/graphicsview/chip/view.h +++ b/examples/widgets/graphicsview/chip/view.h @@ -86,8 +86,10 @@ public: QGraphicsView *view() const; public slots: - void zoomIn(int level = 1); - void zoomOut(int level = 1); + void zoomIn(); + void zoomOut(); + void zoomInBy(int level); + void zoomOutBy(int level); private slots: void resetView(); diff --git a/examples/widgets/widgets/windowflags/previewwindow.cpp b/examples/widgets/widgets/windowflags/previewwindow.cpp index d7ebed7b..c05e486c 100644 --- a/examples/widgets/widgets/windowflags/previewwindow.cpp +++ b/examples/widgets/widgets/windowflags/previewwindow.cpp @@ -124,6 +124,8 @@ void PreviewWindow::setWindowFlags(Qt::WindowFlags flags) text += "\n| Qt::WindowShadeButtonHint"; if (flags & Qt::WindowStaysOnTopHint) text += "\n| Qt::WindowStaysOnTopHint"; + if (flags & Qt::WindowStaysOnBottomHint) + text += "\n| Qt::WindowStaysOnBottomHint"; if (flags & Qt::CustomizeWindowHint) text += "\n| Qt::CustomizeWindowHint"; diff --git a/include/QtAccessibilitySupport/5.15.8/QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h b/include/QtAccessibilitySupport/5.15.10/QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h similarity index 100% rename from include/QtAccessibilitySupport/5.15.8/QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h rename to include/QtAccessibilitySupport/5.15.10/QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h diff --git a/include/QtAccessibilitySupport/qtaccessibilitysupportversion.h b/include/QtAccessibilitySupport/qtaccessibilitysupportversion.h index dcdc2726..983cf431 100644 --- a/include/QtAccessibilitySupport/qtaccessibilitysupportversion.h +++ b/include/QtAccessibilitySupport/qtaccessibilitysupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTACCESSIBILITYSUPPORT_VERSION_H #define QT_QTACCESSIBILITYSUPPORT_VERSION_H -#define QTACCESSIBILITYSUPPORT_VERSION_STR "5.15.8" +#define QTACCESSIBILITYSUPPORT_VERSION_STR "5.15.10" -#define QTACCESSIBILITYSUPPORT_VERSION 0x050F08 +#define QTACCESSIBILITYSUPPORT_VERSION 0x050F0A #endif // QT_QTACCESSIBILITYSUPPORT_VERSION_H diff --git a/include/QtClipboardSupport/5.15.8/QtClipboardSupport/private/qmacmime_p.h b/include/QtClipboardSupport/5.15.10/QtClipboardSupport/private/qmacmime_p.h similarity index 100% rename from include/QtClipboardSupport/5.15.8/QtClipboardSupport/private/qmacmime_p.h rename to include/QtClipboardSupport/5.15.10/QtClipboardSupport/private/qmacmime_p.h diff --git a/include/QtClipboardSupport/qtclipboardsupportversion.h b/include/QtClipboardSupport/qtclipboardsupportversion.h index 63394c20..f4c045ef 100644 --- a/include/QtClipboardSupport/qtclipboardsupportversion.h +++ b/include/QtClipboardSupport/qtclipboardsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTCLIPBOARDSUPPORT_VERSION_H #define QT_QTCLIPBOARDSUPPORT_VERSION_H -#define QTCLIPBOARDSUPPORT_VERSION_STR "5.15.8" +#define QTCLIPBOARDSUPPORT_VERSION_STR "5.15.10" -#define QTCLIPBOARDSUPPORT_VERSION 0x050F08 +#define QTCLIPBOARDSUPPORT_VERSION 0x050F0A #endif // QT_QTCLIPBOARDSUPPORT_VERSION_H diff --git a/include/QtConcurrent/qtconcurrentversion.h b/include/QtConcurrent/qtconcurrentversion.h index d50f3060..c7d0c7c1 100644 --- a/include/QtConcurrent/qtconcurrentversion.h +++ b/include/QtConcurrent/qtconcurrentversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTCONCURRENT_VERSION_H #define QT_QTCONCURRENT_VERSION_H -#define QTCONCURRENT_VERSION_STR "5.15.8" +#define QTCONCURRENT_VERSION_STR "5.15.10" -#define QTCONCURRENT_VERSION 0x050F08 +#define QTCONCURRENT_VERSION 0x050F0A #endif // QT_QTCONCURRENT_VERSION_H diff --git a/include/QtCore/5.15.8/QtCore/private/cp949codetbl_p.h b/include/QtCore/5.15.10/QtCore/private/cp949codetbl_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/cp949codetbl_p.h rename to include/QtCore/5.15.10/QtCore/private/cp949codetbl_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/minimum-linux_p.h b/include/QtCore/5.15.10/QtCore/private/minimum-linux_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/minimum-linux_p.h rename to include/QtCore/5.15.10/QtCore/private/minimum-linux_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qabstractanimation_p.h b/include/QtCore/5.15.10/QtCore/private/qabstractanimation_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qabstractanimation_p.h rename to include/QtCore/5.15.10/QtCore/private/qabstractanimation_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qabstracteventdispatcher_p.h b/include/QtCore/5.15.10/QtCore/private/qabstracteventdispatcher_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qabstracteventdispatcher_p.h rename to include/QtCore/5.15.10/QtCore/private/qabstracteventdispatcher_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qabstractfileengine_p.h b/include/QtCore/5.15.10/QtCore/private/qabstractfileengine_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qabstractfileengine_p.h rename to include/QtCore/5.15.10/QtCore/private/qabstractfileengine_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qabstractitemmodel_p.h b/include/QtCore/5.15.10/QtCore/private/qabstractitemmodel_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qabstractitemmodel_p.h rename to include/QtCore/5.15.10/QtCore/private/qabstractitemmodel_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qabstractproxymodel_p.h b/include/QtCore/5.15.10/QtCore/private/qabstractproxymodel_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qabstractproxymodel_p.h rename to include/QtCore/5.15.10/QtCore/private/qabstractproxymodel_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qabstractstate_p.h b/include/QtCore/5.15.10/QtCore/private/qabstractstate_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qabstractstate_p.h rename to include/QtCore/5.15.10/QtCore/private/qabstractstate_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qabstracttransition_p.h b/include/QtCore/5.15.10/QtCore/private/qabstracttransition_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qabstracttransition_p.h rename to include/QtCore/5.15.10/QtCore/private/qabstracttransition_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qanimationgroup_p.h b/include/QtCore/5.15.10/QtCore/private/qanimationgroup_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qanimationgroup_p.h rename to include/QtCore/5.15.10/QtCore/private/qanimationgroup_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qbig5codec_p.h b/include/QtCore/5.15.10/QtCore/private/qbig5codec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qbig5codec_p.h rename to include/QtCore/5.15.10/QtCore/private/qbig5codec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qbinaryjson_p.h b/include/QtCore/5.15.10/QtCore/private/qbinaryjson_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qbinaryjson_p.h rename to include/QtCore/5.15.10/QtCore/private/qbinaryjson_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qbinaryjsonarray_p.h b/include/QtCore/5.15.10/QtCore/private/qbinaryjsonarray_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qbinaryjsonarray_p.h rename to include/QtCore/5.15.10/QtCore/private/qbinaryjsonarray_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qbinaryjsonobject_p.h b/include/QtCore/5.15.10/QtCore/private/qbinaryjsonobject_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qbinaryjsonobject_p.h rename to include/QtCore/5.15.10/QtCore/private/qbinaryjsonobject_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qbinaryjsonvalue_p.h b/include/QtCore/5.15.10/QtCore/private/qbinaryjsonvalue_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qbinaryjsonvalue_p.h rename to include/QtCore/5.15.10/QtCore/private/qbinaryjsonvalue_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qbytearray_p.h b/include/QtCore/5.15.10/QtCore/private/qbytearray_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qbytearray_p.h rename to include/QtCore/5.15.10/QtCore/private/qbytearray_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qbytedata_p.h b/include/QtCore/5.15.10/QtCore/private/qbytedata_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qbytedata_p.h rename to include/QtCore/5.15.10/QtCore/private/qbytedata_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcalendarbackend_p.h b/include/QtCore/5.15.10/QtCore/private/qcalendarbackend_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcalendarbackend_p.h rename to include/QtCore/5.15.10/QtCore/private/qcalendarbackend_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcalendarmath_p.h b/include/QtCore/5.15.10/QtCore/private/qcalendarmath_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcalendarmath_p.h rename to include/QtCore/5.15.10/QtCore/private/qcalendarmath_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcborcommon_p.h b/include/QtCore/5.15.10/QtCore/private/qcborcommon_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcborcommon_p.h rename to include/QtCore/5.15.10/QtCore/private/qcborcommon_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcborvalue_p.h b/include/QtCore/5.15.10/QtCore/private/qcborvalue_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcborvalue_p.h rename to include/QtCore/5.15.10/QtCore/private/qcborvalue_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcfsocketnotifier_p.h b/include/QtCore/5.15.10/QtCore/private/qcfsocketnotifier_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcfsocketnotifier_p.h rename to include/QtCore/5.15.10/QtCore/private/qcfsocketnotifier_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcollator_p.h b/include/QtCore/5.15.10/QtCore/private/qcollator_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcollator_p.h rename to include/QtCore/5.15.10/QtCore/private/qcollator_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcore_mac_p.h b/include/QtCore/5.15.10/QtCore/private/qcore_mac_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcore_mac_p.h rename to include/QtCore/5.15.10/QtCore/private/qcore_mac_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcore_unix_p.h b/include/QtCore/5.15.10/QtCore/private/qcore_unix_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcore_unix_p.h rename to include/QtCore/5.15.10/QtCore/private/qcore_unix_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcoreapplication_p.h b/include/QtCore/5.15.10/QtCore/private/qcoreapplication_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcoreapplication_p.h rename to include/QtCore/5.15.10/QtCore/private/qcoreapplication_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcorecmdlineargs_p.h b/include/QtCore/5.15.10/QtCore/private/qcorecmdlineargs_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcorecmdlineargs_p.h rename to include/QtCore/5.15.10/QtCore/private/qcorecmdlineargs_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qcoreglobaldata_p.h b/include/QtCore/5.15.10/QtCore/private/qcoreglobaldata_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qcoreglobaldata_p.h rename to include/QtCore/5.15.10/QtCore/private/qcoreglobaldata_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qdatastream_p.h b/include/QtCore/5.15.10/QtCore/private/qdatastream_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qdatastream_p.h rename to include/QtCore/5.15.10/QtCore/private/qdatastream_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qdataurl_p.h b/include/QtCore/5.15.10/QtCore/private/qdataurl_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qdataurl_p.h rename to include/QtCore/5.15.10/QtCore/private/qdataurl_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qdatetime_p.h b/include/QtCore/5.15.10/QtCore/private/qdatetime_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qdatetime_p.h rename to include/QtCore/5.15.10/QtCore/private/qdatetime_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qdatetimeparser_p.h b/include/QtCore/5.15.10/QtCore/private/qdatetimeparser_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qdatetimeparser_p.h rename to include/QtCore/5.15.10/QtCore/private/qdatetimeparser_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qdeadlinetimer_p.h b/include/QtCore/5.15.10/QtCore/private/qdeadlinetimer_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qdeadlinetimer_p.h rename to include/QtCore/5.15.10/QtCore/private/qdeadlinetimer_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qdebug_p.h b/include/QtCore/5.15.10/QtCore/private/qdebug_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qdebug_p.h rename to include/QtCore/5.15.10/QtCore/private/qdebug_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qdir_p.h b/include/QtCore/5.15.10/QtCore/private/qdir_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qdir_p.h rename to include/QtCore/5.15.10/QtCore/private/qdir_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qdoublescanprint_p.h b/include/QtCore/5.15.10/QtCore/private/qdoublescanprint_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qdoublescanprint_p.h rename to include/QtCore/5.15.10/QtCore/private/qdoublescanprint_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qduplicatetracker_p.h b/include/QtCore/5.15.10/QtCore/private/qduplicatetracker_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qduplicatetracker_p.h rename to include/QtCore/5.15.10/QtCore/private/qduplicatetracker_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qelfparser_p.h b/include/QtCore/5.15.10/QtCore/private/qelfparser_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qelfparser_p.h rename to include/QtCore/5.15.10/QtCore/private/qelfparser_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qendian_p.h b/include/QtCore/5.15.10/QtCore/private/qendian_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qendian_p.h rename to include/QtCore/5.15.10/QtCore/private/qendian_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qeucjpcodec_p.h b/include/QtCore/5.15.10/QtCore/private/qeucjpcodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qeucjpcodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qeucjpcodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qeuckrcodec_p.h b/include/QtCore/5.15.10/QtCore/private/qeuckrcodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qeuckrcodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qeuckrcodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qeventdispatcher_cf_p.h b/include/QtCore/5.15.10/QtCore/private/qeventdispatcher_cf_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qeventdispatcher_cf_p.h rename to include/QtCore/5.15.10/QtCore/private/qeventdispatcher_cf_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qeventdispatcher_glib_p.h b/include/QtCore/5.15.10/QtCore/private/qeventdispatcher_glib_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qeventdispatcher_glib_p.h rename to include/QtCore/5.15.10/QtCore/private/qeventdispatcher_glib_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qeventdispatcher_unix_p.h b/include/QtCore/5.15.10/QtCore/private/qeventdispatcher_unix_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qeventdispatcher_unix_p.h rename to include/QtCore/5.15.10/QtCore/private/qeventdispatcher_unix_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qeventdispatcher_win_p.h b/include/QtCore/5.15.10/QtCore/private/qeventdispatcher_win_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qeventdispatcher_win_p.h rename to include/QtCore/5.15.10/QtCore/private/qeventdispatcher_win_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qeventdispatcher_winrt_p.h b/include/QtCore/5.15.10/QtCore/private/qeventdispatcher_winrt_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qeventdispatcher_winrt_p.h rename to include/QtCore/5.15.10/QtCore/private/qeventdispatcher_winrt_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qeventloop_p.h b/include/QtCore/5.15.10/QtCore/private/qeventloop_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qeventloop_p.h rename to include/QtCore/5.15.10/QtCore/private/qeventloop_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qeventtransition_p.h b/include/QtCore/5.15.10/QtCore/private/qeventtransition_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qeventtransition_p.h rename to include/QtCore/5.15.10/QtCore/private/qeventtransition_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfactoryloader_p.h b/include/QtCore/5.15.10/QtCore/private/qfactoryloader_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfactoryloader_p.h rename to include/QtCore/5.15.10/QtCore/private/qfactoryloader_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfile_p.h b/include/QtCore/5.15.10/QtCore/private/qfile_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfile_p.h rename to include/QtCore/5.15.10/QtCore/private/qfile_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfiledevice_p.h b/include/QtCore/5.15.10/QtCore/private/qfiledevice_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfiledevice_p.h rename to include/QtCore/5.15.10/QtCore/private/qfiledevice_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfileinfo_p.h b/include/QtCore/5.15.10/QtCore/private/qfileinfo_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfileinfo_p.h rename to include/QtCore/5.15.10/QtCore/private/qfileinfo_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfileselector_p.h b/include/QtCore/5.15.10/QtCore/private/qfileselector_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfileselector_p.h rename to include/QtCore/5.15.10/QtCore/private/qfileselector_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystemengine_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystemengine_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystemengine_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystemengine_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystementry_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystementry_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystementry_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystementry_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystemiterator_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystemiterator_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystemiterator_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystemiterator_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystemmetadata_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystemmetadata_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystemmetadata_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystemmetadata_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_fsevents_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_fsevents_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_fsevents_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_fsevents_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_inotify_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_inotify_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_inotify_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_inotify_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_kqueue_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_kqueue_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_kqueue_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_kqueue_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_polling_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_polling_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_polling_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_polling_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_win_p.h b/include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_win_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfilesystemwatcher_win_p.h rename to include/QtCore/5.15.10/QtCore/private/qfilesystemwatcher_win_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfinalstate_p.h b/include/QtCore/5.15.10/QtCore/private/qfinalstate_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfinalstate_p.h rename to include/QtCore/5.15.10/QtCore/private/qfinalstate_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfreelist_p.h b/include/QtCore/5.15.10/QtCore/private/qfreelist_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfreelist_p.h rename to include/QtCore/5.15.10/QtCore/private/qfreelist_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfsfileengine_iterator_p.h b/include/QtCore/5.15.10/QtCore/private/qfsfileengine_iterator_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfsfileengine_iterator_p.h rename to include/QtCore/5.15.10/QtCore/private/qfsfileengine_iterator_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfsfileengine_p.h b/include/QtCore/5.15.10/QtCore/private/qfsfileengine_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfsfileengine_p.h rename to include/QtCore/5.15.10/QtCore/private/qfsfileengine_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfunctions_fake_env_p.h b/include/QtCore/5.15.10/QtCore/private/qfunctions_fake_env_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfunctions_fake_env_p.h rename to include/QtCore/5.15.10/QtCore/private/qfunctions_fake_env_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfunctions_p.h b/include/QtCore/5.15.10/QtCore/private/qfunctions_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfunctions_p.h rename to include/QtCore/5.15.10/QtCore/private/qfunctions_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfutex_p.h b/include/QtCore/5.15.10/QtCore/private/qfutex_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfutex_p.h rename to include/QtCore/5.15.10/QtCore/private/qfutex_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfutureinterface_p.h b/include/QtCore/5.15.10/QtCore/private/qfutureinterface_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfutureinterface_p.h rename to include/QtCore/5.15.10/QtCore/private/qfutureinterface_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qfuturewatcher_p.h b/include/QtCore/5.15.10/QtCore/private/qfuturewatcher_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qfuturewatcher_p.h rename to include/QtCore/5.15.10/QtCore/private/qfuturewatcher_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qgb18030codec_p.h b/include/QtCore/5.15.10/QtCore/private/qgb18030codec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qgb18030codec_p.h rename to include/QtCore/5.15.10/QtCore/private/qgb18030codec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qglobal_p.h b/include/QtCore/5.15.10/QtCore/private/qglobal_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qglobal_p.h rename to include/QtCore/5.15.10/QtCore/private/qglobal_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qgregoriancalendar_p.h b/include/QtCore/5.15.10/QtCore/private/qgregoriancalendar_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qgregoriancalendar_p.h rename to include/QtCore/5.15.10/QtCore/private/qgregoriancalendar_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qharfbuzz_p.h b/include/QtCore/5.15.10/QtCore/private/qharfbuzz_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qharfbuzz_p.h rename to include/QtCore/5.15.10/QtCore/private/qharfbuzz_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qhijricalendar_data_p.h b/include/QtCore/5.15.10/QtCore/private/qhijricalendar_data_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qhijricalendar_data_p.h rename to include/QtCore/5.15.10/QtCore/private/qhijricalendar_data_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qhijricalendar_p.h b/include/QtCore/5.15.10/QtCore/private/qhijricalendar_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qhijricalendar_p.h rename to include/QtCore/5.15.10/QtCore/private/qhijricalendar_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qhistorystate_p.h b/include/QtCore/5.15.10/QtCore/private/qhistorystate_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qhistorystate_p.h rename to include/QtCore/5.15.10/QtCore/private/qhistorystate_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qhooks_p.h b/include/QtCore/5.15.10/QtCore/private/qhooks_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qhooks_p.h rename to include/QtCore/5.15.10/QtCore/private/qhooks_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qiconvcodec_p.h b/include/QtCore/5.15.10/QtCore/private/qiconvcodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qiconvcodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qiconvcodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qicucodec_p.h b/include/QtCore/5.15.10/QtCore/private/qicucodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qicucodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qicucodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qiodevice_p.h b/include/QtCore/5.15.10/QtCore/private/qiodevice_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qiodevice_p.h rename to include/QtCore/5.15.10/QtCore/private/qiodevice_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qipaddress_p.h b/include/QtCore/5.15.10/QtCore/private/qipaddress_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qipaddress_p.h rename to include/QtCore/5.15.10/QtCore/private/qipaddress_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qisciicodec_p.h b/include/QtCore/5.15.10/QtCore/private/qisciicodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qisciicodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qisciicodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qislamiccivilcalendar_p.h b/include/QtCore/5.15.10/QtCore/private/qislamiccivilcalendar_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qislamiccivilcalendar_p.h rename to include/QtCore/5.15.10/QtCore/private/qislamiccivilcalendar_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qitemselectionmodel_p.h b/include/QtCore/5.15.10/QtCore/private/qitemselectionmodel_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qitemselectionmodel_p.h rename to include/QtCore/5.15.10/QtCore/private/qitemselectionmodel_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjalalicalendar_data_p.h b/include/QtCore/5.15.10/QtCore/private/qjalalicalendar_data_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjalalicalendar_data_p.h rename to include/QtCore/5.15.10/QtCore/private/qjalalicalendar_data_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjalalicalendar_p.h b/include/QtCore/5.15.10/QtCore/private/qjalalicalendar_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjalalicalendar_p.h rename to include/QtCore/5.15.10/QtCore/private/qjalalicalendar_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjiscodec_p.h b/include/QtCore/5.15.10/QtCore/private/qjiscodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjiscodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qjiscodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjni_p.h b/include/QtCore/5.15.10/QtCore/private/qjni_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjni_p.h rename to include/QtCore/5.15.10/QtCore/private/qjni_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjnihelpers_p.h b/include/QtCore/5.15.10/QtCore/private/qjnihelpers_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjnihelpers_p.h rename to include/QtCore/5.15.10/QtCore/private/qjnihelpers_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjpunicode_p.h b/include/QtCore/5.15.10/QtCore/private/qjpunicode_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjpunicode_p.h rename to include/QtCore/5.15.10/QtCore/private/qjpunicode_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjson_p.h b/include/QtCore/5.15.10/QtCore/private/qjson_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjson_p.h rename to include/QtCore/5.15.10/QtCore/private/qjson_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjsonparser_p.h b/include/QtCore/5.15.10/QtCore/private/qjsonparser_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjsonparser_p.h rename to include/QtCore/5.15.10/QtCore/private/qjsonparser_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjsonwriter_p.h b/include/QtCore/5.15.10/QtCore/private/qjsonwriter_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjsonwriter_p.h rename to include/QtCore/5.15.10/QtCore/private/qjsonwriter_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qjuliancalendar_p.h b/include/QtCore/5.15.10/QtCore/private/qjuliancalendar_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qjuliancalendar_p.h rename to include/QtCore/5.15.10/QtCore/private/qjuliancalendar_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qlatincodec_p.h b/include/QtCore/5.15.10/QtCore/private/qlatincodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qlatincodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qlatincodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qlibrary_p.h b/include/QtCore/5.15.10/QtCore/private/qlibrary_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qlibrary_p.h rename to include/QtCore/5.15.10/QtCore/private/qlibrary_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qlocale_data_p.h b/include/QtCore/5.15.10/QtCore/private/qlocale_data_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qlocale_data_p.h rename to include/QtCore/5.15.10/QtCore/private/qlocale_data_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qlocale_p.h b/include/QtCore/5.15.10/QtCore/private/qlocale_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qlocale_p.h rename to include/QtCore/5.15.10/QtCore/private/qlocale_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qlocale_tools_p.h b/include/QtCore/5.15.10/QtCore/private/qlocale_tools_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qlocale_tools_p.h rename to include/QtCore/5.15.10/QtCore/private/qlocale_tools_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qlockfile_p.h b/include/QtCore/5.15.10/QtCore/private/qlockfile_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qlockfile_p.h rename to include/QtCore/5.15.10/QtCore/private/qlockfile_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qlocking_p.h b/include/QtCore/5.15.10/QtCore/private/qlocking_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qlocking_p.h rename to include/QtCore/5.15.10/QtCore/private/qlocking_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qlogging_p.h b/include/QtCore/5.15.10/QtCore/private/qlogging_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qlogging_p.h rename to include/QtCore/5.15.10/QtCore/private/qlogging_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qloggingregistry_p.h b/include/QtCore/5.15.10/QtCore/private/qloggingregistry_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qloggingregistry_p.h rename to include/QtCore/5.15.10/QtCore/private/qloggingregistry_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmachparser_p.h b/include/QtCore/5.15.10/QtCore/private/qmachparser_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmachparser_p.h rename to include/QtCore/5.15.10/QtCore/private/qmachparser_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmakearray_p.h b/include/QtCore/5.15.10/QtCore/private/qmakearray_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmakearray_p.h rename to include/QtCore/5.15.10/QtCore/private/qmakearray_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmemory_p.h b/include/QtCore/5.15.10/QtCore/private/qmemory_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmemory_p.h rename to include/QtCore/5.15.10/QtCore/private/qmemory_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmetaobject_moc_p.h b/include/QtCore/5.15.10/QtCore/private/qmetaobject_moc_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmetaobject_moc_p.h rename to include/QtCore/5.15.10/QtCore/private/qmetaobject_moc_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmetaobject_p.h b/include/QtCore/5.15.10/QtCore/private/qmetaobject_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmetaobject_p.h rename to include/QtCore/5.15.10/QtCore/private/qmetaobject_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmetaobjectbuilder_p.h b/include/QtCore/5.15.10/QtCore/private/qmetaobjectbuilder_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmetaobjectbuilder_p.h rename to include/QtCore/5.15.10/QtCore/private/qmetaobjectbuilder_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmetatype_p.h b/include/QtCore/5.15.10/QtCore/private/qmetatype_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmetatype_p.h rename to include/QtCore/5.15.10/QtCore/private/qmetatype_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmetatypeswitcher_p.h b/include/QtCore/5.15.10/QtCore/private/qmetatypeswitcher_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmetatypeswitcher_p.h rename to include/QtCore/5.15.10/QtCore/private/qmetatypeswitcher_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmilankoviccalendar_p.h b/include/QtCore/5.15.10/QtCore/private/qmilankoviccalendar_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmilankoviccalendar_p.h rename to include/QtCore/5.15.10/QtCore/private/qmilankoviccalendar_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmimedatabase_p.h b/include/QtCore/5.15.10/QtCore/private/qmimedatabase_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmimedatabase_p.h rename to include/QtCore/5.15.10/QtCore/private/qmimedatabase_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmimeglobpattern_p.h b/include/QtCore/5.15.10/QtCore/private/qmimeglobpattern_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmimeglobpattern_p.h rename to include/QtCore/5.15.10/QtCore/private/qmimeglobpattern_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmimemagicrule_p.h b/include/QtCore/5.15.10/QtCore/private/qmimemagicrule_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmimemagicrule_p.h rename to include/QtCore/5.15.10/QtCore/private/qmimemagicrule_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmimemagicrulematcher_p.h b/include/QtCore/5.15.10/QtCore/private/qmimemagicrulematcher_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmimemagicrulematcher_p.h rename to include/QtCore/5.15.10/QtCore/private/qmimemagicrulematcher_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmimeprovider_p.h b/include/QtCore/5.15.10/QtCore/private/qmimeprovider_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmimeprovider_p.h rename to include/QtCore/5.15.10/QtCore/private/qmimeprovider_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmimetype_p.h b/include/QtCore/5.15.10/QtCore/private/qmimetype_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmimetype_p.h rename to include/QtCore/5.15.10/QtCore/private/qmimetype_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmimetypeparser_p.h b/include/QtCore/5.15.10/QtCore/private/qmimetypeparser_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmimetypeparser_p.h rename to include/QtCore/5.15.10/QtCore/private/qmimetypeparser_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qmutex_p.h b/include/QtCore/5.15.10/QtCore/private/qmutex_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qmutex_p.h rename to include/QtCore/5.15.10/QtCore/private/qmutex_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qnoncontiguousbytedevice_p.h b/include/QtCore/5.15.10/QtCore/private/qnoncontiguousbytedevice_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qnoncontiguousbytedevice_p.h rename to include/QtCore/5.15.10/QtCore/private/qnoncontiguousbytedevice_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qnumeric_p.h b/include/QtCore/5.15.10/QtCore/private/qnumeric_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qnumeric_p.h rename to include/QtCore/5.15.10/QtCore/private/qnumeric_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qobject_p.h b/include/QtCore/5.15.10/QtCore/private/qobject_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qobject_p.h rename to include/QtCore/5.15.10/QtCore/private/qobject_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qoffsetstringarray_p.h b/include/QtCore/5.15.10/QtCore/private/qoffsetstringarray_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qoffsetstringarray_p.h rename to include/QtCore/5.15.10/QtCore/private/qoffsetstringarray_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qoperatingsystemversion_p.h b/include/QtCore/5.15.10/QtCore/private/qoperatingsystemversion_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qoperatingsystemversion_p.h rename to include/QtCore/5.15.10/QtCore/private/qoperatingsystemversion_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qoperatingsystemversion_win_p.h b/include/QtCore/5.15.10/QtCore/private/qoperatingsystemversion_win_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qoperatingsystemversion_win_p.h rename to include/QtCore/5.15.10/QtCore/private/qoperatingsystemversion_win_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qorderedmutexlocker_p.h b/include/QtCore/5.15.10/QtCore/private/qorderedmutexlocker_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qorderedmutexlocker_p.h rename to include/QtCore/5.15.10/QtCore/private/qorderedmutexlocker_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qparallelanimationgroup_p.h b/include/QtCore/5.15.10/QtCore/private/qparallelanimationgroup_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qparallelanimationgroup_p.h rename to include/QtCore/5.15.10/QtCore/private/qparallelanimationgroup_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qplugin_p.h b/include/QtCore/5.15.10/QtCore/private/qplugin_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qplugin_p.h rename to include/QtCore/5.15.10/QtCore/private/qplugin_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qpoll_p.h b/include/QtCore/5.15.10/QtCore/private/qpoll_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qpoll_p.h rename to include/QtCore/5.15.10/QtCore/private/qpoll_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qppsattribute_p.h b/include/QtCore/5.15.10/QtCore/private/qppsattribute_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qppsattribute_p.h rename to include/QtCore/5.15.10/QtCore/private/qppsattribute_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qppsattributeprivate_p.h b/include/QtCore/5.15.10/QtCore/private/qppsattributeprivate_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qppsattributeprivate_p.h rename to include/QtCore/5.15.10/QtCore/private/qppsattributeprivate_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qppsobject_p.h b/include/QtCore/5.15.10/QtCore/private/qppsobject_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qppsobject_p.h rename to include/QtCore/5.15.10/QtCore/private/qppsobject_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qppsobjectprivate_p.h b/include/QtCore/5.15.10/QtCore/private/qppsobjectprivate_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qppsobjectprivate_p.h rename to include/QtCore/5.15.10/QtCore/private/qppsobjectprivate_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qprocess_p.h b/include/QtCore/5.15.10/QtCore/private/qprocess_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qprocess_p.h rename to include/QtCore/5.15.10/QtCore/private/qprocess_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qpropertyanimation_p.h b/include/QtCore/5.15.10/QtCore/private/qpropertyanimation_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qpropertyanimation_p.h rename to include/QtCore/5.15.10/QtCore/private/qpropertyanimation_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qrandom_p.h b/include/QtCore/5.15.10/QtCore/private/qrandom_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qrandom_p.h rename to include/QtCore/5.15.10/QtCore/private/qrandom_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qreadwritelock_p.h b/include/QtCore/5.15.10/QtCore/private/qreadwritelock_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qreadwritelock_p.h rename to include/QtCore/5.15.10/QtCore/private/qreadwritelock_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qresource_iterator_p.h b/include/QtCore/5.15.10/QtCore/private/qresource_iterator_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qresource_iterator_p.h rename to include/QtCore/5.15.10/QtCore/private/qresource_iterator_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qresource_p.h b/include/QtCore/5.15.10/QtCore/private/qresource_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qresource_p.h rename to include/QtCore/5.15.10/QtCore/private/qresource_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qringbuffer_p.h b/include/QtCore/5.15.10/QtCore/private/qringbuffer_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qringbuffer_p.h rename to include/QtCore/5.15.10/QtCore/private/qringbuffer_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qromancalendar_data_p.h b/include/QtCore/5.15.10/QtCore/private/qromancalendar_data_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qromancalendar_data_p.h rename to include/QtCore/5.15.10/QtCore/private/qromancalendar_data_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qromancalendar_p.h b/include/QtCore/5.15.10/QtCore/private/qromancalendar_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qromancalendar_p.h rename to include/QtCore/5.15.10/QtCore/private/qromancalendar_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsavefile_p.h b/include/QtCore/5.15.10/QtCore/private/qsavefile_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsavefile_p.h rename to include/QtCore/5.15.10/QtCore/private/qsavefile_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qscopedpointer_p.h b/include/QtCore/5.15.10/QtCore/private/qscopedpointer_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qscopedpointer_p.h rename to include/QtCore/5.15.10/QtCore/private/qscopedpointer_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsequentialanimationgroup_p.h b/include/QtCore/5.15.10/QtCore/private/qsequentialanimationgroup_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsequentialanimationgroup_p.h rename to include/QtCore/5.15.10/QtCore/private/qsequentialanimationgroup_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsettings_p.h b/include/QtCore/5.15.10/QtCore/private/qsettings_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsettings_p.h rename to include/QtCore/5.15.10/QtCore/private/qsettings_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsharedmemory_p.h b/include/QtCore/5.15.10/QtCore/private/qsharedmemory_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsharedmemory_p.h rename to include/QtCore/5.15.10/QtCore/private/qsharedmemory_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsignaleventgenerator_p.h b/include/QtCore/5.15.10/QtCore/private/qsignaleventgenerator_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsignaleventgenerator_p.h rename to include/QtCore/5.15.10/QtCore/private/qsignaleventgenerator_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsignaltransition_p.h b/include/QtCore/5.15.10/QtCore/private/qsignaltransition_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsignaltransition_p.h rename to include/QtCore/5.15.10/QtCore/private/qsignaltransition_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsimd_p.h b/include/QtCore/5.15.10/QtCore/private/qsimd_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsimd_p.h rename to include/QtCore/5.15.10/QtCore/private/qsimd_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsimd_x86_p.h b/include/QtCore/5.15.10/QtCore/private/qsimd_x86_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsimd_x86_p.h rename to include/QtCore/5.15.10/QtCore/private/qsimd_x86_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsimplecodec_p.h b/include/QtCore/5.15.10/QtCore/private/qsimplecodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsimplecodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qsimplecodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsjiscodec_p.h b/include/QtCore/5.15.10/QtCore/private/qsjiscodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsjiscodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qsjiscodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qstate_p.h b/include/QtCore/5.15.10/QtCore/private/qstate_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qstate_p.h rename to include/QtCore/5.15.10/QtCore/private/qstate_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qstatemachine_p.h b/include/QtCore/5.15.10/QtCore/private/qstatemachine_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qstatemachine_p.h rename to include/QtCore/5.15.10/QtCore/private/qstatemachine_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qstdweb_p.h b/include/QtCore/5.15.10/QtCore/private/qstdweb_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qstdweb_p.h rename to include/QtCore/5.15.10/QtCore/private/qstdweb_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qstorageinfo_p.h b/include/QtCore/5.15.10/QtCore/private/qstorageinfo_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qstorageinfo_p.h rename to include/QtCore/5.15.10/QtCore/private/qstorageinfo_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qstringalgorithms_p.h b/include/QtCore/5.15.10/QtCore/private/qstringalgorithms_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qstringalgorithms_p.h rename to include/QtCore/5.15.10/QtCore/private/qstringalgorithms_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qstringiterator_p.h b/include/QtCore/5.15.10/QtCore/private/qstringiterator_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qstringiterator_p.h rename to include/QtCore/5.15.10/QtCore/private/qstringiterator_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsystemerror_p.h b/include/QtCore/5.15.10/QtCore/private/qsystemerror_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsystemerror_p.h rename to include/QtCore/5.15.10/QtCore/private/qsystemerror_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsystemlibrary_p.h b/include/QtCore/5.15.10/QtCore/private/qsystemlibrary_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsystemlibrary_p.h rename to include/QtCore/5.15.10/QtCore/private/qsystemlibrary_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qsystemsemaphore_p.h b/include/QtCore/5.15.10/QtCore/private/qsystemsemaphore_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qsystemsemaphore_p.h rename to include/QtCore/5.15.10/QtCore/private/qsystemsemaphore_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qt_pch.h b/include/QtCore/5.15.10/QtCore/private/qt_pch.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qt_pch.h rename to include/QtCore/5.15.10/QtCore/private/qt_pch.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtemporaryfile_p.h b/include/QtCore/5.15.10/QtCore/private/qtemporaryfile_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtemporaryfile_p.h rename to include/QtCore/5.15.10/QtCore/private/qtemporaryfile_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtextcodec_p.h b/include/QtCore/5.15.10/QtCore/private/qtextcodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtextcodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qtextcodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtextstream_p.h b/include/QtCore/5.15.10/QtCore/private/qtextstream_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtextstream_p.h rename to include/QtCore/5.15.10/QtCore/private/qtextstream_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qthread_p.h b/include/QtCore/5.15.10/QtCore/private/qthread_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qthread_p.h rename to include/QtCore/5.15.10/QtCore/private/qthread_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qthreadpool_p.h b/include/QtCore/5.15.10/QtCore/private/qthreadpool_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qthreadpool_p.h rename to include/QtCore/5.15.10/QtCore/private/qthreadpool_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtimerinfo_unix_p.h b/include/QtCore/5.15.10/QtCore/private/qtimerinfo_unix_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtimerinfo_unix_p.h rename to include/QtCore/5.15.10/QtCore/private/qtimerinfo_unix_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtimezoneprivate_data_p.h b/include/QtCore/5.15.10/QtCore/private/qtimezoneprivate_data_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtimezoneprivate_data_p.h rename to include/QtCore/5.15.10/QtCore/private/qtimezoneprivate_data_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtimezoneprivate_p.h b/include/QtCore/5.15.10/QtCore/private/qtimezoneprivate_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtimezoneprivate_p.h rename to include/QtCore/5.15.10/QtCore/private/qtimezoneprivate_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtldurl_p.h b/include/QtCore/5.15.10/QtCore/private/qtldurl_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtldurl_p.h rename to include/QtCore/5.15.10/QtCore/private/qtldurl_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtools_p.h b/include/QtCore/5.15.10/QtCore/private/qtools_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtools_p.h rename to include/QtCore/5.15.10/QtCore/private/qtools_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtrace_p.h b/include/QtCore/5.15.10/QtCore/private/qtrace_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtrace_p.h rename to include/QtCore/5.15.10/QtCore/private/qtrace_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtranslator_p.h b/include/QtCore/5.15.10/QtCore/private/qtranslator_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtranslator_p.h rename to include/QtCore/5.15.10/QtCore/private/qtranslator_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtransposeproxymodel_p.h b/include/QtCore/5.15.10/QtCore/private/qtransposeproxymodel_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtransposeproxymodel_p.h rename to include/QtCore/5.15.10/QtCore/private/qtransposeproxymodel_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qtsciicodec_p.h b/include/QtCore/5.15.10/QtCore/private/qtsciicodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qtsciicodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qtsciicodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qunicodetables_p.h b/include/QtCore/5.15.10/QtCore/private/qunicodetables_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qunicodetables_p.h rename to include/QtCore/5.15.10/QtCore/private/qunicodetables_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qunicodetools_p.h b/include/QtCore/5.15.10/QtCore/private/qunicodetools_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qunicodetools_p.h rename to include/QtCore/5.15.10/QtCore/private/qunicodetools_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qurl_p.h b/include/QtCore/5.15.10/QtCore/private/qurl_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qurl_p.h rename to include/QtCore/5.15.10/QtCore/private/qurl_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qurltlds_p.h b/include/QtCore/5.15.10/QtCore/private/qurltlds_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qurltlds_p.h rename to include/QtCore/5.15.10/QtCore/private/qurltlds_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qutfcodec_p.h b/include/QtCore/5.15.10/QtCore/private/qutfcodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qutfcodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qutfcodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qvariant_p.h b/include/QtCore/5.15.10/QtCore/private/qvariant_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qvariant_p.h rename to include/QtCore/5.15.10/QtCore/private/qvariant_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qvariantanimation_p.h b/include/QtCore/5.15.10/QtCore/private/qvariantanimation_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qvariantanimation_p.h rename to include/QtCore/5.15.10/QtCore/private/qvariantanimation_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qwaitcondition_p.h b/include/QtCore/5.15.10/QtCore/private/qwaitcondition_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qwaitcondition_p.h rename to include/QtCore/5.15.10/QtCore/private/qwaitcondition_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qwindowscodec_p.h b/include/QtCore/5.15.10/QtCore/private/qwindowscodec_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qwindowscodec_p.h rename to include/QtCore/5.15.10/QtCore/private/qwindowscodec_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qwindowspipereader_p.h b/include/QtCore/5.15.10/QtCore/private/qwindowspipereader_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qwindowspipereader_p.h rename to include/QtCore/5.15.10/QtCore/private/qwindowspipereader_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qwindowspipewriter_p.h b/include/QtCore/5.15.10/QtCore/private/qwindowspipewriter_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qwindowspipewriter_p.h rename to include/QtCore/5.15.10/QtCore/private/qwindowspipewriter_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qwineventnotifier_p.h b/include/QtCore/5.15.10/QtCore/private/qwineventnotifier_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qwineventnotifier_p.h rename to include/QtCore/5.15.10/QtCore/private/qwineventnotifier_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qwinregistry_p.h b/include/QtCore/5.15.10/QtCore/private/qwinregistry_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qwinregistry_p.h rename to include/QtCore/5.15.10/QtCore/private/qwinregistry_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qxmlstream_p.h b/include/QtCore/5.15.10/QtCore/private/qxmlstream_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qxmlstream_p.h rename to include/QtCore/5.15.10/QtCore/private/qxmlstream_p.h diff --git a/include/QtCore/5.15.8/QtCore/private/qxmlutils_p.h b/include/QtCore/5.15.10/QtCore/private/qxmlutils_p.h similarity index 100% rename from include/QtCore/5.15.8/QtCore/private/qxmlutils_p.h rename to include/QtCore/5.15.10/QtCore/private/qxmlutils_p.h diff --git a/include/QtCore/headers.pri b/include/QtCore/headers.pri index e8818bd4..1389ede1 100644 --- a/include/QtCore/headers.pri +++ b/include/QtCore/headers.pri @@ -3,4 +3,4 @@ SYNCQT.GENERATED_HEADER_FILES = QAbstractAnimation QAnimationDriver QAnimationGr SYNCQT.PRIVATE_HEADER_FILES = animation/qabstractanimation_p.h animation/qanimationgroup_p.h animation/qparallelanimationgroup_p.h animation/qpropertyanimation_p.h animation/qsequentialanimationgroup_p.h animation/qvariantanimation_p.h codecs/cp949codetbl_p.h codecs/qbig5codec_p.h codecs/qeucjpcodec_p.h codecs/qeuckrcodec_p.h codecs/qgb18030codec_p.h codecs/qiconvcodec_p.h codecs/qicucodec_p.h codecs/qisciicodec_p.h codecs/qjiscodec_p.h codecs/qjpunicode_p.h codecs/qlatincodec_p.h codecs/qsimplecodec_p.h codecs/qsjiscodec_p.h codecs/qtextcodec_p.h codecs/qtsciicodec_p.h codecs/qutfcodec_p.h codecs/qwindowscodec_p.h global/minimum-linux_p.h global/qendian_p.h global/qglobal_p.h global/qhooks_p.h global/qlogging_p.h global/qmemory_p.h global/qnumeric_p.h global/qoperatingsystemversion_p.h global/qoperatingsystemversion_win_p.h global/qrandom_p.h global/qt_pch.h global/qtrace_p.h io/qabstractfileengine_p.h io/qdataurl_p.h io/qdebug_p.h io/qdir_p.h io/qfile_p.h io/qfiledevice_p.h io/qfileinfo_p.h io/qfileselector_p.h io/qfilesystemengine_p.h io/qfilesystementry_p.h io/qfilesystemiterator_p.h io/qfilesystemmetadata_p.h io/qfilesystemwatcher_fsevents_p.h io/qfilesystemwatcher_inotify_p.h io/qfilesystemwatcher_kqueue_p.h io/qfilesystemwatcher_p.h io/qfilesystemwatcher_polling_p.h io/qfilesystemwatcher_win_p.h io/qfsfileengine_iterator_p.h io/qfsfileengine_p.h io/qiodevice_p.h io/qipaddress_p.h io/qlockfile_p.h io/qloggingregistry_p.h io/qnoncontiguousbytedevice_p.h io/qprocess_p.h io/qresource_iterator_p.h io/qresource_p.h io/qsavefile_p.h io/qsettings_p.h io/qstorageinfo_p.h io/qtemporaryfile_p.h io/qtldurl_p.h io/qurl_p.h io/qurltlds_p.h io/qwindowspipereader_p.h io/qwindowspipewriter_p.h itemmodels/qabstractitemmodel_p.h itemmodels/qabstractproxymodel_p.h itemmodels/qitemselectionmodel_p.h itemmodels/qtransposeproxymodel_p.h kernel/qabstracteventdispatcher_p.h kernel/qcfsocketnotifier_p.h kernel/qcore_mac_p.h kernel/qcore_unix_p.h kernel/qcoreapplication_p.h kernel/qcorecmdlineargs_p.h kernel/qcoreglobaldata_p.h kernel/qdeadlinetimer_p.h kernel/qeventdispatcher_cf_p.h kernel/qeventdispatcher_glib_p.h kernel/qeventdispatcher_unix_p.h kernel/qeventdispatcher_win_p.h kernel/qeventdispatcher_winrt_p.h kernel/qeventloop_p.h kernel/qfunctions_fake_env_p.h kernel/qfunctions_p.h kernel/qjni_p.h kernel/qjnihelpers_p.h kernel/qmetaobject_moc_p.h kernel/qmetaobject_p.h kernel/qmetaobjectbuilder_p.h kernel/qmetatype_p.h kernel/qmetatypeswitcher_p.h kernel/qobject_p.h kernel/qpoll_p.h kernel/qppsattribute_p.h kernel/qppsattributeprivate_p.h kernel/qppsobject_p.h kernel/qppsobjectprivate_p.h kernel/qsharedmemory_p.h kernel/qsystemerror_p.h kernel/qsystemsemaphore_p.h kernel/qtimerinfo_unix_p.h kernel/qtranslator_p.h kernel/qvariant_p.h kernel/qwineventnotifier_p.h kernel/qwinregistry_p.h mimetypes/qmimedatabase_p.h mimetypes/qmimeglobpattern_p.h mimetypes/qmimemagicrule_p.h mimetypes/qmimemagicrulematcher_p.h mimetypes/qmimeprovider_p.h mimetypes/qmimetype_p.h mimetypes/qmimetypeparser_p.h plugin/qelfparser_p.h plugin/qfactoryloader_p.h plugin/qlibrary_p.h plugin/qmachparser_p.h plugin/qplugin_p.h plugin/qsystemlibrary_p.h serialization/qbinaryjson_p.h serialization/qbinaryjsonarray_p.h serialization/qbinaryjsonobject_p.h serialization/qbinaryjsonvalue_p.h serialization/qcborcommon_p.h serialization/qcborvalue_p.h serialization/qdatastream_p.h serialization/qjson_p.h serialization/qjsonparser_p.h serialization/qjsonwriter_p.h serialization/qtextstream_p.h serialization/qxmlstream_p.h serialization/qxmlutils_p.h statemachine/qabstractstate_p.h statemachine/qabstracttransition_p.h statemachine/qeventtransition_p.h statemachine/qfinalstate_p.h statemachine/qhistorystate_p.h statemachine/qsignaleventgenerator_p.h statemachine/qsignaltransition_p.h statemachine/qstate_p.h statemachine/qstatemachine_p.h text/qbytearray_p.h text/qbytedata_p.h text/qcollator_p.h text/qdoublescanprint_p.h text/qharfbuzz_p.h text/qlocale_data_p.h text/qlocale_p.h text/qlocale_tools_p.h text/qstringalgorithms_p.h text/qstringiterator_p.h text/qunicodetables_p.h text/qunicodetools_p.h thread/qfutex_p.h thread/qfutureinterface_p.h thread/qfuturewatcher_p.h thread/qlocking_p.h thread/qmutex_p.h thread/qorderedmutexlocker_p.h thread/qreadwritelock_p.h thread/qthread_p.h thread/qthreadpool_p.h thread/qwaitcondition_p.h time/qcalendarbackend_p.h time/qcalendarmath_p.h time/qdatetime_p.h time/qdatetimeparser_p.h time/qgregoriancalendar_p.h time/qhijricalendar_data_p.h time/qhijricalendar_p.h time/qislamiccivilcalendar_p.h time/qjalalicalendar_data_p.h time/qjalalicalendar_p.h time/qjuliancalendar_p.h time/qmilankoviccalendar_p.h time/qromancalendar_data_p.h time/qromancalendar_p.h time/qtimezoneprivate_data_p.h time/qtimezoneprivate_p.h tools/qduplicatetracker_p.h tools/qfreelist_p.h tools/qmakearray_p.h tools/qoffsetstringarray_p.h tools/qringbuffer_p.h tools/qscopedpointer_p.h tools/qsimd_p.h tools/qsimd_x86_p.h tools/qtools_p.h platform/wasm/qstdweb_p.h SYNCQT.QPA_HEADER_FILES = SYNCQT.CLEAN_HEADER_FILES = animation/qabstractanimation.h:animation animation/qanimationgroup.h:animation animation/qparallelanimationgroup.h:animation animation/qpauseanimation.h:animation animation/qpropertyanimation.h:animation animation/qsequentialanimationgroup.h:animation animation/qvariantanimation.h:animation codecs/qtextcodec.h:textcodec global/qcompilerdetection.h global/qendian.h global/qflags.h global/qfloat16.h global/qglobal.h global/qglobalstatic.h global/qisenum.h global/qlibraryinfo.h global/qlogging.h global/qnamespace.h global/qnumeric.h global/qoperatingsystemversion.h global/qprocessordetection.h global/qrandom.h global/qsysinfo.h global/qsystemdetection.h global/qtypeinfo.h global/qtypetraits.h global/qversiontagging.h io/qbuffer.h io/qdebug.h io/qdir.h io/qdiriterator.h io/qfile.h io/qfiledevice.h io/qfileinfo.h io/qfileselector.h io/qfilesystemwatcher.h:filesystemwatcher io/qiodevice.h io/qlockfile.h io/qloggingcategory.h io/qprocess.h:processenvironment io/qresource.h io/qsavefile.h io/qsettings.h:settings io/qstandardpaths.h io/qstorageinfo.h io/qtemporarydir.h io/qtemporaryfile.h io/qurl.h io/qurlquery.h itemmodels/qabstractitemmodel.h:itemmodel itemmodels/qabstractproxymodel.h:proxymodel itemmodels/qconcatenatetablesproxymodel.h:concatenatetablesproxymodel itemmodels/qidentityproxymodel.h:identityproxymodel itemmodels/qitemselectionmodel.h:itemmodel itemmodels/qsortfilterproxymodel.h:sortfilterproxymodel itemmodels/qstringlistmodel.h:stringlistmodel itemmodels/qtransposeproxymodel.h:transposeproxymodel kernel/qabstracteventdispatcher.h kernel/qabstractnativeeventfilter.h kernel/qbasictimer.h kernel/qcoreapplication.h kernel/qcoreevent.h kernel/qdeadlinetimer.h kernel/qelapsedtimer.h kernel/qeventloop.h kernel/qfunctions_nacl.h kernel/qfunctions_vxworks.h kernel/qfunctions_winrt.h kernel/qmath.h kernel/qmetaobject.h kernel/qmetatype.h kernel/qmimedata.h kernel/qobject.h kernel/qobjectcleanuphandler.h kernel/qobjectdefs.h kernel/qpointer.h kernel/qsharedmemory.h kernel/qsignalmapper.h kernel/qsocketnotifier.h kernel/qsystemsemaphore.h kernel/qtestsupport_core.h kernel/qtimer.h kernel/qtranslator.h kernel/qvariant.h kernel/qwineventnotifier.h mimetypes/qmimedatabase.h:mimetype mimetypes/qmimetype.h:mimetype plugin/qfactoryinterface.h plugin/qlibrary.h:library plugin/qplugin.h plugin/qpluginloader.h plugin/quuid.h serialization/qcborarray.h serialization/qcborcommon.h serialization/qcbormap.h serialization/qcborstream.h serialization/qcborstreamreader.h:cborstreamreader serialization/qcborstreamwriter.h:cborstreamwriter serialization/qcborvalue.h serialization/qdatastream.h serialization/qjsonarray.h serialization/qjsondocument.h serialization/qjsonobject.h serialization/qjsonvalue.h serialization/qtextstream.h serialization/qxmlstream.h statemachine/qabstractstate.h:statemachine statemachine/qabstracttransition.h:statemachine statemachine/qeventtransition.h:qeventtransition statemachine/qfinalstate.h:statemachine statemachine/qhistorystate.h:statemachine statemachine/qsignaltransition.h:statemachine statemachine/qstate.h:statemachine statemachine/qstatemachine.h:statemachine text/qbytearray.h text/qbytearraylist.h text/qbytearraymatcher.h text/qchar.h text/qcollator.h text/qlocale.h text/qregexp.h text/qregularexpression.h:regularexpression text/qstring.h text/qstringalgorithms.h text/qstringbuilder.h text/qstringlist.h text/qstringliteral.h text/qstringmatcher.h text/qstringview.h text/qtextboundaryfinder.h thread/qatomic.h thread/qbasicatomic.h thread/qexception.h:future thread/qfuture.h:future thread/qfutureinterface.h:future thread/qfuturesynchronizer.h:future thread/qfuturewatcher.h:future thread/qmutex.h thread/qreadwritelock.h thread/qresultstore.h:future thread/qrunnable.h thread/qsemaphore.h:thread thread/qthread.h thread/qthreadpool.h:thread thread/qthreadstorage.h thread/qwaitcondition.h time/qcalendar.h time/qdatetime.h time/qtimezone.h:timezone tools/qalgorithms.h tools/qarraydata.h tools/qarraydataops.h tools/qarraydatapointer.h tools/qbitarray.h tools/qcache.h tools/qcommandlineoption.h:commandlineparser tools/qcommandlineparser.h:commandlineparser tools/qcontainerfwd.h tools/qcontiguouscache.h tools/qcryptographichash.h tools/qeasingcurve.h:easingcurve tools/qhash.h tools/qhashfunctions.h tools/qiterator.h tools/qline.h tools/qlinkedlist.h tools/qlist.h tools/qmap.h tools/qmargins.h tools/qmessageauthenticationcode.h tools/qpair.h tools/qpoint.h tools/qqueue.h tools/qrect.h tools/qrefcount.h tools/qscopedpointer.h tools/qscopedvaluerollback.h tools/qscopeguard.h tools/qset.h tools/qshareddata.h tools/qsharedpointer.h tools/qsize.h tools/qstack.h tools/qtimeline.h:easingcurve tools/qvarlengtharray.h tools/qvector.h tools/qversionnumber.h -SYNCQT.INJECTIONS = src/corelib/global/qconfig.h:qconfig.h:QtConfig src/corelib/global/qconfig_p.h:5.15.8/QtCore/private/qconfig_p.h +SYNCQT.INJECTIONS = src/corelib/global/qconfig.h:qconfig.h:QtConfig src/corelib/global/qconfig_p.h:5.15.10/QtCore/private/qconfig_p.h diff --git a/include/QtCore/qtcoreversion.h b/include/QtCore/qtcoreversion.h index fb2ff481..95d75b74 100644 --- a/include/QtCore/qtcoreversion.h +++ b/include/QtCore/qtcoreversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTCORE_VERSION_H #define QT_QTCORE_VERSION_H -#define QTCORE_VERSION_STR "5.15.8" +#define QTCORE_VERSION_STR "5.15.10" -#define QTCORE_VERSION 0x050F08 +#define QTCORE_VERSION 0x050F0A #endif // QT_QTCORE_VERSION_H diff --git a/include/QtDBus/5.15.8/QtDBus/private/dbus_minimal_p.h b/include/QtDBus/5.15.10/QtDBus/private/dbus_minimal_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/dbus_minimal_p.h rename to include/QtDBus/5.15.10/QtDBus/private/dbus_minimal_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbus_symbols_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbus_symbols_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbus_symbols_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbus_symbols_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusabstractadaptor_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusabstractadaptor_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusabstractadaptor_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusabstractadaptor_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusabstractinterface_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusabstractinterface_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusabstractinterface_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusabstractinterface_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusargument_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusargument_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusargument_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusargument_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusconnection_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusconnection_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusconnection_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusconnection_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusconnectionmanager_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusconnectionmanager_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusconnectionmanager_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusconnectionmanager_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbuscontext_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbuscontext_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbuscontext_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbuscontext_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusintegrator_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusintegrator_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusintegrator_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusintegrator_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusinterface_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusinterface_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusinterface_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusinterface_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusintrospection_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusintrospection_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusintrospection_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusintrospection_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusmessage_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusmessage_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusmessage_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusmessage_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusmetaobject_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusmetaobject_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusmetaobject_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusmetaobject_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusmetatype_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusmetatype_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusmetatype_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusmetatype_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbuspendingcall_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbuspendingcall_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbuspendingcall_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbuspendingcall_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusthreaddebug_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusthreaddebug_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusthreaddebug_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusthreaddebug_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusutil_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusutil_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusutil_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusutil_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qdbusxmlparser_p.h b/include/QtDBus/5.15.10/QtDBus/private/qdbusxmlparser_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qdbusxmlparser_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qdbusxmlparser_p.h diff --git a/include/QtDBus/5.15.8/QtDBus/private/qtdbusglobal_p.h b/include/QtDBus/5.15.10/QtDBus/private/qtdbusglobal_p.h similarity index 100% rename from include/QtDBus/5.15.8/QtDBus/private/qtdbusglobal_p.h rename to include/QtDBus/5.15.10/QtDBus/private/qtdbusglobal_p.h diff --git a/include/QtDBus/qtdbusversion.h b/include/QtDBus/qtdbusversion.h index a8dd98f3..60bb4aa1 100644 --- a/include/QtDBus/qtdbusversion.h +++ b/include/QtDBus/qtdbusversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTDBUS_VERSION_H #define QT_QTDBUS_VERSION_H -#define QTDBUS_VERSION_STR "5.15.8" +#define QTDBUS_VERSION_STR "5.15.10" -#define QTDBUS_VERSION 0x050F08 +#define QTDBUS_VERSION 0x050F0A #endif // QT_QTDBUS_VERSION_H diff --git a/include/QtDeviceDiscoverySupport/5.15.8/QtDeviceDiscoverySupport/private/qdevicediscovery_dummy_p.h b/include/QtDeviceDiscoverySupport/5.15.10/QtDeviceDiscoverySupport/private/qdevicediscovery_dummy_p.h similarity index 100% rename from include/QtDeviceDiscoverySupport/5.15.8/QtDeviceDiscoverySupport/private/qdevicediscovery_dummy_p.h rename to include/QtDeviceDiscoverySupport/5.15.10/QtDeviceDiscoverySupport/private/qdevicediscovery_dummy_p.h diff --git a/include/QtDeviceDiscoverySupport/5.15.8/QtDeviceDiscoverySupport/private/qdevicediscovery_p.h b/include/QtDeviceDiscoverySupport/5.15.10/QtDeviceDiscoverySupport/private/qdevicediscovery_p.h similarity index 100% rename from include/QtDeviceDiscoverySupport/5.15.8/QtDeviceDiscoverySupport/private/qdevicediscovery_p.h rename to include/QtDeviceDiscoverySupport/5.15.10/QtDeviceDiscoverySupport/private/qdevicediscovery_p.h diff --git a/include/QtDeviceDiscoverySupport/5.15.8/QtDeviceDiscoverySupport/private/qdevicediscovery_static_p.h b/include/QtDeviceDiscoverySupport/5.15.10/QtDeviceDiscoverySupport/private/qdevicediscovery_static_p.h similarity index 100% rename from include/QtDeviceDiscoverySupport/5.15.8/QtDeviceDiscoverySupport/private/qdevicediscovery_static_p.h rename to include/QtDeviceDiscoverySupport/5.15.10/QtDeviceDiscoverySupport/private/qdevicediscovery_static_p.h diff --git a/include/QtDeviceDiscoverySupport/5.15.8/QtDeviceDiscoverySupport/private/qdevicediscovery_udev_p.h b/include/QtDeviceDiscoverySupport/5.15.10/QtDeviceDiscoverySupport/private/qdevicediscovery_udev_p.h similarity index 100% rename from include/QtDeviceDiscoverySupport/5.15.8/QtDeviceDiscoverySupport/private/qdevicediscovery_udev_p.h rename to include/QtDeviceDiscoverySupport/5.15.10/QtDeviceDiscoverySupport/private/qdevicediscovery_udev_p.h diff --git a/include/QtDeviceDiscoverySupport/qtdevicediscoverysupportversion.h b/include/QtDeviceDiscoverySupport/qtdevicediscoverysupportversion.h index 56261586..1a74c969 100644 --- a/include/QtDeviceDiscoverySupport/qtdevicediscoverysupportversion.h +++ b/include/QtDeviceDiscoverySupport/qtdevicediscoverysupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTDEVICEDISCOVERYSUPPORT_VERSION_H #define QT_QTDEVICEDISCOVERYSUPPORT_VERSION_H -#define QTDEVICEDISCOVERYSUPPORT_VERSION_STR "5.15.8" +#define QTDEVICEDISCOVERYSUPPORT_VERSION_STR "5.15.10" -#define QTDEVICEDISCOVERYSUPPORT_VERSION 0x050F08 +#define QTDEVICEDISCOVERYSUPPORT_VERSION 0x050F0A #endif // QT_QTDEVICEDISCOVERYSUPPORT_VERSION_H diff --git a/include/QtEdidSupport/5.15.8/QtEdidSupport/private/qedidparser_p.h b/include/QtEdidSupport/5.15.10/QtEdidSupport/private/qedidparser_p.h similarity index 100% rename from include/QtEdidSupport/5.15.8/QtEdidSupport/private/qedidparser_p.h rename to include/QtEdidSupport/5.15.10/QtEdidSupport/private/qedidparser_p.h diff --git a/include/QtEdidSupport/5.15.8/QtEdidSupport/private/qedidvendortable_p.h b/include/QtEdidSupport/5.15.10/QtEdidSupport/private/qedidvendortable_p.h similarity index 100% rename from include/QtEdidSupport/5.15.8/QtEdidSupport/private/qedidvendortable_p.h rename to include/QtEdidSupport/5.15.10/QtEdidSupport/private/qedidvendortable_p.h diff --git a/include/QtEdidSupport/qtedidsupportversion.h b/include/QtEdidSupport/qtedidsupportversion.h index f775f39f..2122bc73 100644 --- a/include/QtEdidSupport/qtedidsupportversion.h +++ b/include/QtEdidSupport/qtedidsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTEDIDSUPPORT_VERSION_H #define QT_QTEDIDSUPPORT_VERSION_H -#define QTEDIDSUPPORT_VERSION_STR "5.15.8" +#define QTEDIDSUPPORT_VERSION_STR "5.15.10" -#define QTEDIDSUPPORT_VERSION 0x050F08 +#define QTEDIDSUPPORT_VERSION 0x050F0A #endif // QT_QTEDIDSUPPORT_VERSION_H diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfscontext_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfscontext_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfscontext_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfscontext_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfscursor_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfscursor_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfscursor_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfscursor_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsdeviceintegration_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsdeviceintegration_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsdeviceintegration_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsdeviceintegration_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsglobal_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsglobal_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsglobal_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsglobal_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfshooks_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfshooks_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfshooks_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfshooks_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsintegration_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsintegration_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsintegration_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsintegration_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsoffscreenwindow_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsoffscreenwindow_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsoffscreenwindow_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsoffscreenwindow_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsscreen_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsscreen_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsscreen_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsscreen_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsvulkaninstance_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsvulkaninstance_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsvulkaninstance_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsvulkaninstance_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsvulkanwindow_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsvulkanwindow_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfsvulkanwindow_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfsvulkanwindow_p.h diff --git a/include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfswindow_p.h b/include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfswindow_p.h similarity index 100% rename from include/QtEglFSDeviceIntegration/5.15.8/QtEglFSDeviceIntegration/private/qeglfswindow_p.h rename to include/QtEglFSDeviceIntegration/5.15.10/QtEglFSDeviceIntegration/private/qeglfswindow_p.h diff --git a/include/QtEglFSDeviceIntegration/qteglfsdeviceintegrationversion.h b/include/QtEglFSDeviceIntegration/qteglfsdeviceintegrationversion.h index f338279f..d1434f38 100644 --- a/include/QtEglFSDeviceIntegration/qteglfsdeviceintegrationversion.h +++ b/include/QtEglFSDeviceIntegration/qteglfsdeviceintegrationversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTEGLFSDEVICEINTEGRATION_VERSION_H #define QT_QTEGLFSDEVICEINTEGRATION_VERSION_H -#define QTEGLFSDEVICEINTEGRATION_VERSION_STR "5.15.8" +#define QTEGLFSDEVICEINTEGRATION_VERSION_STR "5.15.10" -#define QTEGLFSDEVICEINTEGRATION_VERSION 0x050F08 +#define QTEGLFSDEVICEINTEGRATION_VERSION 0x050F0A #endif // QT_QTEGLFSDEVICEINTEGRATION_VERSION_H diff --git a/include/QtEglSupport/5.15.8/QtEglSupport/private/qeglconvenience_p.h b/include/QtEglSupport/5.15.10/QtEglSupport/private/qeglconvenience_p.h similarity index 100% rename from include/QtEglSupport/5.15.8/QtEglSupport/private/qeglconvenience_p.h rename to include/QtEglSupport/5.15.10/QtEglSupport/private/qeglconvenience_p.h diff --git a/include/QtEglSupport/5.15.8/QtEglSupport/private/qeglpbuffer_p.h b/include/QtEglSupport/5.15.10/QtEglSupport/private/qeglpbuffer_p.h similarity index 100% rename from include/QtEglSupport/5.15.8/QtEglSupport/private/qeglpbuffer_p.h rename to include/QtEglSupport/5.15.10/QtEglSupport/private/qeglpbuffer_p.h diff --git a/include/QtEglSupport/5.15.8/QtEglSupport/private/qeglplatformcontext_p.h b/include/QtEglSupport/5.15.10/QtEglSupport/private/qeglplatformcontext_p.h similarity index 100% rename from include/QtEglSupport/5.15.8/QtEglSupport/private/qeglplatformcontext_p.h rename to include/QtEglSupport/5.15.10/QtEglSupport/private/qeglplatformcontext_p.h diff --git a/include/QtEglSupport/5.15.8/QtEglSupport/private/qeglstreamconvenience_p.h b/include/QtEglSupport/5.15.10/QtEglSupport/private/qeglstreamconvenience_p.h similarity index 100% rename from include/QtEglSupport/5.15.8/QtEglSupport/private/qeglstreamconvenience_p.h rename to include/QtEglSupport/5.15.10/QtEglSupport/private/qeglstreamconvenience_p.h diff --git a/include/QtEglSupport/5.15.8/QtEglSupport/private/qt_egl_p.h b/include/QtEglSupport/5.15.10/QtEglSupport/private/qt_egl_p.h similarity index 100% rename from include/QtEglSupport/5.15.8/QtEglSupport/private/qt_egl_p.h rename to include/QtEglSupport/5.15.10/QtEglSupport/private/qt_egl_p.h diff --git a/include/QtEglSupport/5.15.8/QtEglSupport/private/qxlibeglintegration_p.h b/include/QtEglSupport/5.15.10/QtEglSupport/private/qxlibeglintegration_p.h similarity index 100% rename from include/QtEglSupport/5.15.8/QtEglSupport/private/qxlibeglintegration_p.h rename to include/QtEglSupport/5.15.10/QtEglSupport/private/qxlibeglintegration_p.h diff --git a/include/QtEglSupport/qteglsupportversion.h b/include/QtEglSupport/qteglsupportversion.h index 9e520912..7e7dbfc8 100644 --- a/include/QtEglSupport/qteglsupportversion.h +++ b/include/QtEglSupport/qteglsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTEGLSUPPORT_VERSION_H #define QT_QTEGLSUPPORT_VERSION_H -#define QTEGLSUPPORT_VERSION_STR "5.15.8" +#define QTEGLSUPPORT_VERSION_STR "5.15.10" -#define QTEGLSUPPORT_VERSION 0x050F08 +#define QTEGLSUPPORT_VERSION 0x050F0A #endif // QT_QTEGLSUPPORT_VERSION_H diff --git a/include/QtEventDispatcherSupport/5.15.8/QtEventDispatcherSupport/private/qeventdispatcher_glib_p.h b/include/QtEventDispatcherSupport/5.15.10/QtEventDispatcherSupport/private/qeventdispatcher_glib_p.h similarity index 100% rename from include/QtEventDispatcherSupport/5.15.8/QtEventDispatcherSupport/private/qeventdispatcher_glib_p.h rename to include/QtEventDispatcherSupport/5.15.10/QtEventDispatcherSupport/private/qeventdispatcher_glib_p.h diff --git a/include/QtEventDispatcherSupport/5.15.8/QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h b/include/QtEventDispatcherSupport/5.15.10/QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h similarity index 100% rename from include/QtEventDispatcherSupport/5.15.8/QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h rename to include/QtEventDispatcherSupport/5.15.10/QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h diff --git a/include/QtEventDispatcherSupport/5.15.8/QtEventDispatcherSupport/private/qunixeventdispatcher_qpa_p.h b/include/QtEventDispatcherSupport/5.15.10/QtEventDispatcherSupport/private/qunixeventdispatcher_qpa_p.h similarity index 100% rename from include/QtEventDispatcherSupport/5.15.8/QtEventDispatcherSupport/private/qunixeventdispatcher_qpa_p.h rename to include/QtEventDispatcherSupport/5.15.10/QtEventDispatcherSupport/private/qunixeventdispatcher_qpa_p.h diff --git a/include/QtEventDispatcherSupport/5.15.8/QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h b/include/QtEventDispatcherSupport/5.15.10/QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h similarity index 100% rename from include/QtEventDispatcherSupport/5.15.8/QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h rename to include/QtEventDispatcherSupport/5.15.10/QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h diff --git a/include/QtEventDispatcherSupport/qteventdispatchersupportversion.h b/include/QtEventDispatcherSupport/qteventdispatchersupportversion.h index d0e3f778..5ce6a49e 100644 --- a/include/QtEventDispatcherSupport/qteventdispatchersupportversion.h +++ b/include/QtEventDispatcherSupport/qteventdispatchersupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTEVENTDISPATCHERSUPPORT_VERSION_H #define QT_QTEVENTDISPATCHERSUPPORT_VERSION_H -#define QTEVENTDISPATCHERSUPPORT_VERSION_STR "5.15.8" +#define QTEVENTDISPATCHERSUPPORT_VERSION_STR "5.15.10" -#define QTEVENTDISPATCHERSUPPORT_VERSION 0x050F08 +#define QTEVENTDISPATCHERSUPPORT_VERSION 0x050F0A #endif // QT_QTEVENTDISPATCHERSUPPORT_VERSION_H diff --git a/include/QtFbSupport/5.15.8/QtFbSupport/private/qfbbackingstore_p.h b/include/QtFbSupport/5.15.10/QtFbSupport/private/qfbbackingstore_p.h similarity index 100% rename from include/QtFbSupport/5.15.8/QtFbSupport/private/qfbbackingstore_p.h rename to include/QtFbSupport/5.15.10/QtFbSupport/private/qfbbackingstore_p.h diff --git a/include/QtFbSupport/5.15.8/QtFbSupport/private/qfbcursor_p.h b/include/QtFbSupport/5.15.10/QtFbSupport/private/qfbcursor_p.h similarity index 100% rename from include/QtFbSupport/5.15.8/QtFbSupport/private/qfbcursor_p.h rename to include/QtFbSupport/5.15.10/QtFbSupport/private/qfbcursor_p.h diff --git a/include/QtFbSupport/5.15.8/QtFbSupport/private/qfbscreen_p.h b/include/QtFbSupport/5.15.10/QtFbSupport/private/qfbscreen_p.h similarity index 100% rename from include/QtFbSupport/5.15.8/QtFbSupport/private/qfbscreen_p.h rename to include/QtFbSupport/5.15.10/QtFbSupport/private/qfbscreen_p.h diff --git a/include/QtFbSupport/5.15.8/QtFbSupport/private/qfbvthandler_p.h b/include/QtFbSupport/5.15.10/QtFbSupport/private/qfbvthandler_p.h similarity index 100% rename from include/QtFbSupport/5.15.8/QtFbSupport/private/qfbvthandler_p.h rename to include/QtFbSupport/5.15.10/QtFbSupport/private/qfbvthandler_p.h diff --git a/include/QtFbSupport/5.15.8/QtFbSupport/private/qfbwindow_p.h b/include/QtFbSupport/5.15.10/QtFbSupport/private/qfbwindow_p.h similarity index 100% rename from include/QtFbSupport/5.15.8/QtFbSupport/private/qfbwindow_p.h rename to include/QtFbSupport/5.15.10/QtFbSupport/private/qfbwindow_p.h diff --git a/include/QtFbSupport/qtfbsupportversion.h b/include/QtFbSupport/qtfbsupportversion.h index 32faf42d..c7a3b156 100644 --- a/include/QtFbSupport/qtfbsupportversion.h +++ b/include/QtFbSupport/qtfbsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTFBSUPPORT_VERSION_H #define QT_QTFBSUPPORT_VERSION_H -#define QTFBSUPPORT_VERSION_STR "5.15.8" +#define QTFBSUPPORT_VERSION_STR "5.15.10" -#define QTFBSUPPORT_VERSION 0x050F08 +#define QTFBSUPPORT_VERSION 0x050F0A #endif // QT_QTFBSUPPORT_VERSION_H diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfontconfigdatabase_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfontconfigdatabase_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfontconfigdatabase_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfontconfigdatabase_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfontengine_coretext_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfontengine_coretext_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfontengine_coretext_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfontengine_coretext_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfontengine_ft_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfontengine_ft_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfontengine_ft_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfontengine_ft_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfontenginemultifontconfig_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfontenginemultifontconfig_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfontenginemultifontconfig_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfontenginemultifontconfig_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfreetypefontdatabase_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfreetypefontdatabase_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qfreetypefontdatabase_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qfreetypefontdatabase_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsfontdatabase_ft_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsfontdatabase_ft_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsfontdatabase_ft_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsfontdatabase_ft_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsfontengine_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsfontengine_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsfontengine_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsfontengine_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsfontenginedirectwrite_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsfontenginedirectwrite_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsfontenginedirectwrite_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsfontenginedirectwrite_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsnativeimage_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsnativeimage_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwindowsnativeimage_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwindowsnativeimage_p.h diff --git a/include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwinrtfontdatabase_p.h b/include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwinrtfontdatabase_p.h similarity index 100% rename from include/QtFontDatabaseSupport/5.15.8/QtFontDatabaseSupport/private/qwinrtfontdatabase_p.h rename to include/QtFontDatabaseSupport/5.15.10/QtFontDatabaseSupport/private/qwinrtfontdatabase_p.h diff --git a/include/QtFontDatabaseSupport/qtfontdatabasesupportversion.h b/include/QtFontDatabaseSupport/qtfontdatabasesupportversion.h index e136639e..3893b4fe 100644 --- a/include/QtFontDatabaseSupport/qtfontdatabasesupportversion.h +++ b/include/QtFontDatabaseSupport/qtfontdatabasesupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTFONTDATABASESUPPORT_VERSION_H #define QT_QTFONTDATABASESUPPORT_VERSION_H -#define QTFONTDATABASESUPPORT_VERSION_STR "5.15.8" +#define QTFONTDATABASESUPPORT_VERSION_STR "5.15.10" -#define QTFONTDATABASESUPPORT_VERSION 0x050F08 +#define QTFONTDATABASESUPPORT_VERSION 0x050F0A #endif // QT_QTFONTDATABASESUPPORT_VERSION_H diff --git a/include/QtGlxSupport/5.15.8/QtGlxSupport/private/qglxconvenience_p.h b/include/QtGlxSupport/5.15.10/QtGlxSupport/private/qglxconvenience_p.h similarity index 100% rename from include/QtGlxSupport/5.15.8/QtGlxSupport/private/qglxconvenience_p.h rename to include/QtGlxSupport/5.15.10/QtGlxSupport/private/qglxconvenience_p.h diff --git a/include/QtGlxSupport/qtglxsupportversion.h b/include/QtGlxSupport/qtglxsupportversion.h index 0c352fa3..f249fda4 100644 --- a/include/QtGlxSupport/qtglxsupportversion.h +++ b/include/QtGlxSupport/qtglxsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTGLXSUPPORT_VERSION_H #define QT_QTGLXSUPPORT_VERSION_H -#define QTGLXSUPPORT_VERSION_STR "5.15.8" +#define QTGLXSUPPORT_VERSION_STR "5.15.10" -#define QTGLXSUPPORT_VERSION 0x050F08 +#define QTGLXSUPPORT_VERSION 0x050F0A #endif // QT_QTGLXSUPPORT_VERSION_H diff --git a/include/QtGraphicsSupport/5.15.8/QtGraphicsSupport/private/qrasterbackingstore_p.h b/include/QtGraphicsSupport/5.15.10/QtGraphicsSupport/private/qrasterbackingstore_p.h similarity index 100% rename from include/QtGraphicsSupport/5.15.8/QtGraphicsSupport/private/qrasterbackingstore_p.h rename to include/QtGraphicsSupport/5.15.10/QtGraphicsSupport/private/qrasterbackingstore_p.h diff --git a/include/QtGraphicsSupport/qtgraphicssupportversion.h b/include/QtGraphicsSupport/qtgraphicssupportversion.h index 44d454a0..9af19b82 100644 --- a/include/QtGraphicsSupport/qtgraphicssupportversion.h +++ b/include/QtGraphicsSupport/qtgraphicssupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTGRAPHICSSUPPORT_VERSION_H #define QT_QTGRAPHICSSUPPORT_VERSION_H -#define QTGRAPHICSSUPPORT_VERSION_STR "5.15.8" +#define QTGRAPHICSSUPPORT_VERSION_STR "5.15.10" -#define QTGRAPHICSSUPPORT_VERSION 0x050F08 +#define QTGRAPHICSSUPPORT_VERSION 0x050F0A #endif // QT_QTGRAPHICSSUPPORT_VERSION_H diff --git a/include/QtGui/5.15.8/QtGui/private/cs_tdr_p.h b/include/QtGui/5.15.10/QtGui/private/cs_tdr_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/cs_tdr_p.h rename to include/QtGui/5.15.10/QtGui/private/cs_tdr_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qabstractlayoutstyleinfo_p.h b/include/QtGui/5.15.10/QtGui/private/qabstractlayoutstyleinfo_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qabstractlayoutstyleinfo_p.h rename to include/QtGui/5.15.10/QtGui/private/qabstractlayoutstyleinfo_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qabstracttextdocumentlayout_p.h b/include/QtGui/5.15.10/QtGui/private/qabstracttextdocumentlayout_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qabstracttextdocumentlayout_p.h rename to include/QtGui/5.15.10/QtGui/private/qabstracttextdocumentlayout_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qaccessiblecache_p.h b/include/QtGui/5.15.10/QtGui/private/qaccessiblecache_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qaccessiblecache_p.h rename to include/QtGui/5.15.10/QtGui/private/qaccessiblecache_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qastchandler_p.h b/include/QtGui/5.15.10/QtGui/private/qastchandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qastchandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qastchandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qbezier_p.h b/include/QtGui/5.15.10/QtGui/private/qbezier_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qbezier_p.h rename to include/QtGui/5.15.10/QtGui/private/qbezier_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qblendfunctions_p.h b/include/QtGui/5.15.10/QtGui/private/qblendfunctions_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qblendfunctions_p.h rename to include/QtGui/5.15.10/QtGui/private/qblendfunctions_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qblittable_p.h b/include/QtGui/5.15.10/QtGui/private/qblittable_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qblittable_p.h rename to include/QtGui/5.15.10/QtGui/private/qblittable_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qbmphandler_p.h b/include/QtGui/5.15.10/QtGui/private/qbmphandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qbmphandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qbmphandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcolor_p.h b/include/QtGui/5.15.10/QtGui/private/qcolor_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcolor_p.h rename to include/QtGui/5.15.10/QtGui/private/qcolor_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcolormatrix_p.h b/include/QtGui/5.15.10/QtGui/private/qcolormatrix_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcolormatrix_p.h rename to include/QtGui/5.15.10/QtGui/private/qcolormatrix_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcolorspace_p.h b/include/QtGui/5.15.10/QtGui/private/qcolorspace_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcolorspace_p.h rename to include/QtGui/5.15.10/QtGui/private/qcolorspace_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcolortransferfunction_p.h b/include/QtGui/5.15.10/QtGui/private/qcolortransferfunction_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcolortransferfunction_p.h rename to include/QtGui/5.15.10/QtGui/private/qcolortransferfunction_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcolortransfertable_p.h b/include/QtGui/5.15.10/QtGui/private/qcolortransfertable_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcolortransfertable_p.h rename to include/QtGui/5.15.10/QtGui/private/qcolortransfertable_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcolortransform_p.h b/include/QtGui/5.15.10/QtGui/private/qcolortransform_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcolortransform_p.h rename to include/QtGui/5.15.10/QtGui/private/qcolortransform_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcolortrc_p.h b/include/QtGui/5.15.10/QtGui/private/qcolortrc_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcolortrc_p.h rename to include/QtGui/5.15.10/QtGui/private/qcolortrc_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcolortrclut_p.h b/include/QtGui/5.15.10/QtGui/private/qcolortrclut_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcolortrclut_p.h rename to include/QtGui/5.15.10/QtGui/private/qcolortrclut_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcoregraphics_p.h b/include/QtGui/5.15.10/QtGui/private/qcoregraphics_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcoregraphics_p.h rename to include/QtGui/5.15.10/QtGui/private/qcoregraphics_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcosmeticstroker_p.h b/include/QtGui/5.15.10/QtGui/private/qcosmeticstroker_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcosmeticstroker_p.h rename to include/QtGui/5.15.10/QtGui/private/qcosmeticstroker_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcssparser_p.h b/include/QtGui/5.15.10/QtGui/private/qcssparser_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcssparser_p.h rename to include/QtGui/5.15.10/QtGui/private/qcssparser_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcssutil_p.h b/include/QtGui/5.15.10/QtGui/private/qcssutil_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcssutil_p.h rename to include/QtGui/5.15.10/QtGui/private/qcssutil_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qcursor_p.h b/include/QtGui/5.15.10/QtGui/private/qcursor_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qcursor_p.h rename to include/QtGui/5.15.10/QtGui/private/qcursor_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qdatabuffer_p.h b/include/QtGui/5.15.10/QtGui/private/qdatabuffer_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qdatabuffer_p.h rename to include/QtGui/5.15.10/QtGui/private/qdatabuffer_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qdistancefield_p.h b/include/QtGui/5.15.10/QtGui/private/qdistancefield_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qdistancefield_p.h rename to include/QtGui/5.15.10/QtGui/private/qdistancefield_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qdnd_p.h b/include/QtGui/5.15.10/QtGui/private/qdnd_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qdnd_p.h rename to include/QtGui/5.15.10/QtGui/private/qdnd_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qdrawhelper_mips_dsp_p.h b/include/QtGui/5.15.10/QtGui/private/qdrawhelper_mips_dsp_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qdrawhelper_mips_dsp_p.h rename to include/QtGui/5.15.10/QtGui/private/qdrawhelper_mips_dsp_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qdrawhelper_neon_p.h b/include/QtGui/5.15.10/QtGui/private/qdrawhelper_neon_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qdrawhelper_neon_p.h rename to include/QtGui/5.15.10/QtGui/private/qdrawhelper_neon_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qdrawhelper_p.h b/include/QtGui/5.15.10/QtGui/private/qdrawhelper_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qdrawhelper_p.h rename to include/QtGui/5.15.10/QtGui/private/qdrawhelper_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qdrawhelper_x86_p.h b/include/QtGui/5.15.10/QtGui/private/qdrawhelper_x86_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qdrawhelper_x86_p.h rename to include/QtGui/5.15.10/QtGui/private/qdrawhelper_x86_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qdrawingprimitive_sse2_p.h b/include/QtGui/5.15.10/QtGui/private/qdrawingprimitive_sse2_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qdrawingprimitive_sse2_p.h rename to include/QtGui/5.15.10/QtGui/private/qdrawingprimitive_sse2_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qemulationpaintengine_p.h b/include/QtGui/5.15.10/QtGui/private/qemulationpaintengine_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qemulationpaintengine_p.h rename to include/QtGui/5.15.10/QtGui/private/qemulationpaintengine_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qevent_p.h b/include/QtGui/5.15.10/QtGui/private/qevent_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qevent_p.h rename to include/QtGui/5.15.10/QtGui/private/qevent_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qfixed_p.h b/include/QtGui/5.15.10/QtGui/private/qfixed_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qfixed_p.h rename to include/QtGui/5.15.10/QtGui/private/qfixed_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qfont_p.h b/include/QtGui/5.15.10/QtGui/private/qfont_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qfont_p.h rename to include/QtGui/5.15.10/QtGui/private/qfont_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qfontengine_p.h b/include/QtGui/5.15.10/QtGui/private/qfontengine_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qfontengine_p.h rename to include/QtGui/5.15.10/QtGui/private/qfontengine_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qfontengine_qpf2_p.h b/include/QtGui/5.15.10/QtGui/private/qfontengine_qpf2_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qfontengine_qpf2_p.h rename to include/QtGui/5.15.10/QtGui/private/qfontengine_qpf2_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qfontengineglyphcache_p.h b/include/QtGui/5.15.10/QtGui/private/qfontengineglyphcache_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qfontengineglyphcache_p.h rename to include/QtGui/5.15.10/QtGui/private/qfontengineglyphcache_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qfontsubset_p.h b/include/QtGui/5.15.10/QtGui/private/qfontsubset_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qfontsubset_p.h rename to include/QtGui/5.15.10/QtGui/private/qfontsubset_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qfragmentmap_p.h b/include/QtGui/5.15.10/QtGui/private/qfragmentmap_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qfragmentmap_p.h rename to include/QtGui/5.15.10/QtGui/private/qfragmentmap_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qglyphrun_p.h b/include/QtGui/5.15.10/QtGui/private/qglyphrun_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qglyphrun_p.h rename to include/QtGui/5.15.10/QtGui/private/qglyphrun_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qgrayraster_p.h b/include/QtGui/5.15.10/QtGui/private/qgrayraster_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qgrayraster_p.h rename to include/QtGui/5.15.10/QtGui/private/qgrayraster_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qgridlayoutengine_p.h b/include/QtGui/5.15.10/QtGui/private/qgridlayoutengine_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qgridlayoutengine_p.h rename to include/QtGui/5.15.10/QtGui/private/qgridlayoutengine_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qguiapplication_p.h b/include/QtGui/5.15.10/QtGui/private/qguiapplication_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qguiapplication_p.h rename to include/QtGui/5.15.10/QtGui/private/qguiapplication_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qharfbuzzng_p.h b/include/QtGui/5.15.10/QtGui/private/qharfbuzzng_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qharfbuzzng_p.h rename to include/QtGui/5.15.10/QtGui/private/qharfbuzzng_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qhexstring_p.h b/include/QtGui/5.15.10/QtGui/private/qhexstring_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qhexstring_p.h rename to include/QtGui/5.15.10/QtGui/private/qhexstring_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qhighdpiscaling_p.h b/include/QtGui/5.15.10/QtGui/private/qhighdpiscaling_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qhighdpiscaling_p.h rename to include/QtGui/5.15.10/QtGui/private/qhighdpiscaling_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qicc_p.h b/include/QtGui/5.15.10/QtGui/private/qicc_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qicc_p.h rename to include/QtGui/5.15.10/QtGui/private/qicc_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qicon_p.h b/include/QtGui/5.15.10/QtGui/private/qicon_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qicon_p.h rename to include/QtGui/5.15.10/QtGui/private/qicon_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qiconloader_p.h b/include/QtGui/5.15.10/QtGui/private/qiconloader_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qiconloader_p.h rename to include/QtGui/5.15.10/QtGui/private/qiconloader_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qimage_p.h b/include/QtGui/5.15.10/QtGui/private/qimage_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qimage_p.h rename to include/QtGui/5.15.10/QtGui/private/qimage_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qimagepixmapcleanuphooks_p.h b/include/QtGui/5.15.10/QtGui/private/qimagepixmapcleanuphooks_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qimagepixmapcleanuphooks_p.h rename to include/QtGui/5.15.10/QtGui/private/qimagepixmapcleanuphooks_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qimagereaderwriterhelpers_p.h b/include/QtGui/5.15.10/QtGui/private/qimagereaderwriterhelpers_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qimagereaderwriterhelpers_p.h rename to include/QtGui/5.15.10/QtGui/private/qimagereaderwriterhelpers_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qimagescale_p.h b/include/QtGui/5.15.10/QtGui/private/qimagescale_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qimagescale_p.h rename to include/QtGui/5.15.10/QtGui/private/qimagescale_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qinputcontrol_p.h b/include/QtGui/5.15.10/QtGui/private/qinputcontrol_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qinputcontrol_p.h rename to include/QtGui/5.15.10/QtGui/private/qinputcontrol_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qinputdevicemanager_p.h b/include/QtGui/5.15.10/QtGui/private/qinputdevicemanager_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qinputdevicemanager_p.h rename to include/QtGui/5.15.10/QtGui/private/qinputdevicemanager_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qinputdevicemanager_p_p.h b/include/QtGui/5.15.10/QtGui/private/qinputdevicemanager_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qinputdevicemanager_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qinputdevicemanager_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qinputmethod_p.h b/include/QtGui/5.15.10/QtGui/private/qinputmethod_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qinputmethod_p.h rename to include/QtGui/5.15.10/QtGui/private/qinputmethod_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qinternalmimedata_p.h b/include/QtGui/5.15.10/QtGui/private/qinternalmimedata_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qinternalmimedata_p.h rename to include/QtGui/5.15.10/QtGui/private/qinternalmimedata_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qkeymapper_p.h b/include/QtGui/5.15.10/QtGui/private/qkeymapper_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qkeymapper_p.h rename to include/QtGui/5.15.10/QtGui/private/qkeymapper_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qkeysequence_p.h b/include/QtGui/5.15.10/QtGui/private/qkeysequence_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qkeysequence_p.h rename to include/QtGui/5.15.10/QtGui/private/qkeysequence_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qktxhandler_p.h b/include/QtGui/5.15.10/QtGui/private/qktxhandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qktxhandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qktxhandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qlayoutpolicy_p.h b/include/QtGui/5.15.10/QtGui/private/qlayoutpolicy_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qlayoutpolicy_p.h rename to include/QtGui/5.15.10/QtGui/private/qlayoutpolicy_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qmath_p.h b/include/QtGui/5.15.10/QtGui/private/qmath_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qmath_p.h rename to include/QtGui/5.15.10/QtGui/private/qmath_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qmemrotate_p.h b/include/QtGui/5.15.10/QtGui/private/qmemrotate_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qmemrotate_p.h rename to include/QtGui/5.15.10/QtGui/private/qmemrotate_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopengl2pexvertexarray_p.h b/include/QtGui/5.15.10/QtGui/private/qopengl2pexvertexarray_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopengl2pexvertexarray_p.h rename to include/QtGui/5.15.10/QtGui/private/qopengl2pexvertexarray_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopengl_p.h b/include/QtGui/5.15.10/QtGui/private/qopengl_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopengl_p.h rename to include/QtGui/5.15.10/QtGui/private/qopengl_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglcontext_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglcontext_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglcontext_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglcontext_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglcustomshaderstage_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglcustomshaderstage_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglcustomshaderstage_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglcustomshaderstage_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglengineshadermanager_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglengineshadermanager_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglengineshadermanager_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglengineshadermanager_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglengineshadersource_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglengineshadersource_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglengineshadersource_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglengineshadersource_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglextensions_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglextensions_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglextensions_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglextensions_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglframebufferobject_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglframebufferobject_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglframebufferobject_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglframebufferobject_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglgradientcache_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglgradientcache_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglgradientcache_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglgradientcache_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglpaintdevice_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglpaintdevice_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglpaintdevice_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglpaintdevice_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglpaintengine_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglpaintengine_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglpaintengine_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglpaintengine_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglprogrambinarycache_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglprogrambinarycache_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglprogrambinarycache_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglprogrambinarycache_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglqueryhelper_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglqueryhelper_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglqueryhelper_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglqueryhelper_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglshadercache_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglshadercache_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglshadercache_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglshadercache_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopengltexture_p.h b/include/QtGui/5.15.10/QtGui/private/qopengltexture_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopengltexture_p.h rename to include/QtGui/5.15.10/QtGui/private/qopengltexture_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopengltexturecache_p.h b/include/QtGui/5.15.10/QtGui/private/qopengltexturecache_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopengltexturecache_p.h rename to include/QtGui/5.15.10/QtGui/private/qopengltexturecache_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopengltextureglyphcache_p.h b/include/QtGui/5.15.10/QtGui/private/qopengltextureglyphcache_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopengltextureglyphcache_p.h rename to include/QtGui/5.15.10/QtGui/private/qopengltextureglyphcache_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopengltexturehelper_p.h b/include/QtGui/5.15.10/QtGui/private/qopengltexturehelper_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopengltexturehelper_p.h rename to include/QtGui/5.15.10/QtGui/private/qopengltexturehelper_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopengltextureuploader_p.h b/include/QtGui/5.15.10/QtGui/private/qopengltextureuploader_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopengltextureuploader_p.h rename to include/QtGui/5.15.10/QtGui/private/qopengltextureuploader_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglversionfunctionsfactory_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglversionfunctionsfactory_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglversionfunctionsfactory_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglversionfunctionsfactory_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qopenglvertexarrayobject_p.h b/include/QtGui/5.15.10/QtGui/private/qopenglvertexarrayobject_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qopenglvertexarrayobject_p.h rename to include/QtGui/5.15.10/QtGui/private/qopenglvertexarrayobject_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qoutlinemapper_p.h b/include/QtGui/5.15.10/QtGui/private/qoutlinemapper_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qoutlinemapper_p.h rename to include/QtGui/5.15.10/QtGui/private/qoutlinemapper_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpagedpaintdevice_p.h b/include/QtGui/5.15.10/QtGui/private/qpagedpaintdevice_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpagedpaintdevice_p.h rename to include/QtGui/5.15.10/QtGui/private/qpagedpaintdevice_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpaintdevicewindow_p.h b/include/QtGui/5.15.10/QtGui/private/qpaintdevicewindow_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpaintdevicewindow_p.h rename to include/QtGui/5.15.10/QtGui/private/qpaintdevicewindow_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpaintengine_blitter_p.h b/include/QtGui/5.15.10/QtGui/private/qpaintengine_blitter_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpaintengine_blitter_p.h rename to include/QtGui/5.15.10/QtGui/private/qpaintengine_blitter_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpaintengine_p.h b/include/QtGui/5.15.10/QtGui/private/qpaintengine_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpaintengine_p.h rename to include/QtGui/5.15.10/QtGui/private/qpaintengine_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpaintengine_pic_p.h b/include/QtGui/5.15.10/QtGui/private/qpaintengine_pic_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpaintengine_pic_p.h rename to include/QtGui/5.15.10/QtGui/private/qpaintengine_pic_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpaintengine_raster_p.h b/include/QtGui/5.15.10/QtGui/private/qpaintengine_raster_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpaintengine_raster_p.h rename to include/QtGui/5.15.10/QtGui/private/qpaintengine_raster_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpaintengineex_p.h b/include/QtGui/5.15.10/QtGui/private/qpaintengineex_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpaintengineex_p.h rename to include/QtGui/5.15.10/QtGui/private/qpaintengineex_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpainter_p.h b/include/QtGui/5.15.10/QtGui/private/qpainter_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpainter_p.h rename to include/QtGui/5.15.10/QtGui/private/qpainter_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpainterpath_p.h b/include/QtGui/5.15.10/QtGui/private/qpainterpath_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpainterpath_p.h rename to include/QtGui/5.15.10/QtGui/private/qpainterpath_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpathclipper_p.h b/include/QtGui/5.15.10/QtGui/private/qpathclipper_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpathclipper_p.h rename to include/QtGui/5.15.10/QtGui/private/qpathclipper_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpathsimplifier_p.h b/include/QtGui/5.15.10/QtGui/private/qpathsimplifier_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpathsimplifier_p.h rename to include/QtGui/5.15.10/QtGui/private/qpathsimplifier_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpdf_p.h b/include/QtGui/5.15.10/QtGui/private/qpdf_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpdf_p.h rename to include/QtGui/5.15.10/QtGui/private/qpdf_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpen_p.h b/include/QtGui/5.15.10/QtGui/private/qpen_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpen_p.h rename to include/QtGui/5.15.10/QtGui/private/qpen_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpicture_p.h b/include/QtGui/5.15.10/QtGui/private/qpicture_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpicture_p.h rename to include/QtGui/5.15.10/QtGui/private/qpicture_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpixmap_blitter_p.h b/include/QtGui/5.15.10/QtGui/private/qpixmap_blitter_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpixmap_blitter_p.h rename to include/QtGui/5.15.10/QtGui/private/qpixmap_blitter_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpixmap_raster_p.h b/include/QtGui/5.15.10/QtGui/private/qpixmap_raster_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpixmap_raster_p.h rename to include/QtGui/5.15.10/QtGui/private/qpixmap_raster_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpixmapcache_p.h b/include/QtGui/5.15.10/QtGui/private/qpixmapcache_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpixmapcache_p.h rename to include/QtGui/5.15.10/QtGui/private/qpixmapcache_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpkmhandler_p.h b/include/QtGui/5.15.10/QtGui/private/qpkmhandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpkmhandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qpkmhandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpnghandler_p.h b/include/QtGui/5.15.10/QtGui/private/qpnghandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpnghandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qpnghandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qpolygonclipper_p.h b/include/QtGui/5.15.10/QtGui/private/qpolygonclipper_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qpolygonclipper_p.h rename to include/QtGui/5.15.10/QtGui/private/qpolygonclipper_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qppmhandler_p.h b/include/QtGui/5.15.10/QtGui/private/qppmhandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qppmhandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qppmhandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrasterdefs_p.h b/include/QtGui/5.15.10/QtGui/private/qrasterdefs_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrasterdefs_p.h rename to include/QtGui/5.15.10/QtGui/private/qrasterdefs_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrasterizer_p.h b/include/QtGui/5.15.10/QtGui/private/qrasterizer_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrasterizer_p.h rename to include/QtGui/5.15.10/QtGui/private/qrasterizer_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrawfont_p.h b/include/QtGui/5.15.10/QtGui/private/qrawfont_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrawfont_p.h rename to include/QtGui/5.15.10/QtGui/private/qrawfont_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrbtree_p.h b/include/QtGui/5.15.10/QtGui/private/qrbtree_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrbtree_p.h rename to include/QtGui/5.15.10/QtGui/private/qrbtree_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrgba64_p.h b/include/QtGui/5.15.10/QtGui/private/qrgba64_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrgba64_p.h rename to include/QtGui/5.15.10/QtGui/private/qrgba64_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhi_p.h b/include/QtGui/5.15.10/QtGui/private/qrhi_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhi_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhi_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhi_p_p.h b/include/QtGui/5.15.10/QtGui/private/qrhi_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhi_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhi_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhid3d11_p.h b/include/QtGui/5.15.10/QtGui/private/qrhid3d11_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhid3d11_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhid3d11_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhid3d11_p_p.h b/include/QtGui/5.15.10/QtGui/private/qrhid3d11_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhid3d11_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhid3d11_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhigles2_p.h b/include/QtGui/5.15.10/QtGui/private/qrhigles2_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhigles2_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhigles2_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhigles2_p_p.h b/include/QtGui/5.15.10/QtGui/private/qrhigles2_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhigles2_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhigles2_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhimetal_p.h b/include/QtGui/5.15.10/QtGui/private/qrhimetal_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhimetal_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhimetal_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhimetal_p_p.h b/include/QtGui/5.15.10/QtGui/private/qrhimetal_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhimetal_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhimetal_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhinull_p.h b/include/QtGui/5.15.10/QtGui/private/qrhinull_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhinull_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhinull_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhinull_p_p.h b/include/QtGui/5.15.10/QtGui/private/qrhinull_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhinull_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhinull_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhiprofiler_p.h b/include/QtGui/5.15.10/QtGui/private/qrhiprofiler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhiprofiler_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhiprofiler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhiprofiler_p_p.h b/include/QtGui/5.15.10/QtGui/private/qrhiprofiler_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhiprofiler_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhiprofiler_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhivulkan_p.h b/include/QtGui/5.15.10/QtGui/private/qrhivulkan_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhivulkan_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhivulkan_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhivulkan_p_p.h b/include/QtGui/5.15.10/QtGui/private/qrhivulkan_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhivulkan_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhivulkan_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qrhivulkanext_p.h b/include/QtGui/5.15.10/QtGui/private/qrhivulkanext_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qrhivulkanext_p.h rename to include/QtGui/5.15.10/QtGui/private/qrhivulkanext_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qscreen_p.h b/include/QtGui/5.15.10/QtGui/private/qscreen_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qscreen_p.h rename to include/QtGui/5.15.10/QtGui/private/qscreen_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qsessionmanager_p.h b/include/QtGui/5.15.10/QtGui/private/qsessionmanager_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qsessionmanager_p.h rename to include/QtGui/5.15.10/QtGui/private/qsessionmanager_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshader_p.h b/include/QtGui/5.15.10/QtGui/private/qshader_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshader_p.h rename to include/QtGui/5.15.10/QtGui/private/qshader_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshader_p_p.h b/include/QtGui/5.15.10/QtGui/private/qshader_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshader_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qshader_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshaderdescription_p.h b/include/QtGui/5.15.10/QtGui/private/qshaderdescription_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshaderdescription_p.h rename to include/QtGui/5.15.10/QtGui/private/qshaderdescription_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshaderdescription_p_p.h b/include/QtGui/5.15.10/QtGui/private/qshaderdescription_p_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshaderdescription_p_p.h rename to include/QtGui/5.15.10/QtGui/private/qshaderdescription_p_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshaderformat_p.h b/include/QtGui/5.15.10/QtGui/private/qshaderformat_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshaderformat_p.h rename to include/QtGui/5.15.10/QtGui/private/qshaderformat_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshadergenerator_p.h b/include/QtGui/5.15.10/QtGui/private/qshadergenerator_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshadergenerator_p.h rename to include/QtGui/5.15.10/QtGui/private/qshadergenerator_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshadergraph_p.h b/include/QtGui/5.15.10/QtGui/private/qshadergraph_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshadergraph_p.h rename to include/QtGui/5.15.10/QtGui/private/qshadergraph_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshadergraphloader_p.h b/include/QtGui/5.15.10/QtGui/private/qshadergraphloader_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshadergraphloader_p.h rename to include/QtGui/5.15.10/QtGui/private/qshadergraphloader_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshaderlanguage_p.h b/include/QtGui/5.15.10/QtGui/private/qshaderlanguage_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshaderlanguage_p.h rename to include/QtGui/5.15.10/QtGui/private/qshaderlanguage_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshadernode_p.h b/include/QtGui/5.15.10/QtGui/private/qshadernode_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshadernode_p.h rename to include/QtGui/5.15.10/QtGui/private/qshadernode_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshadernodeport_p.h b/include/QtGui/5.15.10/QtGui/private/qshadernodeport_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshadernodeport_p.h rename to include/QtGui/5.15.10/QtGui/private/qshadernodeport_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshadernodesloader_p.h b/include/QtGui/5.15.10/QtGui/private/qshadernodesloader_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshadernodesloader_p.h rename to include/QtGui/5.15.10/QtGui/private/qshadernodesloader_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshapedpixmapdndwindow_p.h b/include/QtGui/5.15.10/QtGui/private/qshapedpixmapdndwindow_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshapedpixmapdndwindow_p.h rename to include/QtGui/5.15.10/QtGui/private/qshapedpixmapdndwindow_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qshortcutmap_p.h b/include/QtGui/5.15.10/QtGui/private/qshortcutmap_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qshortcutmap_p.h rename to include/QtGui/5.15.10/QtGui/private/qshortcutmap_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qsimpledrag_p.h b/include/QtGui/5.15.10/QtGui/private/qsimpledrag_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qsimpledrag_p.h rename to include/QtGui/5.15.10/QtGui/private/qsimpledrag_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qstandarditemmodel_p.h b/include/QtGui/5.15.10/QtGui/private/qstandarditemmodel_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qstandarditemmodel_p.h rename to include/QtGui/5.15.10/QtGui/private/qstandarditemmodel_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qstatictext_p.h b/include/QtGui/5.15.10/QtGui/private/qstatictext_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qstatictext_p.h rename to include/QtGui/5.15.10/QtGui/private/qstatictext_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qstroker_p.h b/include/QtGui/5.15.10/QtGui/private/qstroker_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qstroker_p.h rename to include/QtGui/5.15.10/QtGui/private/qstroker_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qt_gui_pch.h b/include/QtGui/5.15.10/QtGui/private/qt_gui_pch.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qt_gui_pch.h rename to include/QtGui/5.15.10/QtGui/private/qt_gui_pch.h diff --git a/include/QtGui/5.15.8/QtGui/private/qt_mips_asm_dsp_p.h b/include/QtGui/5.15.10/QtGui/private/qt_mips_asm_dsp_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qt_mips_asm_dsp_p.h rename to include/QtGui/5.15.10/QtGui/private/qt_mips_asm_dsp_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextcursor_p.h b/include/QtGui/5.15.10/QtGui/private/qtextcursor_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextcursor_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextcursor_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextdocument_p.h b/include/QtGui/5.15.10/QtGui/private/qtextdocument_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextdocument_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextdocument_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextdocumentfragment_p.h b/include/QtGui/5.15.10/QtGui/private/qtextdocumentfragment_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextdocumentfragment_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextdocumentfragment_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextdocumentlayout_p.h b/include/QtGui/5.15.10/QtGui/private/qtextdocumentlayout_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextdocumentlayout_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextdocumentlayout_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextengine_p.h b/include/QtGui/5.15.10/QtGui/private/qtextengine_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextengine_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextengine_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextformat_p.h b/include/QtGui/5.15.10/QtGui/private/qtextformat_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextformat_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextformat_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtexthtmlparser_p.h b/include/QtGui/5.15.10/QtGui/private/qtexthtmlparser_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtexthtmlparser_p.h rename to include/QtGui/5.15.10/QtGui/private/qtexthtmlparser_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextimagehandler_p.h b/include/QtGui/5.15.10/QtGui/private/qtextimagehandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextimagehandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextimagehandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextmarkdownimporter_p.h b/include/QtGui/5.15.10/QtGui/private/qtextmarkdownimporter_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextmarkdownimporter_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextmarkdownimporter_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextmarkdownwriter_p.h b/include/QtGui/5.15.10/QtGui/private/qtextmarkdownwriter_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextmarkdownwriter_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextmarkdownwriter_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextobject_p.h b/include/QtGui/5.15.10/QtGui/private/qtextobject_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextobject_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextobject_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextodfwriter_p.h b/include/QtGui/5.15.10/QtGui/private/qtextodfwriter_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextodfwriter_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextodfwriter_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtexttable_p.h b/include/QtGui/5.15.10/QtGui/private/qtexttable_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtexttable_p.h rename to include/QtGui/5.15.10/QtGui/private/qtexttable_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtexturefiledata_p.h b/include/QtGui/5.15.10/QtGui/private/qtexturefiledata_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtexturefiledata_p.h rename to include/QtGui/5.15.10/QtGui/private/qtexturefiledata_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtexturefilehandler_p.h b/include/QtGui/5.15.10/QtGui/private/qtexturefilehandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtexturefilehandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qtexturefilehandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtexturefilereader_p.h b/include/QtGui/5.15.10/QtGui/private/qtexturefilereader_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtexturefilereader_p.h rename to include/QtGui/5.15.10/QtGui/private/qtexturefilereader_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtextureglyphcache_p.h b/include/QtGui/5.15.10/QtGui/private/qtextureglyphcache_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtextureglyphcache_p.h rename to include/QtGui/5.15.10/QtGui/private/qtextureglyphcache_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtguiglobal_p.h b/include/QtGui/5.15.10/QtGui/private/qtguiglobal_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtguiglobal_p.h rename to include/QtGui/5.15.10/QtGui/private/qtguiglobal_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtouchdevice_p.h b/include/QtGui/5.15.10/QtGui/private/qtouchdevice_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtouchdevice_p.h rename to include/QtGui/5.15.10/QtGui/private/qtouchdevice_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtriangulatingstroker_p.h b/include/QtGui/5.15.10/QtGui/private/qtriangulatingstroker_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtriangulatingstroker_p.h rename to include/QtGui/5.15.10/QtGui/private/qtriangulatingstroker_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qtriangulator_p.h b/include/QtGui/5.15.10/QtGui/private/qtriangulator_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qtriangulator_p.h rename to include/QtGui/5.15.10/QtGui/private/qtriangulator_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qvectorpath_p.h b/include/QtGui/5.15.10/QtGui/private/qvectorpath_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qvectorpath_p.h rename to include/QtGui/5.15.10/QtGui/private/qvectorpath_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qvulkanwindow_p.h b/include/QtGui/5.15.10/QtGui/private/qvulkanwindow_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qvulkanwindow_p.h rename to include/QtGui/5.15.10/QtGui/private/qvulkanwindow_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qwasmlocalfileaccess_p.h b/include/QtGui/5.15.10/QtGui/private/qwasmlocalfileaccess_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qwasmlocalfileaccess_p.h rename to include/QtGui/5.15.10/QtGui/private/qwasmlocalfileaccess_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qwindow_p.h b/include/QtGui/5.15.10/QtGui/private/qwindow_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qwindow_p.h rename to include/QtGui/5.15.10/QtGui/private/qwindow_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qxbmhandler_p.h b/include/QtGui/5.15.10/QtGui/private/qxbmhandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qxbmhandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qxbmhandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qxpmhandler_p.h b/include/QtGui/5.15.10/QtGui/private/qxpmhandler_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qxpmhandler_p.h rename to include/QtGui/5.15.10/QtGui/private/qxpmhandler_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qzipreader_p.h b/include/QtGui/5.15.10/QtGui/private/qzipreader_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qzipreader_p.h rename to include/QtGui/5.15.10/QtGui/private/qzipreader_p.h diff --git a/include/QtGui/5.15.8/QtGui/private/qzipwriter_p.h b/include/QtGui/5.15.10/QtGui/private/qzipwriter_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/private/qzipwriter_p.h rename to include/QtGui/5.15.10/QtGui/private/qzipwriter_p.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformaccessibility.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformaccessibility.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformaccessibility.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformaccessibility.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformbackingstore.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformbackingstore.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformbackingstore.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformbackingstore.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformclipboard.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformclipboard.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformclipboard.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformclipboard.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformcursor.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformcursor.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformcursor.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformcursor.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformdialoghelper.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformdialoghelper.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformdialoghelper.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformdialoghelper.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformdrag.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformdrag.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformdrag.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformdrag.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformfontdatabase.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformfontdatabase.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformfontdatabase.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformfontdatabase.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformgraphicsbuffer.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformgraphicsbuffer.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformgraphicsbuffer.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformgraphicsbuffer.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformgraphicsbufferhelper.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformgraphicsbufferhelper.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformgraphicsbufferhelper.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformgraphicsbufferhelper.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatforminputcontext.h b/include/QtGui/5.15.10/QtGui/qpa/qplatforminputcontext.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatforminputcontext.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatforminputcontext.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatforminputcontext_p.h b/include/QtGui/5.15.10/QtGui/qpa/qplatforminputcontext_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatforminputcontext_p.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatforminputcontext_p.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatforminputcontextfactory_p.h b/include/QtGui/5.15.10/QtGui/qpa/qplatforminputcontextfactory_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatforminputcontextfactory_p.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatforminputcontextfactory_p.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatforminputcontextplugin_p.h b/include/QtGui/5.15.10/QtGui/qpa/qplatforminputcontextplugin_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatforminputcontextplugin_p.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatforminputcontextplugin_p.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformintegration.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformintegration.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformintegration.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformintegration.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformintegrationfactory_p.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformintegrationfactory_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformintegrationfactory_p.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformintegrationfactory_p.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformintegrationplugin.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformintegrationplugin.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformintegrationplugin.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformintegrationplugin.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformmenu.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformmenu.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformmenu.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformmenu.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformnativeinterface.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformnativeinterface.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformnativeinterface.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformnativeinterface.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformoffscreensurface.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformoffscreensurface.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformoffscreensurface.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformoffscreensurface.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformopenglcontext.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformopenglcontext.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformopenglcontext.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformopenglcontext.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformpixmap.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformpixmap.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformpixmap.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformpixmap.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformscreen.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformscreen.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformscreen.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformscreen.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformscreen_p.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformscreen_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformscreen_p.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformscreen_p.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformservices.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformservices.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformservices.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformservices.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformsessionmanager.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformsessionmanager.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformsessionmanager.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformsessionmanager.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformsharedgraphicscache.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformsharedgraphicscache.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformsharedgraphicscache.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformsharedgraphicscache.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformsurface.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformsurface.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformsurface.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformsurface.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformsystemtrayicon.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformsystemtrayicon.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformsystemtrayicon.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformsystemtrayicon.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformtheme.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformtheme.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformtheme.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformtheme.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformtheme_p.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformtheme_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformtheme_p.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformtheme_p.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformthemefactory_p.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformthemefactory_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformthemefactory_p.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformthemefactory_p.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformthemeplugin.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformthemeplugin.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformthemeplugin.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformthemeplugin.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformvulkaninstance.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformvulkaninstance.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformvulkaninstance.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformvulkaninstance.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformwindow.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformwindow.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformwindow.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformwindow.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qplatformwindow_p.h b/include/QtGui/5.15.10/QtGui/qpa/qplatformwindow_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qplatformwindow_p.h rename to include/QtGui/5.15.10/QtGui/qpa/qplatformwindow_p.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qwindowsysteminterface.h b/include/QtGui/5.15.10/QtGui/qpa/qwindowsysteminterface.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qwindowsysteminterface.h rename to include/QtGui/5.15.10/QtGui/qpa/qwindowsysteminterface.h diff --git a/include/QtGui/5.15.8/QtGui/qpa/qwindowsysteminterface_p.h b/include/QtGui/5.15.10/QtGui/qpa/qwindowsysteminterface_p.h similarity index 100% rename from include/QtGui/5.15.8/QtGui/qpa/qwindowsysteminterface_p.h rename to include/QtGui/5.15.10/QtGui/qpa/qwindowsysteminterface_p.h diff --git a/include/QtGui/headers.pri b/include/QtGui/headers.pri index 02fa589c..af0e162b 100644 --- a/include/QtGui/headers.pri +++ b/include/QtGui/headers.pri @@ -1,6 +1,6 @@ SYNCQT.HEADER_FILES = accessible/qaccessible.h accessible/qaccessiblebridge.h accessible/qaccessibleobject.h accessible/qaccessibleplugin.h image/qbitmap.h image/qicon.h image/qiconengine.h image/qiconengineplugin.h image/qimage.h image/qimageiohandler.h image/qimagereader.h image/qimagewriter.h image/qmovie.h image/qpicture.h image/qpictureformatplugin.h image/qpixmap.h image/qpixmapcache.h itemmodels/qstandarditemmodel.h kernel/qclipboard.h kernel/qcursor.h kernel/qdrag.h kernel/qevent.h kernel/qgenericplugin.h kernel/qgenericpluginfactory.h kernel/qguiapplication.h kernel/qinputmethod.h kernel/qkeysequence.h kernel/qoffscreensurface.h kernel/qopenglcontext.h kernel/qopenglwindow.h kernel/qpaintdevicewindow.h kernel/qpalette.h kernel/qpixelformat.h kernel/qrasterwindow.h kernel/qscreen.h kernel/qsessionmanager.h kernel/qstylehints.h kernel/qsurface.h kernel/qsurfaceformat.h kernel/qtestsupport_gui.h kernel/qtguiglobal.h kernel/qtouchdevice.h kernel/qwindow.h kernel/qwindowdefs.h kernel/qwindowdefs_win.h math3d/qgenericmatrix.h math3d/qmatrix4x4.h math3d/qquaternion.h math3d/qvector2d.h math3d/qvector3d.h math3d/qvector4d.h opengl/qopengl.h opengl/qopenglbuffer.h opengl/qopengldebug.h opengl/qopengles2ext.h opengl/qopenglext.h opengl/qopenglextrafunctions.h opengl/qopenglframebufferobject.h opengl/qopenglfunctions.h opengl/qopenglfunctions_1_0.h opengl/qopenglfunctions_1_1.h opengl/qopenglfunctions_1_2.h opengl/qopenglfunctions_1_3.h opengl/qopenglfunctions_1_4.h opengl/qopenglfunctions_1_5.h opengl/qopenglfunctions_2_0.h opengl/qopenglfunctions_2_1.h opengl/qopenglfunctions_3_0.h opengl/qopenglfunctions_3_1.h opengl/qopenglfunctions_3_2_compatibility.h opengl/qopenglfunctions_3_2_core.h opengl/qopenglfunctions_3_3_compatibility.h opengl/qopenglfunctions_3_3_core.h opengl/qopenglfunctions_4_0_compatibility.h opengl/qopenglfunctions_4_0_core.h opengl/qopenglfunctions_4_1_compatibility.h opengl/qopenglfunctions_4_1_core.h opengl/qopenglfunctions_4_2_compatibility.h opengl/qopenglfunctions_4_2_core.h opengl/qopenglfunctions_4_3_compatibility.h opengl/qopenglfunctions_4_3_core.h opengl/qopenglfunctions_4_4_compatibility.h opengl/qopenglfunctions_4_4_core.h opengl/qopenglfunctions_4_5_compatibility.h opengl/qopenglfunctions_4_5_core.h opengl/qopenglfunctions_es2.h opengl/qopenglpaintdevice.h opengl/qopenglpixeltransferoptions.h opengl/qopenglshaderprogram.h opengl/qopengltexture.h opengl/qopengltextureblitter.h opengl/qopengltimerquery.h opengl/qopenglversionfunctions.h opengl/qopenglvertexarrayobject.h painting/qbackingstore.h painting/qbrush.h painting/qcolor.h painting/qcolorspace.h painting/qcolortransform.h painting/qmatrix.h painting/qpagedpaintdevice.h painting/qpagelayout.h painting/qpagesize.h painting/qpaintdevice.h painting/qpaintengine.h painting/qpainter.h painting/qpainterpath.h painting/qpdfwriter.h painting/qpen.h painting/qpolygon.h painting/qregion.h painting/qrgb.h painting/qrgba64.h painting/qtransform.h text/qabstracttextdocumentlayout.h text/qfont.h text/qfontdatabase.h text/qfontinfo.h text/qfontmetrics.h text/qglyphrun.h text/qrawfont.h text/qstatictext.h text/qsyntaxhighlighter.h text/qtextcursor.h text/qtextdocument.h text/qtextdocumentfragment.h text/qtextdocumentwriter.h text/qtextformat.h text/qtextlayout.h text/qtextlist.h text/qtextobject.h text/qtextoption.h text/qtexttable.h util/qdesktopservices.h util/qvalidator.h vulkan/qvulkaninstance.h vulkan/qvulkanwindow.h -SYNCQT.GENERATED_HEADER_FILES = QAccessible QAccessibleInterface QAccessibleTextInterface QAccessibleEditableTextInterface QAccessibleValueInterface QAccessibleTableCellInterface QAccessibleTableInterface QAccessibleActionInterface QAccessibleImageInterface QAccessibleEvent QAccessibleStateChangeEvent QAccessibleTextCursorEvent QAccessibleTextSelectionEvent QAccessibleTextInsertEvent QAccessibleTextRemoveEvent QAccessibleTextUpdateEvent QAccessibleValueChangeEvent QAccessibleTableModelChangeEvent QAccessibleBridge QAccessibleBridgePlugin QAccessibleObject QAccessibleApplication QAccessiblePlugin QBitmap QIcon QIconEngine QIconEngineV2 QIconEnginePlugin QImageTextKeyLang QImageCleanupFunction QImage QImageIOHandler QImageIOPlugin QImageReader QImageWriter QMovie QPicture QPictureIO QPictureFormatPlugin QPixmap QPixmapCache QStandardItem QStandardItemModel QClipboard QCursor QDrag QInputEvent QEnterEvent QMouseEvent QHoverEvent QWheelEvent QTabletEvent QNativeGestureEvent QKeyEvent QFocusEvent QPaintEvent QMoveEvent QExposeEvent QPlatformSurfaceEvent QResizeEvent QCloseEvent QIconDragEvent QShowEvent QHideEvent QContextMenuEvent QInputMethodEvent QInputMethodQueryEvent QDropEvent QDragMoveEvent QDragEnterEvent QDragLeaveEvent QHelpEvent QStatusTipEvent QWhatsThisClickedEvent QActionEvent QFileOpenEvent QToolBarChangeEvent QShortcutEvent QWindowStateChangeEvent QPointingDeviceUniqueId QTouchEvent QScrollPrepareEvent QScrollEvent QScreenOrientationChangeEvent QApplicationStateChangeEvent QtEvents QGenericPlugin QGenericPluginFactory QGuiApplication QInputMethod QKeySequence QOffscreenSurface QOpenGLVersionProfile QOpenGLContextGroup QOpenGLContext QOpenGLWindow QPaintDeviceWindow QPalette QPixelFormat QRasterWindow QScreen QSessionManager QStyleHints QSurface QSurfaceFormat QTouchDevice QWindow QWidgetList QWindowList QWidgetMapper QWidgetSet QGenericMatrix QMatrix2x2 QMatrix2x3 QMatrix2x4 QMatrix3x2 QMatrix3x3 QMatrix3x4 QMatrix4x2 QMatrix4x3 QMatrix4x4 QQuaternion QVector2D QVector3D QVector4D QOpenGLBuffer QOpenGLDebugMessage QOpenGLDebugLogger QOpenGLExtraFunctions QOpenGLExtraFunctionsPrivate QOpenGLFramebufferObject QOpenGLFramebufferObjectFormat QOpenGLFunctions QOpenGLFunctionsPrivate QOpenGLFunctions_1_0 QOpenGLFunctions_1_1 QOpenGLFunctions_1_2 QOpenGLFunctions_1_3 QOpenGLFunctions_1_4 QOpenGLFunctions_1_5 QOpenGLFunctions_2_0 QOpenGLFunctions_2_1 QOpenGLFunctions_3_0 QOpenGLFunctions_3_1 QOpenGLFunctions_3_2_Compatibility QOpenGLFunctions_3_2_Core QOpenGLFunctions_3_3_Compatibility QOpenGLFunctions_3_3_Core QOpenGLFunctions_4_0_Compatibility QOpenGLFunctions_4_0_Core QOpenGLFunctions_4_1_Compatibility QOpenGLFunctions_4_1_Core QOpenGLFunctions_4_2_Compatibility QOpenGLFunctions_4_2_Core QOpenGLFunctions_4_3_Compatibility QOpenGLFunctions_4_3_Core QOpenGLFunctions_4_4_Compatibility QOpenGLFunctions_4_4_Core QOpenGLFunctions_4_5_Compatibility QOpenGLFunctions_4_5_Core QOpenGLFunctions_ES2 QOpenGLPaintDevice QOpenGLPixelTransferOptions QOpenGLShader QOpenGLShaderProgram QOpenGLTexture QOpenGLTextureBlitter QOpenGLTimerQuery QOpenGLTimeMonitor QOpenGLVersionFunctions QOpenGLVertexArrayObject QBackingStore QBrush QBrushData QGradientStop QGradientStops QGradient QLinearGradient QRadialGradient QConicalGradient QColor QColorSpace QColorTransform QMatrix QPagedPaintDevice QPageLayout QPageSize QPaintDevice QTextItem QPaintEngine QPaintEngineState QPainter QPainterPath QPainterPathStroker QPdfWriter QPen QPolygon QPolygonF QRegion QRgb QRgba64 QTransform QAbstractTextDocumentLayout QTextObjectInterface QFont QFontDatabase QFontInfo QFontMetrics QFontMetricsF QGlyphRun QRawFont QStaticText QSyntaxHighlighter QTextCursor QAbstractUndoItem QTextDocument QTextDocumentFragment QTextDocumentWriter QTextLength QTextFormat QTextCharFormat QTextBlockFormat QTextListFormat QTextImageFormat QTextFrameFormat QTextTableFormat QTextTableCellFormat QTextInlineObject QTextLayout QTextLine QTextList QTextObject QTextBlockGroup QTextFrameLayoutData QTextFrame QTextBlockUserData QTextBlock QTextFragment QTextOption QTextTableCell QTextTable QDesktopServices QValidator QIntValidator QDoubleValidator QRegExpValidator QRegularExpressionValidator QVulkanLayer QVulkanExtension QVulkanInfoVector QVulkanInstance QVulkanWindowRenderer QVulkanWindow QGenericPlugin QGenericPluginFactory qtguiversion.h QtGuiVersion QtGui +SYNCQT.GENERATED_HEADER_FILES = QAccessible QAccessibleInterface QAccessibleTextInterface QAccessibleEditableTextInterface QAccessibleValueInterface QAccessibleTableCellInterface QAccessibleTableInterface QAccessibleActionInterface QAccessibleImageInterface QAccessibleEvent QAccessibleStateChangeEvent QAccessibleTextCursorEvent QAccessibleTextSelectionEvent QAccessibleTextInsertEvent QAccessibleTextRemoveEvent QAccessibleTextUpdateEvent QAccessibleValueChangeEvent QAccessibleTableModelChangeEvent QAccessibleBridge QAccessibleBridgePlugin QAccessibleObject QAccessibleApplication QAccessiblePlugin QBitmap QIcon QIconEngine QIconEngineV2 QIconEnginePlugin QImageTextKeyLang QImageCleanupFunction QImage QImageIOHandler QImageIOPlugin QImageReader QImageWriter QMovie QPicture QPictureIO QPictureFormatPlugin QPixmap QPixmapCache QStandardItem QStandardItemModel QClipboard QCursor QDrag QInputEvent QEnterEvent QMouseEvent QHoverEvent QWheelEvent QTabletEvent QNativeGestureEvent QKeyEvent QFocusEvent QPaintEvent QMoveEvent QExposeEvent QPlatformSurfaceEvent QResizeEvent QCloseEvent QIconDragEvent QShowEvent QHideEvent QContextMenuEvent QInputMethodEvent QInputMethodQueryEvent QDropEvent QDragMoveEvent QDragEnterEvent QDragLeaveEvent QHelpEvent QStatusTipEvent QWhatsThisClickedEvent QActionEvent QFileOpenEvent QToolBarChangeEvent QShortcutEvent QWindowStateChangeEvent QPointingDeviceUniqueId QTouchEvent QScrollPrepareEvent QScrollEvent QScreenOrientationChangeEvent QApplicationStateChangeEvent QtEvents QGenericPlugin QGenericPluginFactory QGuiApplication QInputMethod QKeySequence QOffscreenSurface QOpenGLVersionProfile QOpenGLContextGroup QOpenGLContext QOpenGLWindow QPaintDeviceWindow QPalette QPixelFormat QRasterWindow QScreen QSessionManager QStyleHints QSurface QSurfaceFormat QTouchDevice QWindow QWidgetList QWindowList QWidgetMapper QWidgetSet QGenericMatrix QMatrix2x2 QMatrix2x3 QMatrix2x4 QMatrix3x2 QMatrix3x3 QMatrix3x4 QMatrix4x2 QMatrix4x3 QMatrix4x4 QQuaternion QVector2D QVector3D QVector4D QOpenGLBuffer QOpenGLDebugMessage QOpenGLDebugLogger QOpenGLExtraFunctions QOpenGLExtraFunctionsPrivate QOpenGLFramebufferObject QOpenGLFramebufferObjectFormat QOpenGLFunctions QOpenGLFunctionsPrivate QOpenGLFunctions_1_0 QOpenGLFunctions_1_1 QOpenGLFunctions_1_2 QOpenGLFunctions_1_3 QOpenGLFunctions_1_4 QOpenGLFunctions_1_5 QOpenGLFunctions_2_0 QOpenGLFunctions_2_1 QOpenGLFunctions_3_0 QOpenGLFunctions_3_1 QOpenGLFunctions_3_2_Compatibility QOpenGLFunctions_3_2_Core QOpenGLFunctions_3_3_Compatibility QOpenGLFunctions_3_3_Core QOpenGLFunctions_4_0_Compatibility QOpenGLFunctions_4_0_Core QOpenGLFunctions_4_1_Compatibility QOpenGLFunctions_4_1_Core QOpenGLFunctions_4_2_Compatibility QOpenGLFunctions_4_2_Core QOpenGLFunctions_4_3_Compatibility QOpenGLFunctions_4_3_Core QOpenGLFunctions_4_4_Compatibility QOpenGLFunctions_4_4_Core QOpenGLFunctions_4_5_Compatibility QOpenGLFunctions_4_5_Core QOpenGLFunctions_ES2 QOpenGLPaintDevice QOpenGLPixelTransferOptions QOpenGLShader QOpenGLShaderProgram QOpenGLTexture QOpenGLTextureBlitter QOpenGLTimerQuery QOpenGLTimeMonitor QOpenGLVersionFunctions QOpenGLVertexArrayObject QBackingStore QBrush QBrushData QGradientStop QGradientStops QGradient QLinearGradient QRadialGradient QConicalGradient QColor QColorSpace QColorTransform QMatrix QPagedPaintDevice QPageLayout QPageSize QPaintDevice QTextItem QPaintEngine QPaintEngineState QPainter QPainterPath QPainterPathStroker QPdfWriter QPen QPolygon QPolygonF QRegion QRgb QRgba64 QTransform QAbstractTextDocumentLayout QTextObjectInterface QFont QFontDatabase QFontInfo QFontMetrics QFontMetricsF QGlyphRun QRawFont QStaticText QSyntaxHighlighter QTextCursor QAbstractUndoItem QTextDocument QTextDocumentFragment QTextDocumentWriter QTextLength QTextFormat QTextCharFormat QTextBlockFormat QTextListFormat QTextImageFormat QTextFrameFormat QTextTableFormat QTextTableCellFormat QTextInlineObject QTextLayout QTextLine QTextList QTextObject QTextBlockGroup QTextFrameLayoutData QTextFrame QTextBlockUserData QTextBlock QTextFragment QTextOption QTextTableCell QTextTable QDesktopServices QValidator QIntValidator QDoubleValidator QRegExpValidator QRegularExpressionValidator QVulkanLayer QVulkanExtension QVulkanInfoVector QVulkanInstance QVulkanWindowRenderer QVulkanWindow QGenericPluginFactory QGenericPlugin qtguiversion.h QtGuiVersion QtGui SYNCQT.PRIVATE_HEADER_FILES = accessible/qaccessiblecache_p.h image/qbmphandler_p.h image/qicon_p.h image/qiconloader_p.h image/qimage_p.h image/qimagepixmapcleanuphooks_p.h image/qimagereaderwriterhelpers_p.h image/qpaintengine_pic_p.h image/qpicture_p.h image/qpixmap_blitter_p.h image/qpixmap_raster_p.h image/qpixmapcache_p.h image/qpnghandler_p.h image/qppmhandler_p.h image/qxbmhandler_p.h image/qxpmhandler_p.h itemmodels/qstandarditemmodel_p.h kernel/qcursor_p.h kernel/qdnd_p.h kernel/qevent_p.h kernel/qguiapplication_p.h kernel/qhighdpiscaling_p.h kernel/qinputdevicemanager_p.h kernel/qinputdevicemanager_p_p.h kernel/qinputmethod_p.h kernel/qinternalmimedata_p.h kernel/qkeymapper_p.h kernel/qkeysequence_p.h kernel/qopenglcontext_p.h kernel/qpaintdevicewindow_p.h kernel/qscreen_p.h kernel/qsessionmanager_p.h kernel/qshapedpixmapdndwindow_p.h kernel/qshortcutmap_p.h kernel/qsimpledrag_p.h kernel/qt_gui_pch.h kernel/qtguiglobal_p.h kernel/qtouchdevice_p.h kernel/qwindow_p.h opengl/qopengl2pexvertexarray_p.h opengl/qopengl_p.h opengl/qopenglcustomshaderstage_p.h opengl/qopenglengineshadermanager_p.h opengl/qopenglengineshadersource_p.h opengl/qopenglextensions_p.h opengl/qopenglframebufferobject_p.h opengl/qopenglgradientcache_p.h opengl/qopenglpaintdevice_p.h opengl/qopenglpaintengine_p.h opengl/qopenglprogrambinarycache_p.h opengl/qopenglqueryhelper_p.h opengl/qopenglshadercache_p.h opengl/qopengltexture_p.h opengl/qopengltexturecache_p.h opengl/qopengltextureglyphcache_p.h opengl/qopengltexturehelper_p.h opengl/qopengltextureuploader_p.h opengl/qopenglversionfunctionsfactory_p.h opengl/qopenglvertexarrayobject_p.h painting/qbezier_p.h painting/qblendfunctions_p.h painting/qblittable_p.h painting/qcolor_p.h painting/qcolormatrix_p.h painting/qcolorspace_p.h painting/qcolortransferfunction_p.h painting/qcolortransfertable_p.h painting/qcolortransform_p.h painting/qcolortrc_p.h painting/qcolortrclut_p.h painting/qcoregraphics_p.h painting/qcosmeticstroker_p.h painting/qcssutil_p.h painting/qdatabuffer_p.h painting/qdrawhelper_mips_dsp_p.h painting/qdrawhelper_neon_p.h painting/qdrawhelper_p.h painting/qdrawhelper_x86_p.h painting/qdrawingprimitive_sse2_p.h painting/qemulationpaintengine_p.h painting/qfixed_p.h painting/qgrayraster_p.h painting/qicc_p.h painting/qimagescale_p.h painting/qmath_p.h painting/qmemrotate_p.h painting/qoutlinemapper_p.h painting/qpagedpaintdevice_p.h painting/qpaintengine_blitter_p.h painting/qpaintengine_p.h painting/qpaintengine_raster_p.h painting/qpaintengineex_p.h painting/qpainter_p.h painting/qpainterpath_p.h painting/qpathclipper_p.h painting/qpathsimplifier_p.h painting/qpdf_p.h painting/qpen_p.h painting/qpolygonclipper_p.h painting/qrasterdefs_p.h painting/qrasterizer_p.h painting/qrbtree_p.h painting/qrgba64_p.h painting/qstroker_p.h painting/qt_mips_asm_dsp_p.h painting/qtextureglyphcache_p.h painting/qtriangulatingstroker_p.h painting/qtriangulator_p.h painting/qvectorpath_p.h rhi/cs_tdr_p.h rhi/qrhi_p.h rhi/qrhi_p_p.h rhi/qrhid3d11_p.h rhi/qrhid3d11_p_p.h rhi/qrhigles2_p.h rhi/qrhigles2_p_p.h rhi/qrhimetal_p.h rhi/qrhimetal_p_p.h rhi/qrhinull_p.h rhi/qrhinull_p_p.h rhi/qrhiprofiler_p.h rhi/qrhiprofiler_p_p.h rhi/qrhivulkan_p.h rhi/qrhivulkan_p_p.h rhi/qrhivulkanext_p.h rhi/qshader_p.h rhi/qshader_p_p.h rhi/qshaderdescription_p.h rhi/qshaderdescription_p_p.h text/qabstracttextdocumentlayout_p.h text/qcssparser_p.h text/qdistancefield_p.h text/qfont_p.h text/qfontengine_p.h text/qfontengine_qpf2_p.h text/qfontengineglyphcache_p.h text/qfontsubset_p.h text/qfragmentmap_p.h text/qglyphrun_p.h text/qharfbuzzng_p.h text/qinputcontrol_p.h text/qrawfont_p.h text/qstatictext_p.h text/qtextcursor_p.h text/qtextdocument_p.h text/qtextdocumentfragment_p.h text/qtextdocumentlayout_p.h text/qtextengine_p.h text/qtextformat_p.h text/qtexthtmlparser_p.h text/qtextimagehandler_p.h text/qtextmarkdownimporter_p.h text/qtextmarkdownwriter_p.h text/qtextobject_p.h text/qtextodfwriter_p.h text/qtexttable_p.h text/qzipreader_p.h text/qzipwriter_p.h util/qabstractlayoutstyleinfo_p.h util/qastchandler_p.h util/qgridlayoutengine_p.h util/qhexstring_p.h util/qktxhandler_p.h util/qlayoutpolicy_p.h util/qpkmhandler_p.h util/qshaderformat_p.h util/qshadergenerator_p.h util/qshadergraph_p.h util/qshadergraphloader_p.h util/qshaderlanguage_p.h util/qshadernode_p.h util/qshadernodeport_p.h util/qshadernodesloader_p.h util/qtexturefiledata_p.h util/qtexturefilehandler_p.h util/qtexturefilereader_p.h vulkan/qvulkanwindow_p.h platform/wasm/qwasmlocalfileaccess_p.h SYNCQT.QPA_HEADER_FILES = accessible/qplatformaccessibility.h image/qplatformpixmap.h kernel/qplatformclipboard.h kernel/qplatformcursor.h kernel/qplatformdialoghelper.h kernel/qplatformdrag.h kernel/qplatformgraphicsbuffer.h kernel/qplatformgraphicsbufferhelper.h kernel/qplatforminputcontext.h kernel/qplatforminputcontext_p.h kernel/qplatforminputcontextfactory_p.h kernel/qplatforminputcontextplugin_p.h kernel/qplatformintegration.h kernel/qplatformintegrationfactory_p.h kernel/qplatformintegrationplugin.h kernel/qplatformmenu.h kernel/qplatformnativeinterface.h kernel/qplatformoffscreensurface.h kernel/qplatformopenglcontext.h kernel/qplatformscreen.h kernel/qplatformscreen_p.h kernel/qplatformservices.h kernel/qplatformsessionmanager.h kernel/qplatformsharedgraphicscache.h kernel/qplatformsurface.h kernel/qplatformsystemtrayicon.h kernel/qplatformtheme.h kernel/qplatformtheme_p.h kernel/qplatformthemefactory_p.h kernel/qplatformthemeplugin.h kernel/qplatformwindow.h kernel/qplatformwindow_p.h kernel/qwindowsysteminterface.h kernel/qwindowsysteminterface_p.h painting/qplatformbackingstore.h text/qplatformfontdatabase.h vulkan/qplatformvulkaninstance.h SYNCQT.CLEAN_HEADER_FILES = accessible/qaccessible.h accessible/qaccessiblebridge.h accessible/qaccessibleobject.h accessible/qaccessibleplugin.h image/qbitmap.h image/qicon.h image/qiconengine.h image/qiconengineplugin.h image/qimage.h image/qimageiohandler.h image/qimagereader.h image/qimagewriter.h image/qmovie.h:movie image/qpicture.h image/qpictureformatplugin.h image/qpixmap.h image/qpixmapcache.h itemmodels/qstandarditemmodel.h:standarditemmodel kernel/qclipboard.h kernel/qcursor.h kernel/qdrag.h:draganddrop kernel/qevent.h kernel/qgenericplugin.h kernel/qgenericpluginfactory.h kernel/qguiapplication.h kernel/qinputmethod.h kernel/qkeysequence.h kernel/qoffscreensurface.h kernel/qopenglcontext.h kernel/qopenglwindow.h kernel/qpaintdevicewindow.h kernel/qpalette.h kernel/qpixelformat.h kernel/qrasterwindow.h kernel/qscreen.h kernel/qsessionmanager.h kernel/qstylehints.h kernel/qsurface.h kernel/qsurfaceformat.h kernel/qtestsupport_gui.h kernel/qtguiglobal.h kernel/qtouchdevice.h kernel/qwindow.h kernel/qwindowdefs.h kernel/qwindowdefs_win.h math3d/qgenericmatrix.h math3d/qmatrix4x4.h math3d/qquaternion.h math3d/qvector2d.h math3d/qvector3d.h math3d/qvector4d.h opengl/qopengl.h opengl/qopenglbuffer.h opengl/qopengldebug.h opengl/qopenglextrafunctions.h opengl/qopenglframebufferobject.h opengl/qopenglfunctions.h opengl/qopenglfunctions_1_0.h opengl/qopenglfunctions_1_1.h opengl/qopenglfunctions_1_2.h opengl/qopenglfunctions_1_3.h opengl/qopenglfunctions_1_4.h opengl/qopenglfunctions_1_5.h opengl/qopenglfunctions_2_0.h opengl/qopenglfunctions_2_1.h opengl/qopenglfunctions_3_0.h opengl/qopenglfunctions_3_1.h opengl/qopenglfunctions_3_2_compatibility.h opengl/qopenglfunctions_3_2_core.h opengl/qopenglfunctions_3_3_compatibility.h opengl/qopenglfunctions_3_3_core.h opengl/qopenglfunctions_4_0_compatibility.h opengl/qopenglfunctions_4_0_core.h opengl/qopenglfunctions_4_1_compatibility.h opengl/qopenglfunctions_4_1_core.h opengl/qopenglfunctions_4_2_compatibility.h opengl/qopenglfunctions_4_2_core.h opengl/qopenglfunctions_4_3_compatibility.h opengl/qopenglfunctions_4_3_core.h opengl/qopenglfunctions_4_4_compatibility.h opengl/qopenglfunctions_4_4_core.h opengl/qopenglfunctions_4_5_compatibility.h opengl/qopenglfunctions_4_5_core.h opengl/qopenglfunctions_es2.h opengl/qopenglpaintdevice.h opengl/qopenglpixeltransferoptions.h opengl/qopenglshaderprogram.h opengl/qopengltexture.h opengl/qopengltextureblitter.h opengl/qopengltimerquery.h opengl/qopenglversionfunctions.h opengl/qopenglvertexarrayobject.h painting/qbackingstore.h painting/qbrush.h painting/qcolor.h painting/qcolorspace.h painting/qcolortransform.h painting/qmatrix.h painting/qpagedpaintdevice.h painting/qpagelayout.h painting/qpagesize.h painting/qpaintdevice.h painting/qpaintengine.h painting/qpainter.h painting/qpainterpath.h painting/qpdfwriter.h painting/qpen.h painting/qpolygon.h painting/qregion.h painting/qrgb.h painting/qrgba64.h painting/qtransform.h text/qabstracttextdocumentlayout.h text/qfont.h text/qfontdatabase.h text/qfontinfo.h text/qfontmetrics.h text/qglyphrun.h text/qrawfont.h text/qstatictext.h text/qsyntaxhighlighter.h text/qtextcursor.h text/qtextdocument.h text/qtextdocumentfragment.h text/qtextdocumentwriter.h text/qtextformat.h text/qtextlayout.h text/qtextlist.h text/qtextobject.h text/qtextoption.h text/qtexttable.h util/qdesktopservices.h util/qvalidator.h vulkan/qvulkaninstance.h vulkan/qvulkanwindow.h -SYNCQT.INJECTIONS = src/gui/vulkan/qvulkanfunctions.h:^qvulkanfunctions.h:QVulkanFunctions:QVulkanDeviceFunctions src/gui/vulkan/qvulkanfunctions_p.h:^5.15.8/QtGui/private/qvulkanfunctions_p.h +SYNCQT.INJECTIONS = src/gui/vulkan/qvulkanfunctions.h:^qvulkanfunctions.h:QVulkanFunctions:QVulkanDeviceFunctions src/gui/vulkan/qvulkanfunctions_p.h:^5.15.10/QtGui/private/qvulkanfunctions_p.h diff --git a/include/QtGui/qtguiversion.h b/include/QtGui/qtguiversion.h index 0de07bae..f02a482d 100644 --- a/include/QtGui/qtguiversion.h +++ b/include/QtGui/qtguiversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTGUI_VERSION_H #define QT_QTGUI_VERSION_H -#define QTGUI_VERSION_STR "5.15.8" +#define QTGUI_VERSION_STR "5.15.10" -#define QTGUI_VERSION 0x050F08 +#define QTGUI_VERSION 0x050F0A #endif // QT_QTGUI_VERSION_H diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/devicehandlerlist_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/devicehandlerlist_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/devicehandlerlist_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/devicehandlerlist_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevkeyboard_defaultmap_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevkeyboard_defaultmap_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevkeyboard_defaultmap_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevkeyboard_defaultmap_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevkeyboardhandler_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevkeyboardhandler_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevkeyboardhandler_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevkeyboardhandler_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevkeyboardmanager_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevkeyboardmanager_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevkeyboardmanager_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevkeyboardmanager_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevmousehandler_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevmousehandler_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevmousehandler_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevmousehandler_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevmousemanager_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevmousemanager_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevmousemanager_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevmousemanager_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtablethandler_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtablethandler_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtablethandler_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtablethandler_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtabletmanager_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtabletmanager_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtabletmanager_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtabletmanager_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtouchfilter_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtouchfilter_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtouchfilter_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtouchfilter_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtouchhandler_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtouchhandler_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtouchhandler_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtouchhandler_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtouchmanager_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtouchmanager_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevtouchmanager_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevtouchmanager_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevutil_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevutil_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qevdevutil_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qevdevutil_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qlibinputhandler_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qlibinputhandler_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qlibinputhandler_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qlibinputhandler_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qlibinputkeyboard_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qlibinputkeyboard_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qlibinputkeyboard_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qlibinputkeyboard_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qlibinputpointer_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qlibinputpointer_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qlibinputpointer_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qlibinputpointer_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qlibinputtouch_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qlibinputtouch_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qlibinputtouch_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qlibinputtouch_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qtouchoutputmapping_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qtouchoutputmapping_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qtouchoutputmapping_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qtouchoutputmapping_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qtslib_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qtslib_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qtslib_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qtslib_p.h diff --git a/include/QtInputSupport/5.15.8/QtInputSupport/private/qxkbcommon_p.h b/include/QtInputSupport/5.15.10/QtInputSupport/private/qxkbcommon_p.h similarity index 100% rename from include/QtInputSupport/5.15.8/QtInputSupport/private/qxkbcommon_p.h rename to include/QtInputSupport/5.15.10/QtInputSupport/private/qxkbcommon_p.h diff --git a/include/QtInputSupport/qtinputsupportversion.h b/include/QtInputSupport/qtinputsupportversion.h index d2863ff0..e6f65845 100644 --- a/include/QtInputSupport/qtinputsupportversion.h +++ b/include/QtInputSupport/qtinputsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTINPUTSUPPORT_VERSION_H #define QT_QTINPUTSUPPORT_VERSION_H -#define QTINPUTSUPPORT_VERSION_STR "5.15.8" +#define QTINPUTSUPPORT_VERSION_STR "5.15.10" -#define QTINPUTSUPPORT_VERSION 0x050F08 +#define QTINPUTSUPPORT_VERSION 0x050F0A #endif // QT_QTINPUTSUPPORT_VERSION_H diff --git a/include/QtKmsSupport/5.15.8/QtKmsSupport/private/qkmsdevice_p.h b/include/QtKmsSupport/5.15.10/QtKmsSupport/private/qkmsdevice_p.h similarity index 100% rename from include/QtKmsSupport/5.15.8/QtKmsSupport/private/qkmsdevice_p.h rename to include/QtKmsSupport/5.15.10/QtKmsSupport/private/qkmsdevice_p.h diff --git a/include/QtKmsSupport/qtkmssupportversion.h b/include/QtKmsSupport/qtkmssupportversion.h index 5fc6aab7..612a5419 100644 --- a/include/QtKmsSupport/qtkmssupportversion.h +++ b/include/QtKmsSupport/qtkmssupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTKMSSUPPORT_VERSION_H #define QT_QTKMSSUPPORT_VERSION_H -#define QTKMSSUPPORT_VERSION_STR "5.15.8" +#define QTKMSSUPPORT_VERSION_STR "5.15.10" -#define QTKMSSUPPORT_VERSION 0x050F08 +#define QTKMSSUPPORT_VERSION 0x050F0A #endif // QT_QTKMSSUPPORT_VERSION_H diff --git a/include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/application_p.h b/include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/application_p.h similarity index 100% rename from include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/application_p.h rename to include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/application_p.h diff --git a/include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/atspiadaptor_p.h b/include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/atspiadaptor_p.h similarity index 100% rename from include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/atspiadaptor_p.h rename to include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/atspiadaptor_p.h diff --git a/include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/bridge_p.h b/include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/bridge_p.h similarity index 100% rename from include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/bridge_p.h rename to include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/bridge_p.h diff --git a/include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/cache_p.h b/include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/cache_p.h similarity index 100% rename from include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/cache_p.h rename to include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/cache_p.h diff --git a/include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/constant_mappings_p.h b/include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/constant_mappings_p.h similarity index 100% rename from include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/constant_mappings_p.h rename to include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/constant_mappings_p.h diff --git a/include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/dbusconnection_p.h b/include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/dbusconnection_p.h similarity index 100% rename from include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/dbusconnection_p.h rename to include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/dbusconnection_p.h diff --git a/include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/struct_marshallers_p.h b/include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/struct_marshallers_p.h similarity index 100% rename from include/QtLinuxAccessibilitySupport/5.15.8/QtLinuxAccessibilitySupport/private/struct_marshallers_p.h rename to include/QtLinuxAccessibilitySupport/5.15.10/QtLinuxAccessibilitySupport/private/struct_marshallers_p.h diff --git a/include/QtLinuxAccessibilitySupport/qtlinuxaccessibilitysupportversion.h b/include/QtLinuxAccessibilitySupport/qtlinuxaccessibilitysupportversion.h index 3c01e662..714a3d36 100644 --- a/include/QtLinuxAccessibilitySupport/qtlinuxaccessibilitysupportversion.h +++ b/include/QtLinuxAccessibilitySupport/qtlinuxaccessibilitysupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTLINUXACCESSIBILITYSUPPORT_VERSION_H #define QT_QTLINUXACCESSIBILITYSUPPORT_VERSION_H -#define QTLINUXACCESSIBILITYSUPPORT_VERSION_STR "5.15.8" +#define QTLINUXACCESSIBILITYSUPPORT_VERSION_STR "5.15.10" -#define QTLINUXACCESSIBILITYSUPPORT_VERSION 0x050F08 +#define QTLINUXACCESSIBILITYSUPPORT_VERSION 0x050F0A #endif // QT_QTLINUXACCESSIBILITYSUPPORT_VERSION_H diff --git a/include/QtMockPlugins1/qtmockplugins1version.h b/include/QtMockPlugins1/qtmockplugins1version.h index 8e796bac..b0c9d8c9 100644 --- a/include/QtMockPlugins1/qtmockplugins1version.h +++ b/include/QtMockPlugins1/qtmockplugins1version.h @@ -2,8 +2,8 @@ #ifndef QT_QTMOCKPLUGINS1_VERSION_H #define QT_QTMOCKPLUGINS1_VERSION_H -#define QTMOCKPLUGINS1_VERSION_STR "5.15.8" +#define QTMOCKPLUGINS1_VERSION_STR "5.15.10" -#define QTMOCKPLUGINS1_VERSION 0x050F08 +#define QTMOCKPLUGINS1_VERSION 0x050F0A #endif // QT_QTMOCKPLUGINS1_VERSION_H diff --git a/include/QtMockPlugins2/qtmockplugins2version.h b/include/QtMockPlugins2/qtmockplugins2version.h index be49b7e2..416dde16 100644 --- a/include/QtMockPlugins2/qtmockplugins2version.h +++ b/include/QtMockPlugins2/qtmockplugins2version.h @@ -2,8 +2,8 @@ #ifndef QT_QTMOCKPLUGINS2_VERSION_H #define QT_QTMOCKPLUGINS2_VERSION_H -#define QTMOCKPLUGINS2_VERSION_STR "5.15.8" +#define QTMOCKPLUGINS2_VERSION_STR "5.15.10" -#define QTMOCKPLUGINS2_VERSION 0x050F08 +#define QTMOCKPLUGINS2_VERSION 0x050F0A #endif // QT_QTMOCKPLUGINS2_VERSION_H diff --git a/include/QtMockPlugins3/qtmockplugins3version.h b/include/QtMockPlugins3/qtmockplugins3version.h index 25ddebf3..b11f0015 100644 --- a/include/QtMockPlugins3/qtmockplugins3version.h +++ b/include/QtMockPlugins3/qtmockplugins3version.h @@ -2,8 +2,8 @@ #ifndef QT_QTMOCKPLUGINS3_VERSION_H #define QT_QTMOCKPLUGINS3_VERSION_H -#define QTMOCKPLUGINS3_VERSION_STR "5.15.8" +#define QTMOCKPLUGINS3_VERSION_STR "5.15.10" -#define QTMOCKPLUGINS3_VERSION 0x050F08 +#define QTMOCKPLUGINS3_VERSION 0x050F0A #endif // QT_QTMOCKPLUGINS3_VERSION_H diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/bitstreams_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/bitstreams_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/bitstreams_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/bitstreams_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/hpack_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/hpack_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/hpack_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/hpack_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/hpacktable_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/hpacktable_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/hpacktable_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/hpacktable_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/http2frames_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/http2frames_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/http2frames_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/http2frames_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/http2protocol_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/http2protocol_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/http2protocol_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/http2protocol_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/http2streams_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/http2streams_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/http2streams_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/http2streams_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/huffman_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/huffman_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/huffman_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/huffman_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qabstractnetworkcache_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qabstractnetworkcache_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qabstractnetworkcache_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qabstractnetworkcache_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qabstractprotocolhandler_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qabstractprotocolhandler_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qabstractprotocolhandler_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qabstractprotocolhandler_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qabstractsocket_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qabstractsocket_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qabstractsocket_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qabstractsocket_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qabstractsocketengine_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qabstractsocketengine_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qabstractsocketengine_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qabstractsocketengine_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qasn1element_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qasn1element_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qasn1element_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qasn1element_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qauthenticator_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qauthenticator_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qauthenticator_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qauthenticator_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qbearerengine_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qbearerengine_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qbearerengine_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qbearerengine_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qbearerplugin_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qbearerplugin_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qbearerplugin_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qbearerplugin_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qdnslookup_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qdnslookup_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qdnslookup_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qdnslookup_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qdtls_openssl_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qdtls_openssl_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qdtls_openssl_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qdtls_openssl_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qdtls_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qdtls_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qdtls_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qdtls_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qftp_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qftp_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qftp_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qftp_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhostaddress_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhostaddress_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhostaddress_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhostaddress_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhostinfo_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhostinfo_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhostinfo_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhostinfo_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhsts_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhsts_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhsts_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhsts_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhstsstore_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhstsstore_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhstsstore_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhstsstore_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttp2protocolhandler_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttp2protocolhandler_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttp2protocolhandler_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttp2protocolhandler_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttpmultipart_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttpmultipart_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttpmultipart_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttpmultipart_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkconnection_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkconnection_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkconnection_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkconnection_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkconnectionchannel_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkconnectionchannel_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkconnectionchannel_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkconnectionchannel_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkheader_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkheader_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkheader_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkheader_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkreply_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkreply_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkreply_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkreply_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkrequest_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkrequest_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttpnetworkrequest_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttpnetworkrequest_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttpprotocolhandler_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttpprotocolhandler_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttpprotocolhandler_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttpprotocolhandler_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttpsocketengine_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttpsocketengine_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttpsocketengine_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttpsocketengine_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qhttpthreaddelegate_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qhttpthreaddelegate_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qhttpthreaddelegate_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qhttpthreaddelegate_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qlocalserver_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qlocalserver_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qlocalserver_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qlocalserver_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qlocalsocket_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qlocalsocket_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qlocalsocket_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qlocalsocket_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnativesocketengine_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnativesocketengine_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnativesocketengine_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnativesocketengine_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnativesocketengine_winrt_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnativesocketengine_winrt_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnativesocketengine_winrt_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnativesocketengine_winrt_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnet_unix_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnet_unix_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnet_unix_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnet_unix_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetconmonitor_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetconmonitor_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetconmonitor_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetconmonitor_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessauthenticationmanager_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessauthenticationmanager_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessauthenticationmanager_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessauthenticationmanager_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessbackend_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessbackend_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessbackend_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessbackend_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccesscache_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccesscache_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccesscache_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccesscache_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccesscachebackend_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccesscachebackend_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccesscachebackend_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccesscachebackend_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessdebugpipebackend_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessdebugpipebackend_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessdebugpipebackend_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessdebugpipebackend_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessfilebackend_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessfilebackend_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessfilebackend_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessfilebackend_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessftpbackend_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessftpbackend_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessftpbackend_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessftpbackend_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessmanager_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessmanager_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkaccessmanager_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkaccessmanager_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkconfigmanager_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkconfigmanager_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkconfigmanager_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkconfigmanager_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkconfiguration_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkconfiguration_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkconfiguration_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkconfiguration_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkcookie_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkcookie_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkcookie_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkcookie_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkcookiejar_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkcookiejar_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkcookiejar_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkcookiejar_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkdatagram_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkdatagram_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkdatagram_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkdatagram_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkdiskcache_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkdiskcache_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkdiskcache_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkdiskcache_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkfile_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkfile_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkfile_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkfile_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkinterface_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkinterface_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkinterface_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkinterface_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkinterface_uikit_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkinterface_uikit_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkinterface_uikit_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkinterface_uikit_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkinterface_unix_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkinterface_unix_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkinterface_unix_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkinterface_unix_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreply_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreply_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreply_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreply_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplydataimpl_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplydataimpl_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplydataimpl_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplydataimpl_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplyfileimpl_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplyfileimpl_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplyfileimpl_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplyfileimpl_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplyhttpimpl_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplyhttpimpl_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplyhttpimpl_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplyhttpimpl_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplyimpl_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplyimpl_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplyimpl_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplyimpl_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplywasmimpl_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplywasmimpl_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkreplywasmimpl_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkreplywasmimpl_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworkrequest_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworkrequest_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworkrequest_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworkrequest_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qnetworksession_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qnetworksession_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qnetworksession_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qnetworksession_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qocsp_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qocsp_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qocsp_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qocsp_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qocspresponse_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qocspresponse_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qocspresponse_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qocspresponse_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsctpserver_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsctpserver_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsctpserver_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsctpserver_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsctpsocket_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsctpsocket_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsctpsocket_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsctpsocket_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsharednetworksession_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsharednetworksession_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsharednetworksession_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsharednetworksession_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsocks5socketengine_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsocks5socketengine_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsocks5socketengine_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsocks5socketengine_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qspdyprotocolhandler_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qspdyprotocolhandler_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qspdyprotocolhandler_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qspdyprotocolhandler_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qssl_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qssl_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qssl_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qssl_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslcertificate_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslcertificate_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslcertificate_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslcertificate_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslcertificateextension_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslcertificateextension_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslcertificateextension_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslcertificateextension_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslcipher_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslcipher_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslcipher_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslcipher_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslconfiguration_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslconfiguration_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslconfiguration_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslconfiguration_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslcontext_openssl_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslcontext_openssl_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslcontext_openssl_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslcontext_openssl_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qssldiffiehellmanparameters_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qssldiffiehellmanparameters_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qssldiffiehellmanparameters_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qssldiffiehellmanparameters_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslkey_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslkey_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslkey_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslkey_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslpresharedkeyauthenticator_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslpresharedkeyauthenticator_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslpresharedkeyauthenticator_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslpresharedkeyauthenticator_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_mac_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_mac_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_mac_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_mac_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_openssl_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_openssl_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_openssl_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_openssl_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_openssl_symbols_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_openssl_symbols_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_openssl_symbols_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_openssl_symbols_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_schannel_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_schannel_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_schannel_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_schannel_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_winrt_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_winrt_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qsslsocket_winrt_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qsslsocket_winrt_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qtcpserver_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qtcpserver_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qtcpserver_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qtcpserver_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qtcpsocket_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qtcpsocket_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qtcpsocket_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qtcpsocket_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qtnetworkglobal_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qtnetworkglobal_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qtnetworkglobal_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qtnetworkglobal_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qurlinfo_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qurlinfo_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qurlinfo_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qurlinfo_p.h diff --git a/include/QtNetwork/5.15.8/QtNetwork/private/qwindowscarootfetcher_p.h b/include/QtNetwork/5.15.10/QtNetwork/private/qwindowscarootfetcher_p.h similarity index 100% rename from include/QtNetwork/5.15.8/QtNetwork/private/qwindowscarootfetcher_p.h rename to include/QtNetwork/5.15.10/QtNetwork/private/qwindowscarootfetcher_p.h diff --git a/include/QtNetwork/qtnetworkversion.h b/include/QtNetwork/qtnetworkversion.h index 4bb759d3..273212f3 100644 --- a/include/QtNetwork/qtnetworkversion.h +++ b/include/QtNetwork/qtnetworkversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTNETWORK_VERSION_H #define QT_QTNETWORK_VERSION_H -#define QTNETWORK_VERSION_STR "5.15.8" +#define QTNETWORK_VERSION_STR "5.15.10" -#define QTNETWORK_VERSION 0x050F08 +#define QTNETWORK_VERSION 0x050F0A #endif // QT_QTNETWORK_VERSION_H diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qgl2pexvertexarray_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qgl2pexvertexarray_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qgl2pexvertexarray_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qgl2pexvertexarray_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qgl_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qgl_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qgl_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qgl_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qglcustomshaderstage_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qglcustomshaderstage_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qglcustomshaderstage_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qglcustomshaderstage_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qglengineshadermanager_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qglengineshadermanager_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qglengineshadermanager_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qglengineshadermanager_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qglengineshadersource_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qglengineshadersource_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qglengineshadersource_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qglengineshadersource_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qglframebufferobject_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qglframebufferobject_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qglframebufferobject_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qglframebufferobject_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qglgradientcache_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qglgradientcache_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qglgradientcache_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qglgradientcache_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qglpaintdevice_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qglpaintdevice_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qglpaintdevice_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qglpaintdevice_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qglpixelbuffer_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qglpixelbuffer_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qglpixelbuffer_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qglpixelbuffer_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qglshadercache_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qglshadercache_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qglshadercache_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qglshadercache_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qgraphicsshadereffect_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qgraphicsshadereffect_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qgraphicsshadereffect_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qgraphicsshadereffect_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qpaintengineex_opengl2_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qpaintengineex_opengl2_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qpaintengineex_opengl2_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qpaintengineex_opengl2_p.h diff --git a/include/QtOpenGL/5.15.8/QtOpenGL/private/qtextureglyphcache_gl_p.h b/include/QtOpenGL/5.15.10/QtOpenGL/private/qtextureglyphcache_gl_p.h similarity index 100% rename from include/QtOpenGL/5.15.8/QtOpenGL/private/qtextureglyphcache_gl_p.h rename to include/QtOpenGL/5.15.10/QtOpenGL/private/qtextureglyphcache_gl_p.h diff --git a/include/QtOpenGL/qtopenglversion.h b/include/QtOpenGL/qtopenglversion.h index aa3a82dc..0d99fbbf 100644 --- a/include/QtOpenGL/qtopenglversion.h +++ b/include/QtOpenGL/qtopenglversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTOPENGL_VERSION_H #define QT_QTOPENGL_VERSION_H -#define QTOPENGL_VERSION_STR "5.15.8" +#define QTOPENGL_VERSION_STR "5.15.10" -#define QTOPENGL_VERSION 0x050F08 +#define QTOPENGL_VERSION 0x050F0A #endif // QT_QTOPENGL_VERSION_H diff --git a/include/QtOpenGLExtensions/qtopenglextensionsversion.h b/include/QtOpenGLExtensions/qtopenglextensionsversion.h index df4df5e3..aa7b73a6 100644 --- a/include/QtOpenGLExtensions/qtopenglextensionsversion.h +++ b/include/QtOpenGLExtensions/qtopenglextensionsversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTOPENGLEXTENSIONS_VERSION_H #define QT_QTOPENGLEXTENSIONS_VERSION_H -#define QTOPENGLEXTENSIONS_VERSION_STR "5.15.8" +#define QTOPENGLEXTENSIONS_VERSION_STR "5.15.10" -#define QTOPENGLEXTENSIONS_VERSION 0x050F08 +#define QTOPENGLEXTENSIONS_VERSION 0x050F0A #endif // QT_QTOPENGLEXTENSIONS_VERSION_H diff --git a/include/QtPlatformCompositorSupport/5.15.8/QtPlatformCompositorSupport/private/qopenglcompositor_p.h b/include/QtPlatformCompositorSupport/5.15.10/QtPlatformCompositorSupport/private/qopenglcompositor_p.h similarity index 100% rename from include/QtPlatformCompositorSupport/5.15.8/QtPlatformCompositorSupport/private/qopenglcompositor_p.h rename to include/QtPlatformCompositorSupport/5.15.10/QtPlatformCompositorSupport/private/qopenglcompositor_p.h diff --git a/include/QtPlatformCompositorSupport/5.15.8/QtPlatformCompositorSupport/private/qopenglcompositorbackingstore_p.h b/include/QtPlatformCompositorSupport/5.15.10/QtPlatformCompositorSupport/private/qopenglcompositorbackingstore_p.h similarity index 100% rename from include/QtPlatformCompositorSupport/5.15.8/QtPlatformCompositorSupport/private/qopenglcompositorbackingstore_p.h rename to include/QtPlatformCompositorSupport/5.15.10/QtPlatformCompositorSupport/private/qopenglcompositorbackingstore_p.h diff --git a/include/QtPlatformCompositorSupport/qtplatformcompositorsupportversion.h b/include/QtPlatformCompositorSupport/qtplatformcompositorsupportversion.h index 28229d90..66fda727 100644 --- a/include/QtPlatformCompositorSupport/qtplatformcompositorsupportversion.h +++ b/include/QtPlatformCompositorSupport/qtplatformcompositorsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTPLATFORMCOMPOSITORSUPPORT_VERSION_H #define QT_QTPLATFORMCOMPOSITORSUPPORT_VERSION_H -#define QTPLATFORMCOMPOSITORSUPPORT_VERSION_STR "5.15.8" +#define QTPLATFORMCOMPOSITORSUPPORT_VERSION_STR "5.15.10" -#define QTPLATFORMCOMPOSITORSUPPORT_VERSION 0x050F08 +#define QTPLATFORMCOMPOSITORSUPPORT_VERSION 0x050F0A #endif // QT_QTPLATFORMCOMPOSITORSUPPORT_VERSION_H diff --git a/include/QtPlatformHeaders/qtplatformheadersversion.h b/include/QtPlatformHeaders/qtplatformheadersversion.h index a019a73c..9aecd464 100644 --- a/include/QtPlatformHeaders/qtplatformheadersversion.h +++ b/include/QtPlatformHeaders/qtplatformheadersversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTPLATFORMHEADERS_VERSION_H #define QT_QTPLATFORMHEADERS_VERSION_H -#define QTPLATFORMHEADERS_VERSION_STR "5.15.8" +#define QTPLATFORMHEADERS_VERSION_STR "5.15.10" -#define QTPLATFORMHEADERS_VERSION 0x050F08 +#define QTPLATFORMHEADERS_VERSION 0x050F0A #endif // QT_QTPLATFORMHEADERS_VERSION_H diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qabstractprintdialog_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qabstractprintdialog_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qabstractprintdialog_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qabstractprintdialog_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qcups_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qcups_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qcups_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qcups_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qcupsjobwidget_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qcupsjobwidget_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qcupsjobwidget_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qcupsjobwidget_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qpagesetupdialog_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qpagesetupdialog_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qpagesetupdialog_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qpagesetupdialog_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qpagesetupdialog_unix_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qpagesetupdialog_unix_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qpagesetupdialog_unix_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qpagesetupdialog_unix_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qpaintengine_alpha_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qpaintengine_alpha_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qpaintengine_alpha_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qpaintengine_alpha_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qpaintengine_preview_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qpaintengine_preview_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qpaintengine_preview_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qpaintengine_preview_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprint_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprint_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprint_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprint_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprintdevice_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprintdevice_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprintdevice_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprintdevice_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprintengine_pdf_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprintengine_pdf_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprintengine_pdf_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprintengine_pdf_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprintengine_win_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprintengine_win_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprintengine_win_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprintengine_win_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprinter_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprinter_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprinter_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprinter_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprinterinfo_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprinterinfo_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qprinterinfo_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qprinterinfo_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/private/qtprintsupportglobal_p.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/private/qtprintsupportglobal_p.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/private/qtprintsupportglobal_p.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/private/qtprintsupportglobal_p.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/qpa/qplatformprintdevice.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/qpa/qplatformprintdevice.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/qpa/qplatformprintdevice.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/qpa/qplatformprintdevice.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/qpa/qplatformprintersupport.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/qpa/qplatformprintersupport.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/qpa/qplatformprintersupport.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/qpa/qplatformprintersupport.h diff --git a/include/QtPrintSupport/5.15.8/QtPrintSupport/qpa/qplatformprintplugin.h b/include/QtPrintSupport/5.15.10/QtPrintSupport/qpa/qplatformprintplugin.h similarity index 100% rename from include/QtPrintSupport/5.15.8/QtPrintSupport/qpa/qplatformprintplugin.h rename to include/QtPrintSupport/5.15.10/QtPrintSupport/qpa/qplatformprintplugin.h diff --git a/include/QtPrintSupport/qtprintsupportversion.h b/include/QtPrintSupport/qtprintsupportversion.h index 47abb2fc..d9a3a8c9 100644 --- a/include/QtPrintSupport/qtprintsupportversion.h +++ b/include/QtPrintSupport/qtprintsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTPRINTSUPPORT_VERSION_H #define QT_QTPRINTSUPPORT_VERSION_H -#define QTPRINTSUPPORT_VERSION_STR "5.15.8" +#define QTPRINTSUPPORT_VERSION_STR "5.15.10" -#define QTPRINTSUPPORT_VERSION 0x050F08 +#define QTPRINTSUPPORT_VERSION 0x050F0A #endif // QT_QTPRINTSUPPORT_VERSION_H diff --git a/include/QtServiceSupport/5.15.8/QtServiceSupport/private/qgenericunixservices_p.h b/include/QtServiceSupport/5.15.10/QtServiceSupport/private/qgenericunixservices_p.h similarity index 100% rename from include/QtServiceSupport/5.15.8/QtServiceSupport/private/qgenericunixservices_p.h rename to include/QtServiceSupport/5.15.10/QtServiceSupport/private/qgenericunixservices_p.h diff --git a/include/QtServiceSupport/qtservicesupportversion.h b/include/QtServiceSupport/qtservicesupportversion.h index c9bedfca..99b64fa0 100644 --- a/include/QtServiceSupport/qtservicesupportversion.h +++ b/include/QtServiceSupport/qtservicesupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTSERVICESUPPORT_VERSION_H #define QT_QTSERVICESUPPORT_VERSION_H -#define QTSERVICESUPPORT_VERSION_STR "5.15.8" +#define QTSERVICESUPPORT_VERSION_STR "5.15.10" -#define QTSERVICESUPPORT_VERSION 0x050F08 +#define QTSERVICESUPPORT_VERSION 0x050F0A #endif // QT_QTSERVICESUPPORT_VERSION_H diff --git a/include/QtSql/5.15.8/QtSql/private/qsqlcachedresult_p.h b/include/QtSql/5.15.10/QtSql/private/qsqlcachedresult_p.h similarity index 100% rename from include/QtSql/5.15.8/QtSql/private/qsqlcachedresult_p.h rename to include/QtSql/5.15.10/QtSql/private/qsqlcachedresult_p.h diff --git a/include/QtSql/5.15.8/QtSql/private/qsqldriver_p.h b/include/QtSql/5.15.10/QtSql/private/qsqldriver_p.h similarity index 100% rename from include/QtSql/5.15.8/QtSql/private/qsqldriver_p.h rename to include/QtSql/5.15.10/QtSql/private/qsqldriver_p.h diff --git a/include/QtSql/5.15.8/QtSql/private/qsqlnulldriver_p.h b/include/QtSql/5.15.10/QtSql/private/qsqlnulldriver_p.h similarity index 100% rename from include/QtSql/5.15.8/QtSql/private/qsqlnulldriver_p.h rename to include/QtSql/5.15.10/QtSql/private/qsqlnulldriver_p.h diff --git a/include/QtSql/5.15.8/QtSql/private/qsqlquerymodel_p.h b/include/QtSql/5.15.10/QtSql/private/qsqlquerymodel_p.h similarity index 100% rename from include/QtSql/5.15.8/QtSql/private/qsqlquerymodel_p.h rename to include/QtSql/5.15.10/QtSql/private/qsqlquerymodel_p.h diff --git a/include/QtSql/5.15.8/QtSql/private/qsqlresult_p.h b/include/QtSql/5.15.10/QtSql/private/qsqlresult_p.h similarity index 100% rename from include/QtSql/5.15.8/QtSql/private/qsqlresult_p.h rename to include/QtSql/5.15.10/QtSql/private/qsqlresult_p.h diff --git a/include/QtSql/5.15.8/QtSql/private/qsqltablemodel_p.h b/include/QtSql/5.15.10/QtSql/private/qsqltablemodel_p.h similarity index 100% rename from include/QtSql/5.15.8/QtSql/private/qsqltablemodel_p.h rename to include/QtSql/5.15.10/QtSql/private/qsqltablemodel_p.h diff --git a/include/QtSql/5.15.8/QtSql/private/qtsqlglobal_p.h b/include/QtSql/5.15.10/QtSql/private/qtsqlglobal_p.h similarity index 100% rename from include/QtSql/5.15.8/QtSql/private/qtsqlglobal_p.h rename to include/QtSql/5.15.10/QtSql/private/qtsqlglobal_p.h diff --git a/include/QtSql/qtsqlversion.h b/include/QtSql/qtsqlversion.h index cae6b27e..cba4d5e5 100644 --- a/include/QtSql/qtsqlversion.h +++ b/include/QtSql/qtsqlversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTSQL_VERSION_H #define QT_QTSQL_VERSION_H -#define QTSQL_VERSION_STR "5.15.8" +#define QTSQL_VERSION_STR "5.15.10" -#define QTSQL_VERSION 0x050F08 +#define QTSQL_VERSION 0x050F0A #endif // QT_QTSQL_VERSION_H diff --git a/include/QtTest/5.15.8/QtTest/private/callgrind_p.h b/include/QtTest/5.15.10/QtTest/private/callgrind_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/callgrind_p.h rename to include/QtTest/5.15.10/QtTest/private/callgrind_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/cycle_p.h b/include/QtTest/5.15.10/QtTest/private/cycle_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/cycle_p.h rename to include/QtTest/5.15.10/QtTest/private/cycle_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/linux_perf_event_p.h b/include/QtTest/5.15.10/QtTest/private/linux_perf_event_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/linux_perf_event_p.h rename to include/QtTest/5.15.10/QtTest/private/linux_perf_event_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qabstracttestlogger_p.h b/include/QtTest/5.15.10/QtTest/private/qabstracttestlogger_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qabstracttestlogger_p.h rename to include/QtTest/5.15.10/QtTest/private/qabstracttestlogger_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qappletestlogger_p.h b/include/QtTest/5.15.10/QtTest/private/qappletestlogger_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qappletestlogger_p.h rename to include/QtTest/5.15.10/QtTest/private/qappletestlogger_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qbenchmark_p.h b/include/QtTest/5.15.10/QtTest/private/qbenchmark_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qbenchmark_p.h rename to include/QtTest/5.15.10/QtTest/private/qbenchmark_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qbenchmarkevent_p.h b/include/QtTest/5.15.10/QtTest/private/qbenchmarkevent_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qbenchmarkevent_p.h rename to include/QtTest/5.15.10/QtTest/private/qbenchmarkevent_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qbenchmarkmeasurement_p.h b/include/QtTest/5.15.10/QtTest/private/qbenchmarkmeasurement_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qbenchmarkmeasurement_p.h rename to include/QtTest/5.15.10/QtTest/private/qbenchmarkmeasurement_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qbenchmarkmetric_p.h b/include/QtTest/5.15.10/QtTest/private/qbenchmarkmetric_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qbenchmarkmetric_p.h rename to include/QtTest/5.15.10/QtTest/private/qbenchmarkmetric_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qbenchmarkperfevents_p.h b/include/QtTest/5.15.10/QtTest/private/qbenchmarkperfevents_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qbenchmarkperfevents_p.h rename to include/QtTest/5.15.10/QtTest/private/qbenchmarkperfevents_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qbenchmarktimemeasurers_p.h b/include/QtTest/5.15.10/QtTest/private/qbenchmarktimemeasurers_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qbenchmarktimemeasurers_p.h rename to include/QtTest/5.15.10/QtTest/private/qbenchmarktimemeasurers_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qbenchmarkvalgrind_p.h b/include/QtTest/5.15.10/QtTest/private/qbenchmarkvalgrind_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qbenchmarkvalgrind_p.h rename to include/QtTest/5.15.10/QtTest/private/qbenchmarkvalgrind_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qcsvbenchmarklogger_p.h b/include/QtTest/5.15.10/QtTest/private/qcsvbenchmarklogger_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qcsvbenchmarklogger_p.h rename to include/QtTest/5.15.10/QtTest/private/qcsvbenchmarklogger_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qjunittestlogger_p.h b/include/QtTest/5.15.10/QtTest/private/qjunittestlogger_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qjunittestlogger_p.h rename to include/QtTest/5.15.10/QtTest/private/qjunittestlogger_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qplaintestlogger_p.h b/include/QtTest/5.15.10/QtTest/private/qplaintestlogger_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qplaintestlogger_p.h rename to include/QtTest/5.15.10/QtTest/private/qplaintestlogger_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qsignaldumper_p.h b/include/QtTest/5.15.10/QtTest/private/qsignaldumper_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qsignaldumper_p.h rename to include/QtTest/5.15.10/QtTest/private/qsignaldumper_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtaptestlogger_p.h b/include/QtTest/5.15.10/QtTest/private/qtaptestlogger_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtaptestlogger_p.h rename to include/QtTest/5.15.10/QtTest/private/qtaptestlogger_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qteamcitylogger_p.h b/include/QtTest/5.15.10/QtTest/private/qteamcitylogger_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qteamcitylogger_p.h rename to include/QtTest/5.15.10/QtTest/private/qteamcitylogger_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtestblacklist_p.h b/include/QtTest/5.15.10/QtTest/private/qtestblacklist_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtestblacklist_p.h rename to include/QtTest/5.15.10/QtTest/private/qtestblacklist_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtestcoreelement_p.h b/include/QtTest/5.15.10/QtTest/private/qtestcoreelement_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtestcoreelement_p.h rename to include/QtTest/5.15.10/QtTest/private/qtestcoreelement_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtestcorelist_p.h b/include/QtTest/5.15.10/QtTest/private/qtestcorelist_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtestcorelist_p.h rename to include/QtTest/5.15.10/QtTest/private/qtestcorelist_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtestelement_p.h b/include/QtTest/5.15.10/QtTest/private/qtestelement_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtestelement_p.h rename to include/QtTest/5.15.10/QtTest/private/qtestelement_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtestelementattribute_p.h b/include/QtTest/5.15.10/QtTest/private/qtestelementattribute_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtestelementattribute_p.h rename to include/QtTest/5.15.10/QtTest/private/qtestelementattribute_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtesthelpers_p.h b/include/QtTest/5.15.10/QtTest/private/qtesthelpers_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtesthelpers_p.h rename to include/QtTest/5.15.10/QtTest/private/qtesthelpers_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtestjunitstreamer_p.h b/include/QtTest/5.15.10/QtTest/private/qtestjunitstreamer_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtestjunitstreamer_p.h rename to include/QtTest/5.15.10/QtTest/private/qtestjunitstreamer_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtestlog_p.h b/include/QtTest/5.15.10/QtTest/private/qtestlog_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtestlog_p.h rename to include/QtTest/5.15.10/QtTest/private/qtestlog_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtestresult_p.h b/include/QtTest/5.15.10/QtTest/private/qtestresult_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtestresult_p.h rename to include/QtTest/5.15.10/QtTest/private/qtestresult_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtesttable_p.h b/include/QtTest/5.15.10/QtTest/private/qtesttable_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtesttable_p.h rename to include/QtTest/5.15.10/QtTest/private/qtesttable_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qtestutil_macos_p.h b/include/QtTest/5.15.10/QtTest/private/qtestutil_macos_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qtestutil_macos_p.h rename to include/QtTest/5.15.10/QtTest/private/qtestutil_macos_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qxctestlogger_p.h b/include/QtTest/5.15.10/QtTest/private/qxctestlogger_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qxctestlogger_p.h rename to include/QtTest/5.15.10/QtTest/private/qxctestlogger_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/qxmltestlogger_p.h b/include/QtTest/5.15.10/QtTest/private/qxmltestlogger_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/qxmltestlogger_p.h rename to include/QtTest/5.15.10/QtTest/private/qxmltestlogger_p.h diff --git a/include/QtTest/5.15.8/QtTest/private/valgrind_p.h b/include/QtTest/5.15.10/QtTest/private/valgrind_p.h similarity index 100% rename from include/QtTest/5.15.8/QtTest/private/valgrind_p.h rename to include/QtTest/5.15.10/QtTest/private/valgrind_p.h diff --git a/include/QtTest/qttestversion.h b/include/QtTest/qttestversion.h index f5f7868d..54b0602f 100644 --- a/include/QtTest/qttestversion.h +++ b/include/QtTest/qttestversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTTEST_VERSION_H #define QT_QTTEST_VERSION_H -#define QTTEST_VERSION_STR "5.15.8" +#define QTTEST_VERSION_STR "5.15.10" -#define QTTEST_VERSION 0x050F08 +#define QTTEST_VERSION 0x050F0A #endif // QT_QTTEST_VERSION_H diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qabstractfileiconengine_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qabstractfileiconengine_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qabstractfileiconengine_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qabstractfileiconengine_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenuadaptor_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenuadaptor_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenuadaptor_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenuadaptor_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenubar_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenubar_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenubar_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenubar_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenuconnection_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenuconnection_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenuconnection_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenuconnection_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenuregistrarproxy_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenuregistrarproxy_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenuregistrarproxy_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenuregistrarproxy_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenutypes_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenutypes_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusmenutypes_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusmenutypes_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusplatformmenu_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusplatformmenu_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbusplatformmenu_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbusplatformmenu_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbustrayicon_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbustrayicon_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbustrayicon_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbustrayicon_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbustraytypes_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbustraytypes_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qdbustraytypes_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qdbustraytypes_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qgenericunixthemes_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qgenericunixthemes_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qgenericunixthemes_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qgenericunixthemes_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qstatusnotifieritemadaptor_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qstatusnotifieritemadaptor_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qstatusnotifieritemadaptor_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qstatusnotifieritemadaptor_p.h diff --git a/include/QtThemeSupport/5.15.8/QtThemeSupport/private/qxdgnotificationproxy_p.h b/include/QtThemeSupport/5.15.10/QtThemeSupport/private/qxdgnotificationproxy_p.h similarity index 100% rename from include/QtThemeSupport/5.15.8/QtThemeSupport/private/qxdgnotificationproxy_p.h rename to include/QtThemeSupport/5.15.10/QtThemeSupport/private/qxdgnotificationproxy_p.h diff --git a/include/QtThemeSupport/qtthemesupportversion.h b/include/QtThemeSupport/qtthemesupportversion.h index 560c409e..9ac59bdf 100644 --- a/include/QtThemeSupport/qtthemesupportversion.h +++ b/include/QtThemeSupport/qtthemesupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTTHEMESUPPORT_VERSION_H #define QT_QTTHEMESUPPORT_VERSION_H -#define QTTHEMESUPPORT_VERSION_STR "5.15.8" +#define QTTHEMESUPPORT_VERSION_STR "5.15.10" -#define QTTHEMESUPPORT_VERSION 0x050F08 +#define QTTHEMESUPPORT_VERSION 0x050F0A #endif // QT_QTTHEMESUPPORT_VERSION_H diff --git a/include/QtVulkanSupport/5.15.8/QtVulkanSupport/private/qbasicvulkanplatforminstance_p.h b/include/QtVulkanSupport/5.15.10/QtVulkanSupport/private/qbasicvulkanplatforminstance_p.h similarity index 100% rename from include/QtVulkanSupport/5.15.8/QtVulkanSupport/private/qbasicvulkanplatforminstance_p.h rename to include/QtVulkanSupport/5.15.10/QtVulkanSupport/private/qbasicvulkanplatforminstance_p.h diff --git a/include/QtVulkanSupport/5.15.8/QtVulkanSupport/private/qvkconvenience_p.h b/include/QtVulkanSupport/5.15.10/QtVulkanSupport/private/qvkconvenience_p.h similarity index 100% rename from include/QtVulkanSupport/5.15.8/QtVulkanSupport/private/qvkconvenience_p.h rename to include/QtVulkanSupport/5.15.10/QtVulkanSupport/private/qvkconvenience_p.h diff --git a/include/QtVulkanSupport/qtvulkansupportversion.h b/include/QtVulkanSupport/qtvulkansupportversion.h index 3c8b825c..bad64844 100644 --- a/include/QtVulkanSupport/qtvulkansupportversion.h +++ b/include/QtVulkanSupport/qtvulkansupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTVULKANSUPPORT_VERSION_H #define QT_QTVULKANSUPPORT_VERSION_H -#define QTVULKANSUPPORT_VERSION_STR "5.15.8" +#define QTVULKANSUPPORT_VERSION_STR "5.15.10" -#define QTVULKANSUPPORT_VERSION 0x050F08 +#define QTVULKANSUPPORT_VERSION 0x050F0A #endif // QT_QTVULKANSUPPORT_VERSION_H diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/complexwidgets_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/complexwidgets_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/complexwidgets_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/complexwidgets_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/itemviews_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/itemviews_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/itemviews_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/itemviews_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qabstractbutton_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qabstractbutton_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qabstractbutton_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qabstractbutton_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qabstractitemdelegate_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qabstractitemdelegate_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qabstractitemdelegate_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qabstractitemdelegate_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qabstractitemview_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qabstractitemview_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qabstractitemview_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qabstractitemview_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qabstractscrollarea_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qabstractscrollarea_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qabstractscrollarea_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qabstractscrollarea_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qabstractslider_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qabstractslider_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qabstractslider_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qabstractslider_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qabstractspinbox_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qabstractspinbox_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qabstractspinbox_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qabstractspinbox_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qaccessiblemenu_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qaccessiblemenu_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qaccessiblemenu_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qaccessiblemenu_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qaccessiblewidgetfactory_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qaccessiblewidgetfactory_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qaccessiblewidgetfactory_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qaccessiblewidgetfactory_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qaccessiblewidgets_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qaccessiblewidgets_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qaccessiblewidgets_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qaccessiblewidgets_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qaction_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qaction_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qaction_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qaction_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qapplication_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qapplication_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qapplication_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qapplication_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qbasickeyeventtransition_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qbasickeyeventtransition_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qbasickeyeventtransition_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qbasickeyeventtransition_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qbasicmouseeventtransition_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qbasicmouseeventtransition_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qbasicmouseeventtransition_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qbasicmouseeventtransition_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qbsptree_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qbsptree_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qbsptree_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qbsptree_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qbuttongroup_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qbuttongroup_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qbuttongroup_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qbuttongroup_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qcolumnview_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qcolumnview_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qcolumnview_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qcolumnview_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qcolumnviewgrip_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qcolumnviewgrip_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qcolumnviewgrip_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qcolumnviewgrip_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qcombobox_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qcombobox_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qcombobox_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qcombobox_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qcommonstyle_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qcommonstyle_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qcommonstyle_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qcommonstyle_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qcommonstylepixmaps_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qcommonstylepixmaps_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qcommonstylepixmaps_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qcommonstylepixmaps_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qcompleter_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qcompleter_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qcompleter_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qcompleter_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qdatetimeedit_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qdatetimeedit_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qdatetimeedit_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qdatetimeedit_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qdesktopwidget_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qdesktopwidget_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qdesktopwidget_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qdesktopwidget_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qdialog_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qdialog_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qdialog_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qdialog_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qdockarealayout_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qdockarealayout_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qdockarealayout_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qdockarealayout_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qdockwidget_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qdockwidget_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qdockwidget_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qdockwidget_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qeffects_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qeffects_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qeffects_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qeffects_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qfiledialog_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qfiledialog_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qfiledialog_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qfiledialog_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qfileiconprovider_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qfileiconprovider_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qfileiconprovider_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qfileiconprovider_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qfileinfogatherer_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qfileinfogatherer_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qfileinfogatherer_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qfileinfogatherer_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qfilesystemmodel_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qfilesystemmodel_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qfilesystemmodel_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qfilesystemmodel_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qflickgesture_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qflickgesture_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qflickgesture_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qflickgesture_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qfontdialog_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qfontdialog_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qfontdialog_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qfontdialog_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qframe_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qframe_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qframe_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qframe_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qfscompleter_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qfscompleter_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qfscompleter_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qfscompleter_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qfusionstyle_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qfusionstyle_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qfusionstyle_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qfusionstyle_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qfusionstyle_p_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qfusionstyle_p_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qfusionstyle_p_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qfusionstyle_p_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgesture_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgesture_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgesture_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgesture_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgesturemanager_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgesturemanager_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgesturemanager_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgesturemanager_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraph_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraph_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraph_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraph_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsanchorlayout_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsanchorlayout_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsanchorlayout_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsanchorlayout_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicseffect_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicseffect_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicseffect_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicseffect_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsgridlayoutengine_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsgridlayoutengine_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsgridlayoutengine_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsgridlayoutengine_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsitem_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsitem_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsitem_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsitem_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicslayout_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicslayout_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicslayout_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicslayout_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicslayoutitem_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicslayoutitem_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicslayoutitem_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicslayoutitem_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicslayoutstyleinfo_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicslayoutstyleinfo_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicslayoutstyleinfo_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicslayoutstyleinfo_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsproxywidget_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsproxywidget_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsproxywidget_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsproxywidget_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsscene_bsp_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsscene_bsp_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsscene_bsp_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsscene_bsp_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsscene_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsscene_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsscene_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsscene_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsscenebsptreeindex_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsscenebsptreeindex_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsscenebsptreeindex_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsscenebsptreeindex_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicssceneindex_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicssceneindex_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicssceneindex_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicssceneindex_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsscenelinearindex_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsscenelinearindex_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsscenelinearindex_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsscenelinearindex_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicstransform_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicstransform_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicstransform_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicstransform_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsview_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsview_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicsview_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicsview_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qgraphicswidget_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qgraphicswidget_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qgraphicswidget_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qgraphicswidget_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qheaderview_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qheaderview_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qheaderview_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qheaderview_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qitemeditorfactory_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qitemeditorfactory_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qitemeditorfactory_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qitemeditorfactory_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qkeysequenceedit_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qkeysequenceedit_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qkeysequenceedit_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qkeysequenceedit_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qlabel_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qlabel_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qlabel_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qlabel_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qlayout_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qlayout_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qlayout_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qlayout_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qlayoutengine_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qlayoutengine_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qlayoutengine_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qlayoutengine_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qlineedit_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qlineedit_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qlineedit_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qlineedit_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qlistview_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qlistview_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qlistview_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qlistview_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qlistwidget_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qlistwidget_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qlistwidget_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qlistwidget_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qmacgesturerecognizer_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qmacgesturerecognizer_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qmacgesturerecognizer_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qmacgesturerecognizer_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qmainwindowlayout_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qmainwindowlayout_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qmainwindowlayout_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qmainwindowlayout_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qmdiarea_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qmdiarea_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qmdiarea_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qmdiarea_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qmdisubwindow_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qmdisubwindow_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qmdisubwindow_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qmdisubwindow_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qmenu_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qmenu_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qmenu_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qmenu_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qmenubar_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qmenubar_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qmenubar_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qmenubar_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qpixmapfilter_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qpixmapfilter_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qpixmapfilter_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qpixmapfilter_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qpixmapstyle_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qpixmapstyle_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qpixmapstyle_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qpixmapstyle_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qpixmapstyle_p_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qpixmapstyle_p_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qpixmapstyle_p_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qpixmapstyle_p_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qplaintextedit_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qplaintextedit_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qplaintextedit_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qplaintextedit_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qproxystyle_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qproxystyle_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qproxystyle_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qproxystyle_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qpushbutton_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qpushbutton_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qpushbutton_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qpushbutton_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qscrollarea_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qscrollarea_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qscrollarea_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qscrollarea_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qscrollbar_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qscrollbar_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qscrollbar_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qscrollbar_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qscroller_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qscroller_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qscroller_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qscroller_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qscrollerproperties_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qscrollerproperties_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qscrollerproperties_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qscrollerproperties_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qsidebar_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qsidebar_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qsidebar_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qsidebar_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qsimplex_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qsimplex_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qsimplex_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qsimplex_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qsplitter_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qsplitter_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qsplitter_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qsplitter_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qstandardgestures_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qstandardgestures_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qstandardgestures_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qstandardgestures_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qstyle_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qstyle_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qstyle_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qstyle_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qstyleanimation_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qstyleanimation_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qstyleanimation_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qstyleanimation_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qstylehelper_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qstylehelper_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qstylehelper_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qstylehelper_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qstylesheetstyle_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qstylesheetstyle_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qstylesheetstyle_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qstylesheetstyle_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qsystemtrayicon_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qsystemtrayicon_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qsystemtrayicon_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qsystemtrayicon_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qt_widgets_pch.h b/include/QtWidgets/5.15.10/QtWidgets/private/qt_widgets_pch.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qt_widgets_pch.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qt_widgets_pch.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtabbar_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtabbar_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtabbar_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtabbar_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtableview_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtableview_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtableview_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtableview_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtablewidget_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtablewidget_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtablewidget_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtablewidget_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtextedit_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtextedit_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtextedit_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtextedit_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtoolbar_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtoolbar_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtoolbar_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtoolbar_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtoolbararealayout_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtoolbararealayout_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtoolbararealayout_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtoolbararealayout_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtoolbarextension_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtoolbarextension_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtoolbarextension_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtoolbarextension_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtoolbarlayout_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtoolbarlayout_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtoolbarlayout_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtoolbarlayout_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtoolbarseparator_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtoolbarseparator_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtoolbarseparator_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtoolbarseparator_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtreeview_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtreeview_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtreeview_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtreeview_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtreewidget_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtreewidget_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtreewidget_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtreewidget_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtreewidgetitemiterator_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtreewidgetitemiterator_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtreewidgetitemiterator_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtreewidgetitemiterator_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qtwidgetsglobal_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qtwidgetsglobal_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qtwidgetsglobal_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qtwidgetsglobal_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qundostack_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qundostack_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qundostack_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qundostack_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidget_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidget_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidget_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidget_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidgetaction_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidgetaction_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidgetaction_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidgetaction_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidgetanimator_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidgetanimator_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidgetanimator_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidgetanimator_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidgetitemdata_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidgetitemdata_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidgetitemdata_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidgetitemdata_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidgetlinecontrol_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidgetlinecontrol_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidgetlinecontrol_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidgetlinecontrol_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidgetrepaintmanager_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidgetrepaintmanager_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidgetrepaintmanager_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidgetrepaintmanager_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidgetresizehandler_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidgetresizehandler_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidgetresizehandler_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidgetresizehandler_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidgettextcontrol_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidgettextcontrol_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidgettextcontrol_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidgettextcontrol_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidgettextcontrol_p_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidgettextcontrol_p_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidgettextcontrol_p_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidgettextcontrol_p_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwidgetwindow_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwidgetwindow_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwidgetwindow_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwidgetwindow_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwindowcontainer_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwindowcontainer_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwindowcontainer_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwindowcontainer_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwindowsstyle_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwindowsstyle_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwindowsstyle_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwindowsstyle_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwindowsstyle_p_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwindowsstyle_p_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwindowsstyle_p_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwindowsstyle_p_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/qwizard_win_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/qwizard_win_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/qwizard_win_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/qwizard_win_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/rangecontrols_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/rangecontrols_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/rangecontrols_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/rangecontrols_p.h diff --git a/include/QtWidgets/5.15.8/QtWidgets/private/simplewidgets_p.h b/include/QtWidgets/5.15.10/QtWidgets/private/simplewidgets_p.h similarity index 100% rename from include/QtWidgets/5.15.8/QtWidgets/private/simplewidgets_p.h rename to include/QtWidgets/5.15.10/QtWidgets/private/simplewidgets_p.h diff --git a/include/QtWidgets/qtwidgetsversion.h b/include/QtWidgets/qtwidgetsversion.h index 1c571c90..441ae00d 100644 --- a/include/QtWidgets/qtwidgetsversion.h +++ b/include/QtWidgets/qtwidgetsversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTWIDGETS_VERSION_H #define QT_QTWIDGETS_VERSION_H -#define QTWIDGETS_VERSION_STR "5.15.8" +#define QTWIDGETS_VERSION_STR "5.15.10" -#define QTWIDGETS_VERSION 0x050F08 +#define QTWIDGETS_VERSION 0x050F0A #endif // QT_QTWIDGETS_VERSION_H diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/qwindowsuiawrapper_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/qwindowsuiawrapper_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/qwindowsuiawrapper_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/qwindowsuiawrapper_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaattributeids_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaattributeids_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaattributeids_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaattributeids_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaclientinterfaces_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaclientinterfaces_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaclientinterfaces_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaclientinterfaces_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiacontroltypeids_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiacontroltypeids_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiacontroltypeids_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiacontroltypeids_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaerrorids_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaerrorids_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaerrorids_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaerrorids_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaeventids_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaeventids_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaeventids_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaeventids_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiageneralids_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiageneralids_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiageneralids_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiageneralids_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiapatternids_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiapatternids_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiapatternids_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiapatternids_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiapropertyids_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiapropertyids_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiapropertyids_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiapropertyids_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaserverinterfaces_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaserverinterfaces_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiaserverinterfaces_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiaserverinterfaces_p.h diff --git a/include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiatypes_p.h b/include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiatypes_p.h similarity index 100% rename from include/QtWindowsUIAutomationSupport/5.15.8/QtWindowsUIAutomationSupport/private/uiatypes_p.h rename to include/QtWindowsUIAutomationSupport/5.15.10/QtWindowsUIAutomationSupport/private/uiatypes_p.h diff --git a/include/QtWindowsUIAutomationSupport/qtwindowsuiautomationsupportversion.h b/include/QtWindowsUIAutomationSupport/qtwindowsuiautomationsupportversion.h index bb35bdae..438b0529 100644 --- a/include/QtWindowsUIAutomationSupport/qtwindowsuiautomationsupportversion.h +++ b/include/QtWindowsUIAutomationSupport/qtwindowsuiautomationsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTWINDOWSUIAUTOMATIONSUPPORT_VERSION_H #define QT_QTWINDOWSUIAUTOMATIONSUPPORT_VERSION_H -#define QTWINDOWSUIAUTOMATIONSUPPORT_VERSION_STR "5.15.8" +#define QTWINDOWSUIAUTOMATIONSUPPORT_VERSION_STR "5.15.10" -#define QTWINDOWSUIAUTOMATIONSUPPORT_VERSION 0x050F08 +#define QTWINDOWSUIAUTOMATIONSUPPORT_VERSION 0x050F0A #endif // QT_QTWINDOWSUIAUTOMATIONSUPPORT_VERSION_H diff --git a/include/QtXkbCommonSupport/5.15.8/QtXkbCommonSupport/private/qxkbcommon_p.h b/include/QtXkbCommonSupport/5.15.10/QtXkbCommonSupport/private/qxkbcommon_p.h similarity index 100% rename from include/QtXkbCommonSupport/5.15.8/QtXkbCommonSupport/private/qxkbcommon_p.h rename to include/QtXkbCommonSupport/5.15.10/QtXkbCommonSupport/private/qxkbcommon_p.h diff --git a/include/QtXkbCommonSupport/qtxkbcommonsupportversion.h b/include/QtXkbCommonSupport/qtxkbcommonsupportversion.h index ceaf91fd..a9004e8a 100644 --- a/include/QtXkbCommonSupport/qtxkbcommonsupportversion.h +++ b/include/QtXkbCommonSupport/qtxkbcommonsupportversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTXKBCOMMONSUPPORT_VERSION_H #define QT_QTXKBCOMMONSUPPORT_VERSION_H -#define QTXKBCOMMONSUPPORT_VERSION_STR "5.15.8" +#define QTXKBCOMMONSUPPORT_VERSION_STR "5.15.10" -#define QTXKBCOMMONSUPPORT_VERSION 0x050F08 +#define QTXKBCOMMONSUPPORT_VERSION 0x050F0A #endif // QT_QTXKBCOMMONSUPPORT_VERSION_H diff --git a/include/QtXml/5.15.8/QtXml/private/qdom_p.h b/include/QtXml/5.15.10/QtXml/private/qdom_p.h similarity index 100% rename from include/QtXml/5.15.8/QtXml/private/qdom_p.h rename to include/QtXml/5.15.10/QtXml/private/qdom_p.h diff --git a/include/QtXml/5.15.8/QtXml/private/qdomhelpers_p.h b/include/QtXml/5.15.10/QtXml/private/qdomhelpers_p.h similarity index 100% rename from include/QtXml/5.15.8/QtXml/private/qdomhelpers_p.h rename to include/QtXml/5.15.10/QtXml/private/qdomhelpers_p.h diff --git a/include/QtXml/5.15.8/QtXml/private/qxml_p.h b/include/QtXml/5.15.10/QtXml/private/qxml_p.h similarity index 100% rename from include/QtXml/5.15.8/QtXml/private/qxml_p.h rename to include/QtXml/5.15.10/QtXml/private/qxml_p.h diff --git a/include/QtXml/qtxmlversion.h b/include/QtXml/qtxmlversion.h index fc9bb88a..a431dac9 100644 --- a/include/QtXml/qtxmlversion.h +++ b/include/QtXml/qtxmlversion.h @@ -2,8 +2,8 @@ #ifndef QT_QTXML_VERSION_H #define QT_QTXML_VERSION_H -#define QTXML_VERSION_STR "5.15.8" +#define QTXML_VERSION_STR "5.15.10" -#define QTXML_VERSION 0x050F08 +#define QTXML_VERSION 0x050F0A #endif // QT_QTXML_VERSION_H diff --git a/mkspecs/common/clang.conf b/mkspecs/common/clang.conf index dad15a22..6eb08a9d 100644 --- a/mkspecs/common/clang.conf +++ b/mkspecs/common/clang.conf @@ -35,10 +35,12 @@ QMAKE_CXXFLAGS_CXX11 = -std=c++11 QMAKE_CXXFLAGS_CXX14 = -std=c++1y QMAKE_CXXFLAGS_CXX1Z = -std=c++1z QMAKE_CXXFLAGS_CXX2A = -std=c++2a +QMAKE_CXXFLAGS_CXX2B = -std=c++2b QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11 QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a +QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b QMAKE_LFLAGS_CXX11 = QMAKE_LFLAGS_CXX14 = diff --git a/mkspecs/common/g++-base.conf b/mkspecs/common/g++-base.conf index c3376963..d392879f 100644 --- a/mkspecs/common/g++-base.conf +++ b/mkspecs/common/g++-base.conf @@ -33,10 +33,12 @@ QMAKE_CXXFLAGS_CXX11 = -std=c++11 QMAKE_CXXFLAGS_CXX14 = -std=c++1y QMAKE_CXXFLAGS_CXX1Z = -std=c++1z QMAKE_CXXFLAGS_CXX2A = -std=c++2a +QMAKE_CXXFLAGS_CXX2B = -std=c++2b QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11 QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a +QMAKE_CXXFLAGS_GNUCXX2B = -std=gnu++2b QMAKE_LFLAGS_CXX11 = QMAKE_LFLAGS_CXX14 = QMAKE_LFLAGS_CXX1Z = diff --git a/mkspecs/common/ghs-base.conf b/mkspecs/common/ghs-base.conf index a6697157..3fd4cf70 100644 --- a/mkspecs/common/ghs-base.conf +++ b/mkspecs/common/ghs-base.conf @@ -8,7 +8,7 @@ QMAKE_COMPILER = ghs QMAKE_CFLAGS += --signed_fields --no_commons --diag_suppress=1,82,228,236,381,611,961,997,1795,1974 QMAKE_CFLAGS_DEPS += -MD -QMAKE_CFLAGS_RELEASE += -Ospeed -Olink -Omax +QMAKE_CFLAGS_RELEASE += -Ospeed -Olink -Omax -no_uvfd QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE -g QMAKE_CFLAGS_DEBUG += -g -Omaxdebug QMAKE_CFLAGS_SHLIB += @@ -29,12 +29,13 @@ QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB QMAKE_CXXFLAGS_APP += $$QMAKE_CFLAGS_APP QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS +QMAKE_CFLAGS_C99 = -std=c99 QMAKE_CXXFLAGS_CXX11 += --c++11 --thread_local_storage QMAKE_CXXFLAGS_EXCEPTIONS_ON += --exceptions QMAKE_LFLAGS += --signed_fields --no_commons --no_implicit_include --link_once_templates -non_shared --new_outside_of_constructor QMAKE_LFLAGS_DEBUG += -g -Omaxdebug -QMAKE_LFLAGS_RELEASE += -Ospeed -Olink -Omax +QMAKE_LFLAGS_RELEASE += -Ospeed -Olink -Omax -no_uvfd QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_LFLAGS_RELEASE -g QMAKE_LFLAGS_CXX11 += --c++11 --thread_local_storage QMAKE_LFLAGS_EXCEPTIONS_ON += --exceptions diff --git a/mkspecs/common/msvc-version.conf b/mkspecs/common/msvc-version.conf index 201c82b9..c8f7a077 100644 --- a/mkspecs/common/msvc-version.conf +++ b/mkspecs/common/msvc-version.conf @@ -118,6 +118,7 @@ greaterThan(QMAKE_MSC_VER, 1919) { # Visual Studio 2019 (16.0) / Visual C++ 19.20 and up MSVC_VER = 16.0 QMAKE_CXXFLAGS_CXX2A = -std:c++latest + QMAKE_CXXFLAGS_CXX2B = -std:c++latest } diff --git a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in index 2e231091..b465a7fa 100644 --- a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in +++ b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in @@ -87,7 +87,7 @@ string(CONCAT _plugin_genex # Add this plugin if all of the following are true: # 1) the list of explicitly included plugin types is empty # 2) the QT_PLUGIN_EXTENDS property for the plugin is empty or equal to one of the modules - # listed in the plugin's PLUGIN_EXTEND qmake variable + # listed in the plugin\'s PLUGIN_EXTEND qmake variable # 3) the user hasn\'t explicitly excluded the plugin. # TODO: Note that the current implementation of (2) is not entirely correct QTBUG-93501 \"$|/dev/null + seek=$(($address + $arch_offset)) + dd if="$target" bs=1 iseek=$seek count=$length 2>|/dev/null } read_32bit_value() { @@ -112,23 +114,23 @@ read_32bit_value() { read_binary $address 4 | xxd -p | dd conv=swab 2>/dev/null | rev } +otool_args= +otool() { + command otool $otool_args $* +} + +declare -a extra_classnames_files + inspect_binary() { inspect_mode="$1" - echo -n "🔎 Inspecting binary '$target', " - if [ ! -f "$target" ]; then - echo "target does not exist!" - exit 1 - fi - - read -a mach_header <<< "$(otool -h "$target" -v | tail -n 1)" - if [ "${mach_header[1]}" != "X86_64" ]; then - echo "binary is not 64-bit, only 64-bit binaries are supported!" - exit 1 - fi - classnames_section="__objc_classname" classnames=$(otool -v -s __TEXT $classnames_section "$target" | tail -n +3) + if [ -z "$classnames" ]; then + echo " ℹ️ No Objective-C classes found in binary" + return 1 + fi + while read -a classname; do address=$(sanitize_address ${classname[0]}) name=${classname[1]} @@ -138,21 +140,26 @@ inspect_binary() { done <<< "$classnames" extra_classnames_file="$(mktemp -t ${classnames_section}_additions).S" + extra_classnames_files+=("$extra_classnames_file") if [ "$inspect_mode" == "inject_classnames" ]; then - echo "class names have not been namespaced, adding suffix '$suffix'..." + echo " ℹ️ Class names have not been namespaced, adding suffix '$suffix'..." printf ".section __TEXT,$classnames_section,cstring_literals,no_dead_strip\n" > $extra_classnames_file elif [ "$inspect_mode" == "patch_classes" ]; then - echo "found namespaced class names, updating class entries..." + echo " ℹ️ Found namespaced class names, updating class entries..." + fi + + classes=$(otool -o -v "$target" | grep "OBJC_CLASS_RO\|OBJC_METACLASS_RO") + if [ -z "$classes" ]; then + echo " 💥 Failed to read class entries from binary" + exit 1 fi - classes=$(otool -o -v "$target" | grep class_ro_t) while read -a class; do address="$(sanitize_address ${class[1]})" - class_flags="0x$(read_32bit_value $address)" if [ -z "$class_flags" ]; then - echo " 💥 failed to read class flags for class at $address" + echo " 💥 Failed to read class flags for class at $address" continue fi @@ -161,13 +168,13 @@ inspect_binary() { name_offset=$(($address + 24)) classname_address="0x$(read_32bit_value $name_offset)" if [ -z "$classname_address" ]; then - echo " 💥 failed to read class name address for class at $address" + echo " 💥 Failed to read class name address for class at $address" continue fi classname=$(get_entry address_to_classname $classname_address) if [ -z "$classname" ]; then - echo " 💥 failed to resolve class name for address '$classname_address'" + echo " 💥 Failed to resolve class name for address '$classname_address'" continue fi @@ -177,7 +184,7 @@ inspect_binary() { else class_type="class" fi - echo " 🚽 skipping excluded $class_type '$classname'" + echo " 🚽 Skipping excluded $class_type '$classname'" continue fi @@ -188,13 +195,13 @@ inspect_binary() { continue fi - echo " 💉 injecting $classnames_section entry '$newclassname' for '$classname'" + echo " 💉 Injecting $classnames_section entry '$newclassname' for '$classname'" printf ".asciz \"$newclassname\"\n" >> $extra_classnames_file elif [ "$inspect_mode" == "patch_classes" ]; then newclassname_address=$(get_entry classname_to_address ${newclassname}) if [ -z "$newclassname_address" ]; then - echo " 💥 failed to resolve class name address for class '$newclassname'" + echo " 💥 Failed to resolve class name address for class '$newclassname'" continue fi @@ -204,7 +211,9 @@ inspect_binary() { class_type="class" fi - echo " 🔨 patching class_ro_t at $address ($class_type) from $classname_address ($classname) to $newclassname_address ($newclassname)" + name_offset=$(($name_offset + $arch_offset)) + + echo " 🔨 Patching class_ro_t at $address ($class_type) from $classname_address ($classname) to $newclassname_address ($newclassname)" echo ${newclassname_address: -8} | rev | dd conv=swab 2>/dev/null | xxd -p -r -seek $name_offset -l 4 - "$target" fi done <<< "$classes" @@ -213,10 +222,43 @@ inspect_binary() { echo "🔩 Linking binary using '$original_ld'..." link_binary -inspect_binary inject_classnames +echo "🔎 Inspecting binary '$target'..." +if [ ! -f "$target" ]; then + echo " 💥 Target does not exist!" + exit 1 +fi -echo "🔩 Re-linking binary with extra __objc_classname section..." -link_binary $extra_classnames_file +read -a mach_header <<< "$(otool -h "$target" -v | tail -n 1)" +if [ "${mach_header[0]}" != "MH_MAGIC_64" ]; then + echo " 💥 Binary is not 64-bit, only 64-bit binaries are supported!" + exit 1 +fi -inspect_binary patch_classes +architectures=$(otool -f -v $target | grep architecture) +setup_arch() { + arch="$1" + if [ ! -z "$arch" ]; then + otool_args="-arch $arch" + offset=$(otool -f -v $target | grep -A 6 "architecture $arch" | grep offset) + offset="${offset##*( )}" + arch_offset="$(echo $offset | cut -d ' ' -f 2)" + echo "🤖 Processing architecture '$arch' at offset $arch_offset..." + fi +} + +while read -a arch; do + setup_arch "${arch[1]}" + inspect_binary inject_classnames + if [ $? -ne 0 ]; then + exit + fi +done <<< "$architectures" + +echo "🔩 Re-linking binary with extra __objc_classname section(s)..." +link_binary "${extra_classnames_files[@]}" + +while read -a arch; do + setup_arch "${arch[1]}" + inspect_binary patch_classes +done <<< "$architectures" diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index 462dbf77..ac799047 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -122,17 +122,18 @@ breakpad { } c++17: CONFIG += c++1z -c++latest: CONFIG *= c++2a c++1z c++14 c++11 +c++latest: CONFIG *= c++2b c++2a c++1z c++14 c++11 -!c++11:!c++14:!c++1z:!c++2a { +!c++11:!c++14:!c++1z:!c++2a:!c++2b { # Qt requires C++11 since 5.7, check if we need to force a compiler option QT_COMPILER_STDCXX_no_L = $$replace(QT_COMPILER_STDCXX, "L$", "") !greaterThan(QT_COMPILER_STDCXX_no_L, 199711): CONFIG += c++11 } -c++11|c++14|c++1z|c++2a { +c++11|c++14|c++1z|c++2a|c++2b { # Disable special compiler flags for host builds !host_build|!cross_compile { - c++2a: cxxstd = CXX2A + c++2b: cxxstd = CXX2B + else: c++2a: cxxstd = CXX2A else: c++1z: cxxstd = CXX1Z else: c++14: cxxstd = CXX14 else: cxxstd = CXX11 diff --git a/mkspecs/features/mac/sdk.mk b/mkspecs/features/mac/sdk.mk index f30b5830..a32ceacb 100644 --- a/mkspecs/features/mac/sdk.mk +++ b/mkspecs/features/mac/sdk.mk @@ -1,6 +1,6 @@ ifeq ($(QT_MAC_SDK_NO_VERSION_CHECK),) - CHECK_SDK_COMMAND = /usr/bin/xcrun --sdk $(EXPORT_QMAKE_MAC_SDK) -show-sdk-version 2>&1 + CHECK_SDK_COMMAND = /usr/bin/xcrun --sdk $(EXPORT_QMAKE_MAC_SDK) -show-sdk-version 2>/dev/null CURRENT_MAC_SDK_VERSION := $(shell DEVELOPER_DIR=$(EXPORT_QMAKE_XCODE_DEVELOPER_PATH) $(CHECK_SDK_COMMAND)) ifneq ($(CURRENT_MAC_SDK_VERSION),$(EXPORT_QMAKE_MAC_SDK_VERSION)) # We don't want to complain about out of date SDK unless the target needs to be remade. diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf index 269ec11b..aed52752 100644 --- a/mkspecs/features/qt_common.prf +++ b/mkspecs/features/qt_common.prf @@ -18,6 +18,7 @@ qtConfig(c++11): CONFIG += c++11 strict_c++ qtConfig(c++14): CONFIG += c++14 qtConfig(c++1z): CONFIG += c++1z qtConfig(c++2a): CONFIG += c++2a +qtConfig(c++2b): CONFIG += c++2b qtConfig(c99): CONFIG += c99 qtConfig(c11): CONFIG += c11 qtConfig(separate_debug_info): CONFIG += separate_debug_info @@ -158,4 +159,3 @@ warnings_are_errors:warning_clean { } unset(ver) } - diff --git a/mkspecs/features/qt_targets.prf b/mkspecs/features/qt_targets.prf index 3810d1e0..be897db7 100644 --- a/mkspecs/features/qt_targets.prf +++ b/mkspecs/features/qt_targets.prf @@ -1,4 +1,4 @@ QMAKE_TARGET_COMPANY = The Qt Company Ltd. isEmpty(QMAKE_TARGET_PRODUCT): QMAKE_TARGET_PRODUCT = Qt5 isEmpty(QMAKE_TARGET_DESCRIPTION): QMAKE_TARGET_DESCRIPTION = C++ Application Development Framework -QMAKE_TARGET_COPYRIGHT = Copyright (C) 2020 The Qt Company Ltd. +QMAKE_TARGET_COPYRIGHT = Copyright (C) 2022 The Qt Company Ltd. diff --git a/mkspecs/features/uikit/devices.py b/mkspecs/features/uikit/devices.py index 8cdcb370..5f2bd5df 100755 --- a/mkspecs/features/uikit/devices.py +++ b/mkspecs/features/uikit/devices.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 ############################################################################# ## diff --git a/mkspecs/features/winrt/package_manifest.prf b/mkspecs/features/winrt/package_manifest.prf index 279971bd..2abe75f7 100644 --- a/mkspecs/features/winrt/package_manifest.prf +++ b/mkspecs/features/winrt/package_manifest.prf @@ -37,8 +37,7 @@ else: \ VCLIBS = $${VCLIBS} # VS 2017 and 2019 still use vclibs 140 - contains(MSVC_VER, "15.0"): VCLIBS = $$replace(VCLIBS, 150, 140) - contains(MSVC_VER, "16.0"): VCLIBS = $$replace(VCLIBS, 160, 140) + contains(MSVC_VER, "1[56]\.[0-9]"): VCLIBS = $$replace(VCLIBS, 1[56][0-9], 140) VCLIBS = "$${VCLIBS}\" MinVersion=\"14.0.0.0\" Publisher=\"CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" WINRT_MANIFEST.dependencies += $$VCLIBS } diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix index 646f5f84..d282d7ed 100644 --- a/qmake/Makefile.unix +++ b/qmake/Makefile.unix @@ -274,7 +274,7 @@ qlibraryinfo.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp $(CXX) -c -o $@ $(CXXFLAGS) -DQT_BUILD_QMAKE_BOOTSTRAP $< qlibraryinfo_final.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp $(BUILD_PATH)/src/corelib/global/qconfig.cpp - $(CXX) -c -o $@ $(CXXFLAGS) $< + $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp qnumeric.o: $(SOURCE_PATH)/src/corelib/global/qnumeric.cpp $(CXX) -c -o $@ $(CXXFLAGS) $< diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc index f86eb049..2b58df07 100644 --- a/qmake/doc/src/qmake-manual.qdoc +++ b/qmake/doc/src/qmake-manual.qdoc @@ -1217,6 +1217,9 @@ \row \li c++2a \li C++2a support is enabled. This option has no effect if the compiler does not support C++2a, or can't select the C++ standard. By default, support is disabled. + \row \li c++2b \li c++2b support is enabled. This option has no effect if + the compiler does not support c++2b, or can't select the C++ standard. + By default, support is disabled. \row \li c++latest \li Support for the latest C++ language standard is enabled that is supported by the compiler. By default, this option is disabled. diff --git a/qmake/library/qmakeparser.cpp b/qmake/library/qmakeparser.cpp index ffe90ebd..3aa3a3c9 100644 --- a/qmake/library/qmakeparser.cpp +++ b/qmake/library/qmakeparser.cpp @@ -1549,7 +1549,8 @@ static bool getBlock(const ushort *tokens, int limit, int &offset, QString *outS ok = getSubBlock(tokens, limit, offset, outStr, indent, "block"); break; default: - Q_ASSERT(!"unhandled token"); + // unhandled token + Q_UNREACHABLE(); } } if (!ok) diff --git a/src/3rdparty/angle/patches/0001-ANGLE-Load-the-DirectX-libraries-from-the-system.patch b/src/3rdparty/angle/patches/0001-ANGLE-Load-the-DirectX-libraries-from-the-system.patch new file mode 100644 index 00000000..fea52c78 --- /dev/null +++ b/src/3rdparty/angle/patches/0001-ANGLE-Load-the-DirectX-libraries-from-the-system.patch @@ -0,0 +1,77 @@ +From a5b015834168dee1ba91603bb82ccab3a50b445c Mon Sep 17 00:00:00 2001 +From: Andy Shaw +Date: Fri, 18 Feb 2022 14:47:55 +0100 +Subject: [PATCH] ANGLE: Load the DirectX libraries from the system path + directly + +Change-Id: I34812b32e420a6f50e5be6b26b97c8e21e0e7870 +--- + .../renderer/d3d/d3d11/DebugAnnotator11.cpp | 8 +++++++- + .../libANGLE/renderer/d3d/d3d11/Renderer11.cpp | 18 +++++++++++++++--- + 2 files changed, 22 insertions(+), 4 deletions(-) + +diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp +index 1e70363e11..8100acf56c 100644 +--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp ++++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp +@@ -11,6 +11,8 @@ + #include "common/debug.h" + #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" + ++#define INFO_BUFFER_SIZE 32767 ++ + namespace rx + { + +@@ -88,7 +90,11 @@ void DebugAnnotator11::initializeDevice() + if (!mInitialized) + { + #if !defined(ANGLE_ENABLE_WINDOWS_STORE) +- mD3d11Module = LoadLibrary(TEXT("d3d11.dll")); ++ TCHAR infoBuf[INFO_BUFFER_SIZE]; ++ DWORD bufCharCount = INFO_BUFFER_SIZE; ++ GetSystemDirectory(infoBuf, INFO_BUFFER_SIZE); ++ lstrcat(infoBuf, TEXT("\\d3d11.dll")); ++ mD3d11Module = LoadLibrary(infoBuf); + ASSERT(mD3d11Module); + + PFN_D3D11_CREATE_DEVICE D3D11CreateDevice = (PFN_D3D11_CREATE_DEVICE)GetProcAddress(mD3d11Module, "D3D11CreateDevice"); +diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp +index b0ef9abddc..c9aeace241 100644 +--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp ++++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp +@@ -80,6 +80,8 @@ + #define ANGLE_SKIP_DXGI_1_2_CHECK 0 + #endif + ++#define INFO_BUFFER_SIZE 32767 ++ + namespace rx + { + +@@ -772,9 +774,19 @@ egl::Error Renderer11::initializeD3DDevice() + { + SCOPED_ANGLE_HISTOGRAM_TIMER("GPU.ANGLE.Renderer11InitializeDLLsMS"); + TRACE_EVENT0("gpu.angle", "Renderer11::initialize (Load DLLs)"); +- mDxgiModule = LoadLibrary(TEXT("dxgi.dll")); +- mD3d11Module = LoadLibrary(TEXT("d3d11.dll")); +- mDCompModule = LoadLibrary(TEXT("dcomp.dll")); ++ TCHAR dxgiFile[INFO_BUFFER_SIZE]; ++ TCHAR d3d11File[INFO_BUFFER_SIZE]; ++ TCHAR dcompFile[INFO_BUFFER_SIZE]; ++ DWORD bufCharCount = INFO_BUFFER_SIZE; ++ GetSystemDirectory(dxgiFile, INFO_BUFFER_SIZE); ++ lstrcpy(d3d11File, dxgiFile); ++ lstrcpy(dcompFile, dxgiFile); ++ lstrcat(dxgiFile, TEXT("\\dxgi.dll")); ++ mDxgiModule = LoadLibrary(dxgiFile); ++ lstrcat(d3d11File, TEXT("\\d3d11.dll")); ++ mD3d11Module = LoadLibrary(d3d11File); ++ lstrcat(dcompFile, TEXT("\\dcomp.dll")); ++ mDCompModule = LoadLibrary(dcompFile); + + if (mD3d11Module == nullptr || mDxgiModule == nullptr) + { +-- +2.27.0.windows.1 + diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp index 1e70363e..8100acf5 100644 --- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp +++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp @@ -11,6 +11,8 @@ #include "common/debug.h" #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" +#define INFO_BUFFER_SIZE 32767 + namespace rx { @@ -88,7 +90,11 @@ void DebugAnnotator11::initializeDevice() if (!mInitialized) { #if !defined(ANGLE_ENABLE_WINDOWS_STORE) - mD3d11Module = LoadLibrary(TEXT("d3d11.dll")); + TCHAR infoBuf[INFO_BUFFER_SIZE]; + DWORD bufCharCount = INFO_BUFFER_SIZE; + GetSystemDirectory(infoBuf, INFO_BUFFER_SIZE); + lstrcat(infoBuf, TEXT("\\d3d11.dll")); + mD3d11Module = LoadLibrary(infoBuf); ASSERT(mD3d11Module); PFN_D3D11_CREATE_DEVICE D3D11CreateDevice = (PFN_D3D11_CREATE_DEVICE)GetProcAddress(mD3d11Module, "D3D11CreateDevice"); diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp index b0ef9abd..90a85f44 100644 --- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp +++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp @@ -80,6 +80,8 @@ #define ANGLE_SKIP_DXGI_1_2_CHECK 0 #endif +#define INFO_BUFFER_SIZE 32767 + namespace rx { @@ -772,9 +774,19 @@ egl::Error Renderer11::initializeD3DDevice() { SCOPED_ANGLE_HISTOGRAM_TIMER("GPU.ANGLE.Renderer11InitializeDLLsMS"); TRACE_EVENT0("gpu.angle", "Renderer11::initialize (Load DLLs)"); - mDxgiModule = LoadLibrary(TEXT("dxgi.dll")); - mD3d11Module = LoadLibrary(TEXT("d3d11.dll")); - mDCompModule = LoadLibrary(TEXT("dcomp.dll")); + TCHAR dxgiFile[INFO_BUFFER_SIZE]; + TCHAR d3d11File[INFO_BUFFER_SIZE]; + TCHAR dcompFile[INFO_BUFFER_SIZE]; + DWORD bufCharCount = INFO_BUFFER_SIZE; + GetSystemDirectory(dxgiFile, INFO_BUFFER_SIZE); + lstrcpy(d3d11File, dxgiFile); + lstrcpy(dcompFile, dxgiFile); + lstrcat(dxgiFile, TEXT("\\dxgi.dll")); + mDxgiModule = LoadLibrary(dxgiFile); + lstrcat(d3d11File, TEXT("\\d3d11.dll")); + mD3d11Module = LoadLibrary(d3d11File); + lstrcat(dcompFile, TEXT("\\dcomp.dll")); + mDCompModule = LoadLibrary(dcompFile); if (mD3d11Module == nullptr || mDxgiModule == nullptr) { diff --git a/src/3rdparty/libjpeg/LICENSE b/src/3rdparty/libjpeg/LICENSE index a1cdad52..d753e1d7 100644 --- a/src/3rdparty/libjpeg/LICENSE +++ b/src/3rdparty/libjpeg/LICENSE @@ -91,7 +91,7 @@ best of our understanding. The Modified (3-clause) BSD License =================================== -Copyright (C)2009-2021 D. R. Commander. All Rights Reserved.
+Copyright (C)2009-2022 D. R. Commander. All Rights Reserved.
Copyright (C)2015 Viktor Szathmáry. All Rights Reserved. Redistribution and use in source and binary forms, with or without diff --git a/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh b/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh index 2153eca3..4184cc27 100755 --- a/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh +++ b/src/3rdparty/libjpeg/import_from_libjpeg_tarball.sh @@ -158,11 +158,22 @@ FILES=" jsimddct.h jstdhuff.c jutils.c - jversion.h " for i in $FILES; do copy_file "$i" "src/$i" done +copy_file "jversion.h.in" "src/jversion.h" + +cyear=$(grep COPYRIGHT_YEAR $LIBJPEG_DIR/CMakeLists.txt | sed -e 's/.*"\(.*\)".*/\1/') +sed -i -e "s/@COPYRIGHT_YEAR@/$cyear/" $TARGET_DIR/src/jversion.h + +sed -n -e 's/^[ ]*"// + s/\(\\n\)*"[ ]*\\*$// + /JCOPYRIGHT\ /,/^[ ]*$/ { + /Copyright/p + } + ' $TARGET_DIR/src/jversion.h > $TARGET_DIR/COPYRIGHT.txt + echo Done. $TARGET_DIR/src/jconfig.h and jconfigint.h may need manual updating. diff --git a/src/3rdparty/libjpeg/qt_attribution.json b/src/3rdparty/libjpeg/qt_attribution.json index b68563cb..4cb6f277 100644 --- a/src/3rdparty/libjpeg/qt_attribution.json +++ b/src/3rdparty/libjpeg/qt_attribution.json @@ -6,12 +6,12 @@ "Description": "The Independent JPEG Group's JPEG software", "Homepage": "http://libjpeg-turbo.virtualgl.org/", - "Version": "2.1.1", + "Version": "2.1.3", "License": "Independent JPEG Group License and BSD 3-Clause \"New\" or \"Revised\" License and zlib License", "LicenseId": "IJG AND BSD-3-Clause AND Zlib", "LicenseFiles": [ "LICENSE", "ijg-license.txt", "zlib-license.txt"], - "Copyright": "Copyright (C) 2009-2021 D. R. Commander -Copyright (C) 2015, 2020 Google, Inc. + "Copyright": "Copyright (C) 2009-2022 D. R. Commander +Copyright (C) 2015, 2022 Google, Inc. Copyright (C) 2019 Arm Limited Copyright (C) 2015-2016, 2018 Matthieu Darbois Copyright (C) 2011-2016 Siarhei Siamashka diff --git a/src/3rdparty/libjpeg/src/ChangeLog.md b/src/3rdparty/libjpeg/src/ChangeLog.md index 1fcb065a..e6700c3c 100644 --- a/src/3rdparty/libjpeg/src/ChangeLog.md +++ b/src/3rdparty/libjpeg/src/ChangeLog.md @@ -1,3 +1,59 @@ +2.1.3 +===== + +### Significant changes relative to 2.1.2 + +1. Fixed a regression introduced by 2.0 beta1[7] whereby cjpeg compressed PGM +input files into full-color JPEG images unless the `-grayscale` option was +used. + +2. cjpeg now automatically compresses GIF and 8-bit BMP input files into +grayscale JPEG images if the input files contain only shades of gray. + +3. The build system now enables the intrinsics implementation of the AArch64 +(Arm 64-bit) Neon SIMD extensions by default when using GCC 12 or later. + +4. Fixed a segfault that occurred while decompressing a 4:2:0 JPEG image using +the merged (non-fancy) upsampling algorithms (that is, with +`cinfo.do_fancy_upsampling` set to `FALSE`) along with `jpeg_crop_scanline()`. +Specifically, the segfault occurred if the number of bytes remaining in the +output buffer was less than the number of bytes required to represent one +uncropped scanline of the output image. For that reason, the issue could only +be reproduced using the libjpeg API, not using djpeg. + + +2.1.2 +===== + +### Significant changes relative to 2.1.1 + +1. Fixed a regression introduced by 2.1 beta1[13] that caused the remaining +GAS implementations of AArch64 (Arm 64-bit) Neon SIMD functions (which are used +by default with GCC for performance reasons) to be placed in the `.rodata` +section rather than in the `.text` section. This caused the GNU linker to +automatically place the `.rodata` section in an executable segment, which +prevented libjpeg-turbo from working properly with other linkers and also +represented a potential security risk. + +2. Fixed an issue whereby the `tjTransform()` function incorrectly computed the +MCU block size for 4:4:4 JPEG images with non-unary sampling factors and thus +unduly rejected some cropping regions, even though those regions aligned with +8x8 MCU block boundaries. + +3. Fixed a regression introduced by 2.1 beta1[13] that caused the build system +to enable the Arm Neon SIMD extensions when targetting Armv6 and other legacy +architectures that do not support Neon instructions. + +4. libjpeg-turbo now performs run-time detection of AltiVec instructions on +FreeBSD/PowerPC systems if AltiVec instructions are not enabled at compile +time. This allows both AltiVec-equipped and non-AltiVec-equipped CPUs to be +supported using the same build of libjpeg-turbo. + +5. cjpeg now accepts a `-strict` argument similar to that of djpeg and +jpegtran, which causes the compressor to abort if an LZW-compressed GIF input +image contains incomplete or corrupt image data. + + 2.1.1 ===== @@ -22,9 +78,9 @@ metadata. 5. libjpeg-turbo should now build and run on CHERI-enabled architectures, which use capability pointers that are larger than the size of `size_t`. -6. Fixed a regression introduced by 2.1 beta1[5] that caused a segfault in the -64-bit SSE2 Huffman encoder when attempting to losslessly transform a -specially-crafted malformed JPEG image. +6. Fixed a regression (CVE-2021-37972) introduced by 2.1 beta1[5] that caused a +segfault in the 64-bit SSE2 Huffman encoder when attempting to losslessly +transform a specially-crafted malformed JPEG image. 2.1.0 @@ -609,7 +665,7 @@ algorithm that caused incorrect dithering in the output image. This algorithm now produces bitwise-identical results to the unmerged algorithms. 12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64] (if -libjpeg-turbo is built with YASM), and iOS/Arm[64] builds are now private. +libjpeg-turbo is built with Yasm), and iOS/Arm[64] builds are now private. This prevents those symbols from being exposed in applications or shared libraries that link statically with libjpeg-turbo. @@ -1494,8 +1550,8 @@ either the fast or the accurate DCT/IDCT algorithms in the underlying codec. ### Significant changes relative to 1.2 beta1: -1. Fixed build issue with YASM on Unix systems (the libjpeg-turbo build system -was not adding the current directory to the assembler include path, so YASM +1. Fixed build issue with Yasm on Unix systems (the libjpeg-turbo build system +was not adding the current directory to the assembler include path, so Yasm was not able to find jsimdcfg.inc.) 2. Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing @@ -1563,7 +1619,7 @@ transposed or rotated 90 degrees. 8. All legacy VirtualGL code has been re-factored, and this has allowed libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license. -9. libjpeg-turbo can now be built with YASM. +9. libjpeg-turbo can now be built with Yasm. 10. Added SIMD acceleration for ARM Linux and iOS platforms that support NEON instructions. diff --git a/src/3rdparty/libjpeg/src/jcapimin.c b/src/3rdparty/libjpeg/src/jcapimin.c index 178c55ba..84e7ecc9 100644 --- a/src/3rdparty/libjpeg/src/jcapimin.c +++ b/src/3rdparty/libjpeg/src/jcapimin.c @@ -4,8 +4,8 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1994-1998, Thomas G. Lane. * Modified 2003-2010 by Guido Vollbeding. - * It was modified by The libjpeg-turbo Project to include only code relevant - * to libjpeg-turbo. + * libjpeg-turbo Modifications: + * Copyright (C) 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -52,7 +52,7 @@ jpeg_CreateCompress(j_compress_ptr cinfo, int version, size_t structsize) { struct jpeg_error_mgr *err = cinfo->err; void *client_data = cinfo->client_data; /* ignore Purify complaint here */ - MEMZERO(cinfo, sizeof(struct jpeg_compress_struct)); + memset(cinfo, 0, sizeof(struct jpeg_compress_struct)); cinfo->err = err; cinfo->client_data = client_data; } diff --git a/src/3rdparty/libjpeg/src/jcarith.c b/src/3rdparty/libjpeg/src/jcarith.c index b6d093f7..b1720521 100644 --- a/src/3rdparty/libjpeg/src/jcarith.c +++ b/src/3rdparty/libjpeg/src/jcarith.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Developed 1997-2009 by Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2015, 2018, D. R. Commander. + * Copyright (C) 2015, 2018, 2021-2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -338,14 +338,14 @@ emit_restart(j_compress_ptr cinfo, int restart_num) compptr = cinfo->cur_comp_info[ci]; /* DC needs no table for refinement scan */ if (cinfo->progressive_mode == 0 || (cinfo->Ss == 0 && cinfo->Ah == 0)) { - MEMZERO(entropy->dc_stats[compptr->dc_tbl_no], DC_STAT_BINS); + memset(entropy->dc_stats[compptr->dc_tbl_no], 0, DC_STAT_BINS); /* Reset DC predictions to 0 */ entropy->last_dc_val[ci] = 0; entropy->dc_context[ci] = 0; } /* AC needs no table when not present */ if (cinfo->progressive_mode == 0 || cinfo->Se) { - MEMZERO(entropy->ac_stats[compptr->ac_tbl_no], AC_STAT_BINS); + memset(entropy->ac_stats[compptr->ac_tbl_no], 0, AC_STAT_BINS); } } @@ -836,7 +836,7 @@ start_pass(j_compress_ptr cinfo, boolean gather_statistics) * We are fully adaptive here and need no extra * statistics gathering pass! */ - ERREXIT(cinfo, JERR_NOT_COMPILED); + ERREXIT(cinfo, JERR_NOTIMPL); /* We assume jcmaster.c already validated the progressive scan parameters. */ @@ -867,7 +867,7 @@ start_pass(j_compress_ptr cinfo, boolean gather_statistics) if (entropy->dc_stats[tbl] == NULL) entropy->dc_stats[tbl] = (unsigned char *)(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, DC_STAT_BINS); - MEMZERO(entropy->dc_stats[tbl], DC_STAT_BINS); + memset(entropy->dc_stats[tbl], 0, DC_STAT_BINS); /* Initialize DC predictions to 0 */ entropy->last_dc_val[ci] = 0; entropy->dc_context[ci] = 0; @@ -880,7 +880,7 @@ start_pass(j_compress_ptr cinfo, boolean gather_statistics) if (entropy->ac_stats[tbl] == NULL) entropy->ac_stats[tbl] = (unsigned char *)(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, AC_STAT_BINS); - MEMZERO(entropy->ac_stats[tbl], AC_STAT_BINS); + memset(entropy->ac_stats[tbl], 0, AC_STAT_BINS); #ifdef CALCULATE_SPECTRAL_CONDITIONING if (cinfo->progressive_mode) /* Section G.1.3.2: Set appropriate arithmetic conditioning value Kx */ diff --git a/src/3rdparty/libjpeg/src/jchuff.c b/src/3rdparty/libjpeg/src/jchuff.c index 8ff817b1..f4dfa1cb 100644 --- a/src/3rdparty/libjpeg/src/jchuff.c +++ b/src/3rdparty/libjpeg/src/jchuff.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-1997, Thomas G. Lane. * libjpeg-turbo Modifications: - * Copyright (C) 2009-2011, 2014-2016, 2018-2021, D. R. Commander. + * Copyright (C) 2009-2011, 2014-2016, 2018-2022, D. R. Commander. * Copyright (C) 2015, Matthieu Darbois. * Copyright (C) 2018, Matthias Räncker. * Copyright (C) 2020, Arm Limited. @@ -200,12 +200,12 @@ start_pass_huff(j_compress_ptr cinfo, boolean gather_statistics) entropy->dc_count_ptrs[dctbl] = (long *) (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, 257 * sizeof(long)); - MEMZERO(entropy->dc_count_ptrs[dctbl], 257 * sizeof(long)); + memset(entropy->dc_count_ptrs[dctbl], 0, 257 * sizeof(long)); if (entropy->ac_count_ptrs[actbl] == NULL) entropy->ac_count_ptrs[actbl] = (long *) (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, 257 * sizeof(long)); - MEMZERO(entropy->ac_count_ptrs[actbl], 257 * sizeof(long)); + memset(entropy->ac_count_ptrs[actbl], 0, 257 * sizeof(long)); #endif } else { /* Compute derived values for Huffman tables */ @@ -315,8 +315,8 @@ jpeg_make_c_derived_tbl(j_compress_ptr cinfo, boolean isDC, int tblno, * this lets us detect duplicate VAL entries here, and later * allows emit_bits to detect any attempt to emit such symbols. */ - MEMZERO(dtbl->ehufco, sizeof(dtbl->ehufco)); - MEMZERO(dtbl->ehufsi, sizeof(dtbl->ehufsi)); + memset(dtbl->ehufco, 0, sizeof(dtbl->ehufco)); + memset(dtbl->ehufsi, 0, sizeof(dtbl->ehufsi)); /* This is also a convenient place to check for out-of-range * and duplicated VAL entries. We allow 0..255 for AC symbols @@ -478,7 +478,7 @@ dump_buffer(working_state *state) buffer = _buffer; \ while (bytes > 0) { \ bytestocopy = MIN(bytes, state->free_in_buffer); \ - MEMCOPY(state->next_output_byte, buffer, bytestocopy); \ + memcpy(state->next_output_byte, buffer, bytestocopy); \ state->next_output_byte += bytestocopy; \ buffer += bytestocopy; \ state->free_in_buffer -= bytestocopy; \ @@ -941,8 +941,8 @@ jpeg_gen_optimal_table(j_compress_ptr cinfo, JHUFF_TBL *htbl, long freq[]) /* This algorithm is explained in section K.2 of the JPEG standard */ - MEMZERO(bits, sizeof(bits)); - MEMZERO(codesize, sizeof(codesize)); + memset(bits, 0, sizeof(bits)); + memset(codesize, 0, sizeof(codesize)); for (i = 0; i < 257; i++) others[i] = -1; /* init links to empty */ @@ -1044,7 +1044,7 @@ jpeg_gen_optimal_table(j_compress_ptr cinfo, JHUFF_TBL *htbl, long freq[]) bits[i]--; /* Return final symbol counts (only for lengths 0..16) */ - MEMCOPY(htbl->bits, bits, sizeof(htbl->bits)); + memcpy(htbl->bits, bits, sizeof(htbl->bits)); /* Return a list of the symbols sorted by code length */ /* It's not real clear to me why we don't need to consider the codelength @@ -1083,8 +1083,8 @@ finish_pass_gather(j_compress_ptr cinfo) /* It's important not to apply jpeg_gen_optimal_table more than once * per table, because it clobbers the input frequency counts! */ - MEMZERO(did_dc, sizeof(did_dc)); - MEMZERO(did_ac, sizeof(did_ac)); + memset(did_dc, 0, sizeof(did_dc)); + memset(did_ac, 0, sizeof(did_ac)); for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; diff --git a/src/3rdparty/libjpeg/src/jconfig.h b/src/3rdparty/libjpeg/src/jconfig.h index 17b9137e..7982724a 100644 --- a/src/3rdparty/libjpeg/src/jconfig.h +++ b/src/3rdparty/libjpeg/src/jconfig.h @@ -2,9 +2,9 @@ #define JPEG_LIB_VERSION 80 -#define LIBJPEG_TURBO_VERSION 2.1.1 +#define LIBJPEG_TURBO_VERSION 2.1.3 -#define LIBJPEG_TURBO_VERSION_NUMBER 2001001 +#define LIBJPEG_TURBO_VERSION_NUMBER 2001003 #define C_ARITH_CODING_SUPPORTED 1 @@ -14,10 +14,4 @@ #define BITS_IN_JSAMPLE 8 -#define HAVE_STDDEF_H 1 - -#define HAVE_STDLIB_H 1 - -#define HAVE_UNSIGNED_CHAR 1 - -#define HAVE_UNSIGNED_SHORT 1 +#define NO_PUTENV diff --git a/src/3rdparty/libjpeg/src/jconfig.h.in b/src/3rdparty/libjpeg/src/jconfig.h.in index d4284d97..e0180122 100644 --- a/src/3rdparty/libjpeg/src/jconfig.h.in +++ b/src/3rdparty/libjpeg/src/jconfig.h.in @@ -32,37 +32,6 @@ #define BITS_IN_JSAMPLE @BITS_IN_JSAMPLE@ /* use 8 or 12 */ -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_LOCALE_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STDDEF_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STDLIB_H 1 - -/* Define if you need to include to get size_t. */ -#cmakedefine NEED_SYS_TYPES_H 1 - -/* Define if you have BSD-like bzero and bcopy in rather than - memset/memcpy in . */ -#cmakedefine NEED_BSD_STRINGS 1 - -/* Define to 1 if the system has the type `unsigned char'. */ -#cmakedefine HAVE_UNSIGNED_CHAR 1 - -/* Define to 1 if the system has the type `unsigned short'. */ -#cmakedefine HAVE_UNSIGNED_SHORT 1 - -/* Compiler does not support pointers to undefined structures. */ -#cmakedefine INCOMPLETE_TYPES_BROKEN 1 - /* Define if your (broken) compiler shifts signed values as if they were unsigned. */ #cmakedefine RIGHT_SHIFT_IS_UNSIGNED 1 - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `unsigned int' if does not define. */ -/* #undef size_t */ diff --git a/src/3rdparty/libjpeg/src/jcphuff.c b/src/3rdparty/libjpeg/src/jcphuff.c index 11019871..872e570b 100644 --- a/src/3rdparty/libjpeg/src/jcphuff.c +++ b/src/3rdparty/libjpeg/src/jcphuff.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1995-1997, Thomas G. Lane. * libjpeg-turbo Modifications: - * Copyright (C) 2011, 2015, 2018, 2021, D. R. Commander. + * Copyright (C) 2011, 2015, 2018, 2021-2022, D. R. Commander. * Copyright (C) 2016, 2018, Matthieu Darbois. * Copyright (C) 2020, Arm Limited. * Copyright (C) 2021, Alex Richardson. @@ -275,7 +275,7 @@ start_pass_phuff(j_compress_ptr cinfo, boolean gather_statistics) entropy->count_ptrs[tbl] = (long *) (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, 257 * sizeof(long)); - MEMZERO(entropy->count_ptrs[tbl], 257 * sizeof(long)); + memset(entropy->count_ptrs[tbl], 0, 257 * sizeof(long)); } else { /* Compute derived values for Huffman table */ /* We may do this more than once for a table, but it's not expensive */ @@ -584,8 +584,8 @@ encode_mcu_DC_first(j_compress_ptr cinfo, JBLOCKROW *MCU_data) continue; \ /* For a negative coef, want temp2 = bitwise complement of abs(coef) */ \ temp2 ^= temp; \ - values[k] = temp; \ - values[k + DCTSIZE2] = temp2; \ + values[k] = (JCOEF)temp; \ + values[k + DCTSIZE2] = (JCOEF)temp2; \ zerobits |= ((size_t)1U) << k; \ } \ } @@ -1062,7 +1062,7 @@ finish_pass_gather_phuff(j_compress_ptr cinfo) /* It's important not to apply jpeg_gen_optimal_table more than once * per table, because it clobbers the input frequency counts! */ - MEMZERO(did, sizeof(did)); + memset(did, 0, sizeof(did)); for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; diff --git a/src/3rdparty/libjpeg/src/jcprepct.c b/src/3rdparty/libjpeg/src/jcprepct.c index d59713ae..f27cc345 100644 --- a/src/3rdparty/libjpeg/src/jcprepct.c +++ b/src/3rdparty/libjpeg/src/jcprepct.c @@ -3,8 +3,8 @@ * * This file is part of the Independent JPEG Group's software: * Copyright (C) 1994-1996, Thomas G. Lane. - * It was modified by The libjpeg-turbo Project to include only code relevant - * to libjpeg-turbo. + * libjpeg-turbo Modifications: + * Copyright (C) 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -289,8 +289,8 @@ create_context_buffer(j_compress_ptr cinfo) cinfo->max_h_samp_factor) / compptr->h_samp_factor), (JDIMENSION)(3 * rgroup_height)); /* Copy true buffer row pointers into the middle of the fake row array */ - MEMCOPY(fake_buffer + rgroup_height, true_buffer, - 3 * rgroup_height * sizeof(JSAMPROW)); + memcpy(fake_buffer + rgroup_height, true_buffer, + 3 * rgroup_height * sizeof(JSAMPROW)); /* Fill in the above and below wraparound pointers */ for (i = 0; i < rgroup_height; i++) { fake_buffer[i] = true_buffer[2 * rgroup_height + i]; diff --git a/src/3rdparty/libjpeg/src/jctrans.c b/src/3rdparty/libjpeg/src/jctrans.c index ab6a2186..e121028e 100644 --- a/src/3rdparty/libjpeg/src/jctrans.c +++ b/src/3rdparty/libjpeg/src/jctrans.c @@ -5,7 +5,7 @@ * Copyright (C) 1995-1998, Thomas G. Lane. * Modified 2000-2009 by Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2020, D. R. Commander. + * Copyright (C) 2020, 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -100,8 +100,8 @@ jpeg_copy_critical_parameters(j_decompress_ptr srcinfo, j_compress_ptr dstinfo) qtblptr = &dstinfo->quant_tbl_ptrs[tblno]; if (*qtblptr == NULL) *qtblptr = jpeg_alloc_quant_table((j_common_ptr)dstinfo); - MEMCOPY((*qtblptr)->quantval, srcinfo->quant_tbl_ptrs[tblno]->quantval, - sizeof((*qtblptr)->quantval)); + memcpy((*qtblptr)->quantval, srcinfo->quant_tbl_ptrs[tblno]->quantval, + sizeof((*qtblptr)->quantval)); (*qtblptr)->sent_table = FALSE; } } diff --git a/src/3rdparty/libjpeg/src/jdapimin.c b/src/3rdparty/libjpeg/src/jdapimin.c index 4609b132..f50c27ed 100644 --- a/src/3rdparty/libjpeg/src/jdapimin.c +++ b/src/3rdparty/libjpeg/src/jdapimin.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1994-1998, Thomas G. Lane. * libjpeg-turbo Modifications: - * Copyright (C) 2016, D. R. Commander. + * Copyright (C) 2016, 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -53,7 +53,7 @@ jpeg_CreateDecompress(j_decompress_ptr cinfo, int version, size_t structsize) { struct jpeg_error_mgr *err = cinfo->err; void *client_data = cinfo->client_data; /* ignore Purify complaint here */ - MEMZERO(cinfo, sizeof(struct jpeg_decompress_struct)); + memset(cinfo, 0, sizeof(struct jpeg_decompress_struct)); cinfo->err = err; cinfo->client_data = client_data; } @@ -92,7 +92,7 @@ jpeg_CreateDecompress(j_decompress_ptr cinfo, int version, size_t structsize) cinfo->master = (struct jpeg_decomp_master *) (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_PERMANENT, sizeof(my_decomp_master)); - MEMZERO(cinfo->master, sizeof(my_decomp_master)); + memset(cinfo->master, 0, sizeof(my_decomp_master)); } diff --git a/src/3rdparty/libjpeg/src/jdapistd.c b/src/3rdparty/libjpeg/src/jdapistd.c index 695a6200..8827d8ab 100644 --- a/src/3rdparty/libjpeg/src/jdapistd.c +++ b/src/3rdparty/libjpeg/src/jdapistd.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1994-1996, Thomas G. Lane. * libjpeg-turbo Modifications: - * Copyright (C) 2010, 2015-2020, D. R. Commander. + * Copyright (C) 2010, 2015-2020, 2022, D. R. Commander. * Copyright (C) 2015, Google, Inc. * For conditions of distribution and use, see the accompanying README.ijg * file. @@ -159,6 +159,7 @@ jpeg_crop_scanline(j_decompress_ptr cinfo, JDIMENSION *xoffset, JDIMENSION input_xoffset; boolean reinit_upsampler = FALSE; jpeg_component_info *compptr; + my_master_ptr master = (my_master_ptr)cinfo->master; if (cinfo->global_state != DSTATE_SCANNING || cinfo->output_scanline != 0) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); @@ -208,6 +209,11 @@ jpeg_crop_scanline(j_decompress_ptr cinfo, JDIMENSION *xoffset, */ *width = *width + input_xoffset - *xoffset; cinfo->output_width = *width; + if (master->using_merged_upsample && cinfo->max_v_samp_factor == 2) { + my_merged_upsample_ptr upsample = (my_merged_upsample_ptr)cinfo->upsample; + upsample->out_row_width = + cinfo->output_width * cinfo->out_color_components; + } /* Set the first and last iMCU columns that we must decompress. These values * will be used in single-scan decompressions. diff --git a/src/3rdparty/libjpeg/src/jdarith.c b/src/3rdparty/libjpeg/src/jdarith.c index 7f0d3a78..21575e80 100644 --- a/src/3rdparty/libjpeg/src/jdarith.c +++ b/src/3rdparty/libjpeg/src/jdarith.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Developed 1997-2015 by Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2015-2020, D. R. Commander. + * Copyright (C) 2015-2020, 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -210,13 +210,13 @@ process_restart(j_decompress_ptr cinfo) for (ci = 0; ci < cinfo->comps_in_scan; ci++) { compptr = cinfo->cur_comp_info[ci]; if (!cinfo->progressive_mode || (cinfo->Ss == 0 && cinfo->Ah == 0)) { - MEMZERO(entropy->dc_stats[compptr->dc_tbl_no], DC_STAT_BINS); + memset(entropy->dc_stats[compptr->dc_tbl_no], 0, DC_STAT_BINS); /* Reset DC predictions to 0 */ entropy->last_dc_val[ci] = 0; entropy->dc_context[ci] = 0; } if (!cinfo->progressive_mode || cinfo->Ss) { - MEMZERO(entropy->ac_stats[compptr->ac_tbl_no], AC_STAT_BINS); + memset(entropy->ac_stats[compptr->ac_tbl_no], 0, AC_STAT_BINS); } } @@ -471,17 +471,17 @@ decode_mcu_AC_refine(j_decompress_ptr cinfo, JBLOCKROW *MCU_data) if (*thiscoef) { /* previously nonzero coef */ if (arith_decode(cinfo, st + 2)) { if (*thiscoef < 0) - *thiscoef += m1; + *thiscoef += (JCOEF)m1; else - *thiscoef += p1; + *thiscoef += (JCOEF)p1; } break; } if (arith_decode(cinfo, st + 1)) { /* newly nonzero coef */ if (arith_decode(cinfo, entropy->fixed_bin)) - *thiscoef = m1; + *thiscoef = (JCOEF)m1; else - *thiscoef = p1; + *thiscoef = (JCOEF)p1; break; } st += 3; k++; @@ -698,8 +698,8 @@ bad: /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG. * This ought to be an error condition, but we make it a warning. */ - if (cinfo->Ss != 0 || cinfo->Ah != 0 || cinfo->Al != 0 || - (cinfo->Se < DCTSIZE2 && cinfo->Se != DCTSIZE2 - 1)) + if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2 - 1 || + cinfo->Ah != 0 || cinfo->Al != 0) WARNMS(cinfo, JWRN_NOT_SEQUENTIAL); /* Select MCU decoding routine */ entropy->pub.decode_mcu = decode_mcu; @@ -715,7 +715,7 @@ bad: if (entropy->dc_stats[tbl] == NULL) entropy->dc_stats[tbl] = (unsigned char *)(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, DC_STAT_BINS); - MEMZERO(entropy->dc_stats[tbl], DC_STAT_BINS); + memset(entropy->dc_stats[tbl], 0, DC_STAT_BINS); /* Initialize DC predictions to 0 */ entropy->last_dc_val[ci] = 0; entropy->dc_context[ci] = 0; @@ -727,7 +727,7 @@ bad: if (entropy->ac_stats[tbl] == NULL) entropy->ac_stats[tbl] = (unsigned char *)(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, AC_STAT_BINS); - MEMZERO(entropy->ac_stats[tbl], AC_STAT_BINS); + memset(entropy->ac_stats[tbl], 0, AC_STAT_BINS); } } diff --git a/src/3rdparty/libjpeg/src/jdatadst.c b/src/3rdparty/libjpeg/src/jdatadst.c index 246fffb5..6b4fed23 100644 --- a/src/3rdparty/libjpeg/src/jdatadst.c +++ b/src/3rdparty/libjpeg/src/jdatadst.c @@ -5,7 +5,7 @@ * Copyright (C) 1994-1996, Thomas G. Lane. * Modified 2009-2012 by Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2013, 2016, D. R. Commander. + * Copyright (C) 2013, 2016, 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -23,11 +23,6 @@ #include "jpeglib.h" #include "jerror.h" -#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ -extern void *malloc(size_t size); -extern void free(void *ptr); -#endif - /* Expanded data destination object for stdio output */ @@ -116,7 +111,7 @@ empty_output_buffer(j_compress_ptr cinfo) { my_dest_ptr dest = (my_dest_ptr)cinfo->dest; - if (JFWRITE(dest->outfile, dest->buffer, OUTPUT_BUF_SIZE) != + if (fwrite(dest->buffer, 1, OUTPUT_BUF_SIZE, dest->outfile) != (size_t)OUTPUT_BUF_SIZE) ERREXIT(cinfo, JERR_FILE_WRITE); @@ -141,7 +136,7 @@ empty_mem_output_buffer(j_compress_ptr cinfo) if (nextbuffer == NULL) ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10); - MEMCOPY(nextbuffer, dest->buffer, dest->bufsize); + memcpy(nextbuffer, dest->buffer, dest->bufsize); free(dest->newbuffer); @@ -175,7 +170,7 @@ term_destination(j_compress_ptr cinfo) /* Write any data remaining in the buffer */ if (datacount > 0) { - if (JFWRITE(dest->outfile, dest->buffer, datacount) != datacount) + if (fwrite(dest->buffer, 1, datacount, dest->outfile) != datacount) ERREXIT(cinfo, JERR_FILE_WRITE); } fflush(dest->outfile); diff --git a/src/3rdparty/libjpeg/src/jdatasrc.c b/src/3rdparty/libjpeg/src/jdatasrc.c index eadb4a2c..e36a30d8 100644 --- a/src/3rdparty/libjpeg/src/jdatasrc.c +++ b/src/3rdparty/libjpeg/src/jdatasrc.c @@ -5,7 +5,7 @@ * Copyright (C) 1994-1996, Thomas G. Lane. * Modified 2009-2011 by Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2013, 2016, D. R. Commander. + * Copyright (C) 2013, 2016, 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -104,7 +104,7 @@ fill_input_buffer(j_decompress_ptr cinfo) my_src_ptr src = (my_src_ptr)cinfo->src; size_t nbytes; - nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE); + nbytes = fread(src->buffer, 1, INPUT_BUF_SIZE, src->infile); if (nbytes <= 0) { if (src->start_of_file) /* Treat empty input file as fatal error */ diff --git a/src/3rdparty/libjpeg/src/jddctmgr.c b/src/3rdparty/libjpeg/src/jddctmgr.c index 266f4466..e78d7beb 100644 --- a/src/3rdparty/libjpeg/src/jddctmgr.c +++ b/src/3rdparty/libjpeg/src/jddctmgr.c @@ -6,7 +6,7 @@ * Modified 2002-2010 by Guido Vollbeding. * libjpeg-turbo Modifications: * Copyright 2009 Pierre Ossman for Cendio AB - * Copyright (C) 2010, 2015, D. R. Commander. + * Copyright (C) 2010, 2015, 2022, D. R. Commander. * Copyright (C) 2013, MIPS Technologies, Inc., California. * For conditions of distribution and use, see the accompanying README.ijg * file. @@ -345,7 +345,7 @@ jinit_inverse_dct(j_decompress_ptr cinfo) compptr->dct_table = (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, sizeof(multiplier_table)); - MEMZERO(compptr->dct_table, sizeof(multiplier_table)); + memset(compptr->dct_table, 0, sizeof(multiplier_table)); /* Mark multiplier table not yet set up for any method */ idct->cur_method[ci] = -1; } diff --git a/src/3rdparty/libjpeg/src/jdinput.c b/src/3rdparty/libjpeg/src/jdinput.c index deec618f..1bc5aff1 100644 --- a/src/3rdparty/libjpeg/src/jdinput.c +++ b/src/3rdparty/libjpeg/src/jdinput.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-1997, Thomas G. Lane. * libjpeg-turbo Modifications: - * Copyright (C) 2010, 2016, 2018, D. R. Commander. + * Copyright (C) 2010, 2016, 2018, 2022, D. R. Commander. * Copyright (C) 2015, Google, Inc. * For conditions of distribution and use, see the accompanying README.ijg * file. @@ -264,7 +264,7 @@ latch_quant_tables(j_decompress_ptr cinfo) qtbl = (JQUANT_TBL *) (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, sizeof(JQUANT_TBL)); - MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], sizeof(JQUANT_TBL)); + memcpy(qtbl, cinfo->quant_tbl_ptrs[qtblno], sizeof(JQUANT_TBL)); compptr->quant_table = qtbl; } } diff --git a/src/3rdparty/libjpeg/src/jdmarker.c b/src/3rdparty/libjpeg/src/jdmarker.c index b964c3a1..f7eba615 100644 --- a/src/3rdparty/libjpeg/src/jdmarker.c +++ b/src/3rdparty/libjpeg/src/jdmarker.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-1998, Thomas G. Lane. * libjpeg-turbo Modifications: - * Copyright (C) 2012, 2015, D. R. Commander. + * Copyright (C) 2012, 2015, 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -473,7 +473,7 @@ get_dht(j_decompress_ptr cinfo) for (i = 0; i < count; i++) INPUT_BYTE(cinfo, huffval[i], return FALSE); - MEMZERO(&huffval[count], (256 - count) * sizeof(UINT8)); + memset(&huffval[count], 0, (256 - count) * sizeof(UINT8)); length -= count; @@ -491,8 +491,8 @@ get_dht(j_decompress_ptr cinfo) if (*htblptr == NULL) *htblptr = jpeg_alloc_huff_table((j_common_ptr)cinfo); - MEMCOPY((*htblptr)->bits, bits, sizeof((*htblptr)->bits)); - MEMCOPY((*htblptr)->huffval, huffval, sizeof((*htblptr)->huffval)); + memcpy((*htblptr)->bits, bits, sizeof((*htblptr)->bits)); + memcpy((*htblptr)->huffval, huffval, sizeof((*htblptr)->huffval)); } if (length != 0) diff --git a/src/3rdparty/libjpeg/src/jdmaster.c b/src/3rdparty/libjpeg/src/jdmaster.c index cbc8774b..a3690bf5 100644 --- a/src/3rdparty/libjpeg/src/jdmaster.c +++ b/src/3rdparty/libjpeg/src/jdmaster.c @@ -5,7 +5,7 @@ * Copyright (C) 1991-1997, Thomas G. Lane. * Modified 2002-2009 by Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2009-2011, 2016, 2019, D. R. Commander. + * Copyright (C) 2009-2011, 2016, 2019, 2022, D. R. Commander. * Copyright (C) 2013, Linaro Limited. * Copyright (C) 2015, Google, Inc. * For conditions of distribution and use, see the accompanying README.ijg @@ -417,7 +417,7 @@ prepare_range_limit_table(j_decompress_ptr cinfo) table += (MAXJSAMPLE + 1); /* allow negative subscripts of simple table */ cinfo->sample_range_limit = table; /* First segment of "simple" table: limit[x] = 0 for x < 0 */ - MEMZERO(table - (MAXJSAMPLE + 1), (MAXJSAMPLE + 1) * sizeof(JSAMPLE)); + memset(table - (MAXJSAMPLE + 1), 0, (MAXJSAMPLE + 1) * sizeof(JSAMPLE)); /* Main part of "simple" table: limit[x] = x */ for (i = 0; i <= MAXJSAMPLE; i++) table[i] = (JSAMPLE)i; @@ -426,10 +426,10 @@ prepare_range_limit_table(j_decompress_ptr cinfo) for (i = CENTERJSAMPLE; i < 2 * (MAXJSAMPLE + 1); i++) table[i] = MAXJSAMPLE; /* Second half of post-IDCT table */ - MEMZERO(table + (2 * (MAXJSAMPLE + 1)), - (2 * (MAXJSAMPLE + 1) - CENTERJSAMPLE) * sizeof(JSAMPLE)); - MEMCOPY(table + (4 * (MAXJSAMPLE + 1) - CENTERJSAMPLE), - cinfo->sample_range_limit, CENTERJSAMPLE * sizeof(JSAMPLE)); + memset(table + (2 * (MAXJSAMPLE + 1)), 0, + (2 * (MAXJSAMPLE + 1) - CENTERJSAMPLE) * sizeof(JSAMPLE)); + memcpy(table + (4 * (MAXJSAMPLE + 1) - CENTERJSAMPLE), + cinfo->sample_range_limit, CENTERJSAMPLE * sizeof(JSAMPLE)); } diff --git a/src/3rdparty/libjpeg/src/jdphuff.c b/src/3rdparty/libjpeg/src/jdphuff.c index c6d82ca1..9680ebcb 100644 --- a/src/3rdparty/libjpeg/src/jdphuff.c +++ b/src/3rdparty/libjpeg/src/jdphuff.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1995-1997, Thomas G. Lane. * libjpeg-turbo Modifications: - * Copyright (C) 2015-2016, 2018-2021, D. R. Commander. + * Copyright (C) 2015-2016, 2018-2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -578,9 +578,9 @@ decode_mcu_AC_refine(j_decompress_ptr cinfo, JBLOCKROW *MCU_data) if (GET_BITS(1)) { if ((*thiscoef & p1) == 0) { /* do nothing if already set it */ if (*thiscoef >= 0) - *thiscoef += p1; + *thiscoef += (JCOEF)p1; else - *thiscoef += m1; + *thiscoef += (JCOEF)m1; } } } else { @@ -612,9 +612,9 @@ decode_mcu_AC_refine(j_decompress_ptr cinfo, JBLOCKROW *MCU_data) if (GET_BITS(1)) { if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */ if (*thiscoef >= 0) - *thiscoef += p1; + *thiscoef += (JCOEF)p1; else - *thiscoef += m1; + *thiscoef += (JCOEF)m1; } } } diff --git a/src/3rdparty/libjpeg/src/jerror.c b/src/3rdparty/libjpeg/src/jerror.c index 936c4f5d..d5447029 100644 --- a/src/3rdparty/libjpeg/src/jerror.c +++ b/src/3rdparty/libjpeg/src/jerror.c @@ -3,8 +3,8 @@ * * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-1998, Thomas G. Lane. - * It was modified by The libjpeg-turbo Project to include only code relevant - * to libjpeg-turbo. + * libjpeg-turbo Modifications: + * Copyright (C) 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -189,13 +189,13 @@ format_message(j_common_ptr cinfo, char *buffer) /* Format the message into the passed buffer */ if (isstring) - sprintf(buffer, msgtext, err->msg_parm.s); + snprintf(buffer, JMSG_LENGTH_MAX, msgtext, err->msg_parm.s); else - sprintf(buffer, msgtext, - err->msg_parm.i[0], err->msg_parm.i[1], - err->msg_parm.i[2], err->msg_parm.i[3], - err->msg_parm.i[4], err->msg_parm.i[5], - err->msg_parm.i[6], err->msg_parm.i[7]); + snprintf(buffer, JMSG_LENGTH_MAX, msgtext, + err->msg_parm.i[0], err->msg_parm.i[1], + err->msg_parm.i[2], err->msg_parm.i[3], + err->msg_parm.i[4], err->msg_parm.i[5], + err->msg_parm.i[6], err->msg_parm.i[7]); } diff --git a/src/3rdparty/libjpeg/src/jerror.h b/src/3rdparty/libjpeg/src/jerror.h index 4476df2c..eb44a114 100644 --- a/src/3rdparty/libjpeg/src/jerror.h +++ b/src/3rdparty/libjpeg/src/jerror.h @@ -5,7 +5,7 @@ * Copyright (C) 1994-1997, Thomas G. Lane. * Modified 1997-2009 by Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2014, 2017, D. R. Commander. + * Copyright (C) 2014, 2017, 2021-2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -103,7 +103,7 @@ JMESSAGE(JERR_MISMATCHED_QUANT_TABLE, "Cannot transcode due to multiple use of quantization table %d") JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data") JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change") -JMESSAGE(JERR_NOTIMPL, "Not implemented yet") +JMESSAGE(JERR_NOTIMPL, "Requested features are incompatible") JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") #if JPEG_LIB_VERSION >= 70 JMESSAGE(JERR_NO_ARITH_TABLE, "Arithmetic table 0x%02x was not defined") @@ -268,6 +268,7 @@ JMESSAGE(JERR_BAD_DROP_SAMPLING, #define ERREXITS(cinfo, code, str) \ ((cinfo)->err->msg_code = (code), \ strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (cinfo)->err->msg_parm.s[JMSG_STR_PARM_MAX - 1] = '\0', \ (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo))) #define MAKESTMT(stuff) do { stuff } while (0) @@ -324,6 +325,7 @@ JMESSAGE(JERR_BAD_DROP_SAMPLING, #define TRACEMSS(cinfo, lvl, code, str) \ ((cinfo)->err->msg_code = (code), \ strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (cinfo)->err->msg_parm.s[JMSG_STR_PARM_MAX - 1] = '\0', \ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), (lvl))) #endif /* JERROR_H */ diff --git a/src/3rdparty/libjpeg/src/jinclude.h b/src/3rdparty/libjpeg/src/jinclude.h index c1bcf7d9..120614b2 100644 --- a/src/3rdparty/libjpeg/src/jinclude.h +++ b/src/3rdparty/libjpeg/src/jinclude.h @@ -3,8 +3,8 @@ * * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-1994, Thomas G. Lane. - * It was modified by The libjpeg-turbo Project to include only code relevant - * to libjpeg-turbo. + * libjpeg-turbo Modifications: + * Copyright (C) 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -17,72 +17,117 @@ * JPEG library. Most applications need only include jpeglib.h. */ +#ifndef __JINCLUDE_H__ +#define __JINCLUDE_H__ /* Include auto-config file to find out which system include files we need. */ #include "jconfig.h" /* auto configuration options */ +#include "jconfigint.h" #define JCONFIG_INCLUDED /* so that jpeglib.h doesn't do it again */ /* - * We need the NULL macro and size_t typedef. - * On an ANSI-conforming system it is sufficient to include . - * Otherwise, we get them from or ; we may have to - * pull in as well. * Note that the core JPEG library does not require ; * only the default error handler and data source/destination modules do. * But we must pull it in because of the references to FILE in jpeglib.h. * You can remove those references if you want to compile without . */ -#ifdef HAVE_STDDEF_H #include -#endif - -#ifdef HAVE_STDLIB_H #include -#endif - -#ifdef NEED_SYS_TYPES_H -#include -#endif - #include - -/* - * We need memory copying and zeroing functions, plus strncpy(). - * ANSI and System V implementations declare these in . - * BSD doesn't have the mem() functions, but it does have bcopy()/bzero(). - * Some systems may declare memset and memcpy in . - * - * NOTE: we assume the size parameters to these functions are of type size_t. - * Change the casts in these macros if not! - */ - -#ifdef NEED_BSD_STRINGS - -#include -#define MEMZERO(target, size) \ - bzero((void *)(target), (size_t)(size)) -#define MEMCOPY(dest, src, size) \ - bcopy((const void *)(src), (void *)(dest), (size_t)(size)) - -#else /* not BSD, assume ANSI/SysV string lib */ - #include -#define MEMZERO(target, size) \ - memset((void *)(target), 0, (size_t)(size)) -#define MEMCOPY(dest, src, size) \ - memcpy((void *)(dest), (const void *)(src), (size_t)(size)) - -#endif /* - * The modules that use fread() and fwrite() always invoke them through - * these macros. On some systems you may need to twiddle the argument casts. - * CAUTION: argument order is different from underlying functions! + * These macros/inline functions facilitate using Microsoft's "safe string" + * functions with Visual Studio builds without the need to scatter #ifdefs + * throughout the code base. */ -#define JFREAD(file, buf, sizeofbuf) \ - ((size_t)fread((void *)(buf), (size_t)1, (size_t)(sizeofbuf), (file))) -#define JFWRITE(file, buf, sizeofbuf) \ - ((size_t)fwrite((const void *)(buf), (size_t)1, (size_t)(sizeofbuf), (file))) + +#ifndef NO_GETENV + +#ifdef _MSC_VER + +static INLINE int GETENV_S(char *buffer, size_t buffer_size, const char *name) +{ + size_t required_size; + + return (int)getenv_s(&required_size, buffer, buffer_size, name); +} + +#else /* _MSC_VER */ + +#include + +/* This provides a similar interface to the Microsoft/C11 getenv_s() function, + * but other than parameter validation, it has no advantages over getenv(). + */ + +static INLINE int GETENV_S(char *buffer, size_t buffer_size, const char *name) +{ + char *env; + + if (!buffer) { + if (buffer_size == 0) + return 0; + else + return (errno = EINVAL); + } + if (buffer_size == 0) + return (errno = EINVAL); + if (!name) { + *buffer = 0; + return 0; + } + + env = getenv(name); + if (!env) + { + *buffer = 0; + return 0; + } + + if (strlen(env) + 1 > buffer_size) { + *buffer = 0; + return ERANGE; + } + + strncpy(buffer, env, buffer_size); + + return 0; +} + +#endif /* _MSC_VER */ + +#endif /* NO_GETENV */ + + +#ifndef NO_PUTENV + +#ifdef _WIN32 + +#define PUTENV_S(name, value) _putenv_s(name, value) + +#else + +/* This provides a similar interface to the Microsoft _putenv_s() function, but + * other than parameter validation, it has no advantages over setenv(). + */ + +static INLINE int PUTENV_S(const char *name, const char *value) +{ + if (!name || !value) + return (errno = EINVAL); + + setenv(name, value, 1); + + return errno; +} + +#endif /* _WIN32 */ + +#endif /* NO_PUTENV */ + + +#endif /* JINCLUDE_H */ diff --git a/src/3rdparty/libjpeg/src/jmemmgr.c b/src/3rdparty/libjpeg/src/jmemmgr.c index 70b8ec0c..8f5a4ab1 100644 --- a/src/3rdparty/libjpeg/src/jmemmgr.c +++ b/src/3rdparty/libjpeg/src/jmemmgr.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-1997, Thomas G. Lane. * libjpeg-turbo Modifications: - * Copyright (C) 2016, 2021, D. R. Commander. + * Copyright (C) 2016, 2021-2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -37,12 +37,6 @@ #endif #include -#ifndef NO_GETENV -#ifndef HAVE_STDLIB_H /* should declare getenv() */ -extern char *getenv(const char *name); -#endif -#endif - LOCAL(size_t) round_up_pow2(size_t a, size_t b) @@ -1162,12 +1156,16 @@ jinit_memory_mgr(j_common_ptr cinfo) */ #ifndef NO_GETENV { - char *memenv; + char memenv[30] = { 0 }; - if ((memenv = getenv("JPEGMEM")) != NULL) { + if (!GETENV_S(memenv, 30, "JPEGMEM") && strlen(memenv) > 0) { char ch = 'x'; +#ifdef _MSC_VER + if (sscanf_s(memenv, "%ld%c", &max_to_use, &ch, 1) > 0) { +#else if (sscanf(memenv, "%ld%c", &max_to_use, &ch) > 0) { +#endif if (ch == 'm' || ch == 'M') max_to_use *= 1000L; mem->pub.max_memory_to_use = max_to_use * 1000L; diff --git a/src/3rdparty/libjpeg/src/jmemnobs.c b/src/3rdparty/libjpeg/src/jmemnobs.c index 089be8f5..cd6571ba 100644 --- a/src/3rdparty/libjpeg/src/jmemnobs.c +++ b/src/3rdparty/libjpeg/src/jmemnobs.c @@ -22,11 +22,6 @@ #include "jpeglib.h" #include "jmemsys.h" /* import the system-dependent declarations */ -#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ -extern void *malloc(size_t size); -extern void free(void *ptr); -#endif - /* * Memory allocation and freeing are controlled by the regular library diff --git a/src/3rdparty/libjpeg/src/jmorecfg.h b/src/3rdparty/libjpeg/src/jmorecfg.h index fb3a9cf4..b33a9919 100644 --- a/src/3rdparty/libjpeg/src/jmorecfg.h +++ b/src/3rdparty/libjpeg/src/jmorecfg.h @@ -100,11 +100,7 @@ typedef unsigned char UINT8; /* UINT16 must hold at least the values 0..65535. */ -#ifdef HAVE_UNSIGNED_SHORT typedef unsigned short UINT16; -#else /* not HAVE_UNSIGNED_SHORT */ -typedef unsigned int UINT16; -#endif /* HAVE_UNSIGNED_SHORT */ /* INT16 must hold at least the values -32768..32767. */ diff --git a/src/3rdparty/libjpeg/src/jpegint.h b/src/3rdparty/libjpeg/src/jpegint.h index 8c853479..6af9e2a1 100644 --- a/src/3rdparty/libjpeg/src/jpegint.h +++ b/src/3rdparty/libjpeg/src/jpegint.h @@ -373,12 +373,3 @@ extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */ /* Arithmetic coding probability estimation tables in jaricom.c */ extern const JLONG jpeg_aritab[]; - -/* Suppress undefined-structure complaints if necessary. */ - -#ifdef INCOMPLETE_TYPES_BROKEN -#ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */ -struct jvirt_sarray_control { long dummy; }; -struct jvirt_barray_control { long dummy; }; -#endif -#endif /* INCOMPLETE_TYPES_BROKEN */ diff --git a/src/3rdparty/libjpeg/src/jstdhuff.c b/src/3rdparty/libjpeg/src/jstdhuff.c index 036d6495..345b513d 100644 --- a/src/3rdparty/libjpeg/src/jstdhuff.c +++ b/src/3rdparty/libjpeg/src/jstdhuff.c @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-1998, Thomas G. Lane. * libjpeg-turbo Modifications: - * Copyright (C) 2013, D. R. Commander. + * Copyright (C) 2013, 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -29,7 +29,7 @@ add_huff_table(j_common_ptr cinfo, JHUFF_TBL **htblptr, const UINT8 *bits, return; /* Copy the number-of-symbols-of-each-code-length counts */ - MEMCOPY((*htblptr)->bits, bits, sizeof((*htblptr)->bits)); + memcpy((*htblptr)->bits, bits, sizeof((*htblptr)->bits)); /* Validate the counts. We do this here mainly so we can copy the right * number of symbols from the val[] array, without risking marching off @@ -41,8 +41,9 @@ add_huff_table(j_common_ptr cinfo, JHUFF_TBL **htblptr, const UINT8 *bits, if (nsymbols < 1 || nsymbols > 256) ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); - MEMCOPY((*htblptr)->huffval, val, nsymbols * sizeof(UINT8)); - MEMZERO(&((*htblptr)->huffval[nsymbols]), (256 - nsymbols) * sizeof(UINT8)); + memcpy((*htblptr)->huffval, val, nsymbols * sizeof(UINT8)); + memset(&((*htblptr)->huffval[nsymbols]), 0, + (256 - nsymbols) * sizeof(UINT8)); /* Initialize sent_table FALSE so table will be written to JPEG file. */ (*htblptr)->sent_table = FALSE; diff --git a/src/3rdparty/libjpeg/src/jutils.c b/src/3rdparty/libjpeg/src/jutils.c index 5c5bb17d..d8627162 100644 --- a/src/3rdparty/libjpeg/src/jutils.c +++ b/src/3rdparty/libjpeg/src/jutils.c @@ -3,8 +3,8 @@ * * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-1996, Thomas G. Lane. - * It was modified by The libjpeg-turbo Project to include only code - * relevant to libjpeg-turbo. + * libjpeg-turbo Modifications: + * Copyright (C) 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -110,7 +110,7 @@ jcopy_sample_rows(JSAMPARRAY input_array, int source_row, for (row = num_rows; row > 0; row--) { inptr = *input_array++; outptr = *output_array++; - MEMCOPY(outptr, inptr, count); + memcpy(outptr, inptr, count); } } @@ -120,7 +120,7 @@ jcopy_block_row(JBLOCKROW input_row, JBLOCKROW output_row, JDIMENSION num_blocks) /* Copy a row of coefficient blocks from one place to another. */ { - MEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * sizeof(JCOEF))); + memcpy(output_row, input_row, num_blocks * (DCTSIZE2 * sizeof(JCOEF))); } @@ -129,5 +129,5 @@ jzero_far(void *target, size_t bytestozero) /* Zero out a chunk of memory. */ /* This might be sample-array data, block-array data, or alloc_large data. */ { - MEMZERO(target, bytestozero); + memset(target, 0, bytestozero); } diff --git a/src/3rdparty/libjpeg/src/jversion.h b/src/3rdparty/libjpeg/src/jversion.h index 2ab534af..63db95b9 100644 --- a/src/3rdparty/libjpeg/src/jversion.h +++ b/src/3rdparty/libjpeg/src/jversion.h @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2010, 2012-2021, D. R. Commander. + * Copyright (C) 2010, 2012-2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -37,7 +37,7 @@ */ #define JCOPYRIGHT \ - "Copyright (C) 2009-2021 D. R. Commander\n" \ + "Copyright (C) 2009-2022 D. R. Commander\n" \ "Copyright (C) 2015, 2020 Google, Inc.\n" \ "Copyright (C) 2019-2020 Arm Limited\n" \ "Copyright (C) 2015-2016, 2018 Matthieu Darbois\n" \ @@ -51,4 +51,4 @@ "Copyright (C) 1991-2020 Thomas G. Lane, Guido Vollbeding" #define JCOPYRIGHT_SHORT \ - "Copyright (C) 1991-2021 The libjpeg-turbo Project and many others" + "Copyright (C) 1991-2022 The libjpeg-turbo Project and many others" diff --git a/src/3rdparty/pcre2/AUTHORS b/src/3rdparty/pcre2/AUTHORS index bec8a1e5..11ef898b 100644 --- a/src/3rdparty/pcre2/AUTHORS +++ b/src/3rdparty/pcre2/AUTHORS @@ -8,7 +8,7 @@ Email domain: gmail.com Retired from University of Cambridge Computing Service, Cambridge, England. -Copyright (c) 1997-2021 University of Cambridge +Copyright (c) 1997-2022 University of Cambridge All rights reserved @@ -19,7 +19,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Emain domain: freemail.hu -Copyright(c) 2010-2021 Zoltan Herczeg +Copyright(c) 2010-2022 Zoltan Herczeg All rights reserved. @@ -30,7 +30,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Emain domain: freemail.hu -Copyright(c) 2009-2021 Zoltan Herczeg +Copyright(c) 2009-2022 Zoltan Herczeg All rights reserved. #### diff --git a/src/3rdparty/pcre2/LICENCE b/src/3rdparty/pcre2/LICENCE index b1ec61be..2f3cd5ca 100644 --- a/src/3rdparty/pcre2/LICENCE +++ b/src/3rdparty/pcre2/LICENCE @@ -26,7 +26,7 @@ Email domain: gmail.com Retired from University of Cambridge Computing Service, Cambridge, England. -Copyright (c) 1997-2021 University of Cambridge +Copyright (c) 1997-2022 University of Cambridge All rights reserved. @@ -37,7 +37,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Email domain: freemail.hu -Copyright(c) 2010-2021 Zoltan Herczeg +Copyright(c) 2010-2022 Zoltan Herczeg All rights reserved. @@ -48,7 +48,7 @@ Written by: Zoltan Herczeg Email local part: hzmester Email domain: freemail.hu -Copyright(c) 2009-2021 Zoltan Herczeg +Copyright(c) 2009-2022 Zoltan Herczeg All rights reserved. diff --git a/src/3rdparty/pcre2/import_from_pcre2_tarball.sh b/src/3rdparty/pcre2/import_from_pcre2_tarball.sh index c7abb7d2..a0af3ea2 100755 --- a/src/3rdparty/pcre2/import_from_pcre2_tarball.sh +++ b/src/3rdparty/pcre2/import_from_pcre2_tarball.sh @@ -112,6 +112,7 @@ FILES=" src/pcre2_tables.c src/pcre2_ucd.c src/pcre2_ucp.h + src/pcre2_ucptables.c src/pcre2_valid_utf.c src/pcre2_xclass.c src/sljit/sljitConfig.h diff --git a/src/3rdparty/pcre2/qt_attribution.json b/src/3rdparty/pcre2/qt_attribution.json index 8fca054c..1ec700cd 100644 --- a/src/3rdparty/pcre2/qt_attribution.json +++ b/src/3rdparty/pcre2/qt_attribution.json @@ -7,12 +7,12 @@ "Description": "The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5.", "Homepage": "http://www.pcre.org/", - "Version": "10.39", - "DownloadLocation": "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.39/pcre2-10.39.tar.bz2", + "Version": "10.40", + "DownloadLocation": "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.40/pcre2-10.40.tar.bz2", "License": "BSD 3-clause \"New\" or \"Revised\" License", "LicenseId": "BSD-3-Clause", "LicenseFile": "LICENCE", - "Copyright": "Copyright (c) 1997-2021 University of Cambridge + "Copyright": "Copyright (c) 1997-2022 University of Cambridge Copyright (c) 2010-2020 Zoltan Herczeg" }, { @@ -24,11 +24,11 @@ Copyright (c) 2010-2020 Zoltan Herczeg" "Path": "src/sljit", "Description": "The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5.", "Homepage": "http://www.pcre.org/", - "Version": "10.39", - "DownloadLocation": "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.39/pcre2-10.39.tar.bz2", + "Version": "10.40", + "DownloadLocation": "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.40/pcre2-10.40.tar.bz2", "License": "BSD 2-clause \"Simplified\" License", "LicenseId": "BSD-2-Clause", "LicenseFile": "LICENCE-SLJIT", - "Copyright": "Copyright (c) 2009-2021 Zoltan Herczeg" + "Copyright": "Copyright (c) 2009-2022 Zoltan Herczeg" } ] diff --git a/src/3rdparty/pcre2/src/pcre2.h b/src/3rdparty/pcre2/src/pcre2.h index 90a97d9c..8adcede5 100644 --- a/src/3rdparty/pcre2/src/pcre2.h +++ b/src/3rdparty/pcre2/src/pcre2.h @@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE. /* The current PCRE version information. */ #define PCRE2_MAJOR 10 -#define PCRE2_MINOR 39 +#define PCRE2_MINOR 40 #define PCRE2_PRERELEASE -#define PCRE2_DATE 2021-10-29 +#define PCRE2_DATE 2022-04-14 /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE2, the appropriate diff --git a/src/3rdparty/pcre2/src/pcre2_auto_possess.c b/src/3rdparty/pcre2/src/pcre2_auto_possess.c index e5e08956..419fd490 100644 --- a/src/3rdparty/pcre2/src/pcre2_auto_possess.c +++ b/src/3rdparty/pcre2/src/pcre2_auto_possess.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2021 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -123,18 +123,21 @@ opcode is used to select the column. The values are as follows: */ static const uint8_t propposstab[PT_TABSIZE][PT_TABSIZE] = { -/* ANY LAMP GC PC SC ALNUM SPACE PXSPACE WORD CLIST UCNC */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_ANY */ - { 0, 3, 0, 0, 0, 3, 1, 1, 0, 0, 0 }, /* PT_LAMP */ - { 0, 0, 2, 4, 0, 9, 10, 10, 11, 0, 0 }, /* PT_GC */ - { 0, 0, 5, 2, 0, 15, 16, 16, 17, 0, 0 }, /* PT_PC */ - { 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 }, /* PT_SC */ - { 0, 3, 6, 12, 0, 3, 1, 1, 0, 0, 0 }, /* PT_ALNUM */ - { 0, 1, 7, 13, 0, 1, 3, 3, 1, 0, 0 }, /* PT_SPACE */ - { 0, 1, 7, 13, 0, 1, 3, 3, 1, 0, 0 }, /* PT_PXSPACE */ - { 0, 0, 8, 14, 0, 0, 1, 1, 3, 0, 0 }, /* PT_WORD */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_CLIST */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 } /* PT_UCNC */ +/* ANY LAMP GC PC SC SCX ALNUM SPACE PXSPACE WORD CLIST UCNC BIDICL BOOL */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_ANY */ + { 0, 3, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, 0, 0 }, /* PT_LAMP */ + { 0, 0, 2, 4, 0, 0, 9, 10, 10, 11, 0, 0, 0, 0 }, /* PT_GC */ + { 0, 0, 5, 2, 0, 0, 15, 16, 16, 17, 0, 0, 0, 0 }, /* PT_PC */ + { 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_SC */ + { 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_SCX */ + { 0, 3, 6, 12, 0, 0, 3, 1, 1, 0, 0, 0, 0, 0 }, /* PT_ALNUM */ + { 0, 1, 7, 13, 0, 0, 1, 3, 3, 1, 0, 0, 0, 0 }, /* PT_SPACE */ + { 0, 1, 7, 13, 0, 0, 1, 3, 3, 1, 0, 0, 0, 0 }, /* PT_PXSPACE */ + { 0, 0, 8, 14, 0, 0, 0, 1, 1, 3, 0, 0, 0, 0 }, /* PT_WORD */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_CLIST */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0 }, /* PT_UCNC */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* PT_BIDICL */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } /* PT_BOOL */ }; /* This table is used to check whether auto-possessification is possible @@ -196,6 +199,7 @@ static BOOL check_char_prop(uint32_t c, unsigned int ptype, unsigned int pdata, BOOL negated) { +BOOL ok; const uint32_t *p; const ucd_record *prop = GET_UCD(c); @@ -215,6 +219,11 @@ switch(ptype) case PT_SC: return (pdata == prop->script) == negated; + case PT_SCX: + ok = (pdata == prop->script + || MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), pdata) != 0); + return ok == negated; + /* These are specials */ case PT_ALNUM: @@ -251,6 +260,14 @@ switch(ptype) if (c == *p++) return negated; } break; /* Control never reaches here */ + + /* Haven't yet thought these through. */ + + case PT_BIDICL: + return FALSE; + + case PT_BOOL: + return FALSE; } return FALSE; diff --git a/src/3rdparty/pcre2/src/pcre2_compile.c b/src/3rdparty/pcre2/src/pcre2_compile.c index 383159be..de259c9c 100644 --- a/src/3rdparty/pcre2/src/pcre2_compile.c +++ b/src/3rdparty/pcre2/src/pcre2_compile.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2021 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -124,7 +124,7 @@ static unsigned int static int compile_regex(uint32_t, PCRE2_UCHAR **, uint32_t **, int *, uint32_t, - uint32_t *, int32_t *, uint32_t *, int32_t *, branch_chain *, + uint32_t *, uint32_t *, uint32_t *, uint32_t *, branch_chain *, compile_block *, PCRE2_SIZE *); static int @@ -385,13 +385,15 @@ compiler is clever with identical subexpressions. */ #define SETBIT(a,b) a[(b)/8] = (uint8_t)(a[(b)/8] | (1u << ((b)&7))) -/* Private flags added to firstcu and reqcu. */ +/* Values and flags for the unsigned xxcuflags variables that accompany xxcu +variables, which are concerned with first and required code units. A value +greater than or equal to REQ_NONE means "no code unit set"; otherwise the +matching xxcu variable is set, and the low valued bits are relevant. */ -#define REQ_CASELESS (1u << 0) /* Indicates caselessness */ -#define REQ_VARY (1u << 1) /* reqcu followed non-literal item */ -/* Negative values for the firstcu and reqcu flags */ -#define REQ_UNSET (-2) /* Not yet found anything */ -#define REQ_NONE (-1) /* Found not fixed char */ +#define REQ_UNSET 0xffffffffu /* Not yet found anything */ +#define REQ_NONE 0xfffffffeu /* Found not fixed character */ +#define REQ_CASELESS 0x00000001u /* Code unit in xxcu is caseless */ +#define REQ_VARY 0x00000002u /* Code unit is followed by non-literal */ /* These flags are used in the groupinfo vector. */ @@ -2088,7 +2090,9 @@ get_ucp(PCRE2_SPTR *ptrptr, BOOL *negptr, uint16_t *ptypeptr, PCRE2_UCHAR c; PCRE2_SIZE i, bot, top; PCRE2_SPTR ptr = *ptrptr; -PCRE2_UCHAR name[32]; +PCRE2_UCHAR name[50]; +PCRE2_UCHAR *vptr = NULL; +uint16_t ptscript = PT_NOTSCRIPT; if (ptr >= cb->end_pattern) goto ERROR_RETURN; c = *ptr++; @@ -2100,36 +2104,95 @@ negation. */ if (c == CHAR_LEFT_CURLY_BRACKET) { if (ptr >= cb->end_pattern) goto ERROR_RETURN; + if (*ptr == CHAR_CIRCUMFLEX_ACCENT) { *negptr = TRUE; ptr++; } + for (i = 0; i < (int)(sizeof(name) / sizeof(PCRE2_UCHAR)) - 1; i++) { if (ptr >= cb->end_pattern) goto ERROR_RETURN; c = *ptr++; + while (c == '_' || c == '-' || isspace(c)) + { + if (ptr >= cb->end_pattern) goto ERROR_RETURN; + c = *ptr++; + } if (c == CHAR_NUL) goto ERROR_RETURN; if (c == CHAR_RIGHT_CURLY_BRACKET) break; - name[i] = c; + name[i] = tolower(c); + if ((c == ':' || c == '=') && vptr == NULL) vptr = name + i; } + if (c != CHAR_RIGHT_CURLY_BRACKET) goto ERROR_RETURN; name[i] = 0; } -/* Otherwise there is just one following character, which must be an ASCII -letter. */ +/* If { doesn't follow \p or \P there is just one following character, which +must be an ASCII letter. */ else if (MAX_255(c) && (cb->ctypes[c] & ctype_letter) != 0) { - name[0] = c; + name[0] = tolower(c); name[1] = 0; } else goto ERROR_RETURN; *ptrptr = ptr; -/* Search for a recognized property name using binary chop. */ +/* If the property contains ':' or '=' we have class name and value separately +specified. The following are supported: + + . Bidi_Class (synonym bc), for which the property names are "bidi". + . Script (synonym sc) for which the property name is the script name + . Script_Extensions (synonym scx), ditto + +As this is a small number, we currently just check the names directly. If this +grows, a sorted table and a switch will be neater. + +For both the script properties, set a PT_xxx value so that (1) they can be +distinguished and (2) invalid script names that happen to be the name of +another property can be diagnosed. */ + +if (vptr != NULL) + { + int offset = 0; + PCRE2_UCHAR sname[8]; + + *vptr = 0; /* Terminate property name */ + if (PRIV(strcmp_c8)(name, STRING_bidiclass) == 0 || + PRIV(strcmp_c8)(name, STRING_bc) == 0) + { + offset = 4; + sname[0] = CHAR_b; + sname[1] = CHAR_i; /* There is no strcpy_c8 function */ + sname[2] = CHAR_d; + sname[3] = CHAR_i; + } + + else if (PRIV(strcmp_c8)(name, STRING_script) == 0 || + PRIV(strcmp_c8)(name, STRING_sc) == 0) + ptscript = PT_SC; + + else if (PRIV(strcmp_c8)(name, STRING_scriptextensions) == 0 || + PRIV(strcmp_c8)(name, STRING_scx) == 0) + ptscript = PT_SCX; + + else + { + *errorcodeptr = ERR47; + return FALSE; + } + + /* Adjust the string in name[] as needed */ + + memmove(name + offset, vptr + 1, (name + i - vptr)*sizeof(PCRE2_UCHAR)); + if (offset != 0) memmove(name, sname, offset*sizeof(PCRE2_UCHAR)); + } + +/* Search for a recognized property using binary chop. */ bot = 0; top = PRIV(utt_size); @@ -2139,15 +2202,37 @@ while (bot < top) int r; i = (bot + top) >> 1; r = PRIV(strcmp_c8)(name, PRIV(utt_names) + PRIV(utt)[i].name_offset); + + /* When a matching property is found, some extra checking is needed when the + \p{xx:yy} syntax is used and xx is either sc or scx. */ + if (r == 0) { - *ptypeptr = PRIV(utt)[i].type; *pdataptr = PRIV(utt)[i].value; - return TRUE; + if (vptr == NULL || ptscript == PT_NOTSCRIPT) + { + *ptypeptr = PRIV(utt)[i].type; + return TRUE; + } + + switch (PRIV(utt)[i].type) + { + case PT_SC: + *ptypeptr = PT_SC; + return TRUE; + + case PT_SCX: + *ptypeptr = ptscript; + return TRUE; + } + + break; /* Non-script found */ } + if (r > 0) bot = i + 1; else top = i; } -*errorcodeptr = ERR47; /* Unrecognized name */ + +*errorcodeptr = ERR47; /* Unrecognized property */ return FALSE; ERROR_RETURN: /* Malformed \P or \p */ @@ -5285,9 +5370,9 @@ Arguments: pptrptr points to the current parsed pattern pointer errorcodeptr points to error code variable firstcuptr place to put the first required code unit - firstcuflagsptr place to put the first code unit flags, or a negative number + firstcuflagsptr place to put the first code unit flags reqcuptr place to put the last required code unit - reqcuflagsptr place to put the last required code unit flags, or a negative number + reqcuflagsptr place to put the last required code unit flags bcptr points to current branch chain cb contains pointers to tables etc. lengthptr NULL during the real compile phase @@ -5300,8 +5385,8 @@ Returns: 0 There's been an error, *errorcodeptr is non-zero static int compile_branch(uint32_t *optionsptr, PCRE2_UCHAR **codeptr, uint32_t **pptrptr, - int *errorcodeptr, uint32_t *firstcuptr, int32_t *firstcuflagsptr, - uint32_t *reqcuptr, int32_t *reqcuflagsptr, branch_chain *bcptr, + int *errorcodeptr, uint32_t *firstcuptr, uint32_t *firstcuflagsptr, + uint32_t *reqcuptr, uint32_t *reqcuflagsptr, branch_chain *bcptr, compile_block *cb, PCRE2_SIZE *lengthptr) { int bravalue = 0; @@ -5316,9 +5401,9 @@ uint32_t zeroreqcu, zerofirstcu; uint32_t escape; uint32_t *pptr = *pptrptr; uint32_t meta, meta_arg; -int32_t firstcuflags, reqcuflags; -int32_t zeroreqcuflags, zerofirstcuflags; -int32_t req_caseopt, reqvary, tempreqvary; +uint32_t firstcuflags, reqcuflags; +uint32_t zeroreqcuflags, zerofirstcuflags; +uint32_t req_caseopt, reqvary, tempreqvary; PCRE2_SIZE offset = 0; PCRE2_SIZE length_prevgroup = 0; PCRE2_UCHAR *code = *codeptr; @@ -5374,13 +5459,13 @@ item types that can be repeated set these backoff variables appropriately. */ firstcu = reqcu = zerofirstcu = zeroreqcu = 0; firstcuflags = reqcuflags = zerofirstcuflags = zeroreqcuflags = REQ_UNSET; -/* The variable req_caseopt contains either the REQ_CASELESS value or zero, +/* The variable req_caseopt contains either the REQ_CASELESS bit or zero, according to the current setting of the caseless flag. The REQ_CASELESS value leaves the lower 28 bit empty. It is added into the firstcu or reqcu variables to record the case status of the value. This is used only for ASCII characters. */ -req_caseopt = ((options & PCRE2_CASELESS) != 0)? REQ_CASELESS:0; +req_caseopt = ((options & PCRE2_CASELESS) != 0)? REQ_CASELESS : 0; /* Switch on next META item until the end of the branch */ @@ -5395,13 +5480,12 @@ for (;; pptr++) BOOL possessive_quantifier; BOOL note_group_empty; int class_has_8bitchar; - int i; uint32_t mclength; uint32_t skipunits; uint32_t subreqcu, subfirstcu; uint32_t groupnumber; uint32_t verbarglen, verbculen; - int32_t subreqcuflags, subfirstcuflags; /* Must be signed */ + uint32_t subreqcuflags, subfirstcuflags; open_capitem *oc; PCRE2_UCHAR mcbuffer[8]; @@ -5770,9 +5854,9 @@ for (;; pptr++) if (taboffset >= 0) { if (tabopt >= 0) - for (i = 0; i < 32; i++) pbits[i] |= cbits[(int)i + taboffset]; + for (int i = 0; i < 32; i++) pbits[i] |= cbits[(int)i + taboffset]; else - for (i = 0; i < 32; i++) pbits[i] &= ~cbits[(int)i + taboffset]; + for (int i = 0; i < 32; i++) pbits[i] &= ~cbits[(int)i + taboffset]; } /* Now see if we need to remove any special characters. An option @@ -5786,9 +5870,9 @@ for (;; pptr++) being built and we are done. */ if (local_negate) - for (i = 0; i < 32; i++) classbits[i] |= ~pbits[i]; + for (int i = 0; i < 32; i++) classbits[i] |= (uint8_t)(~pbits[i]); else - for (i = 0; i < 32; i++) classbits[i] |= pbits[i]; + for (int i = 0; i < 32; i++) classbits[i] |= pbits[i]; /* Every class contains at least one < 256 character. */ @@ -5827,21 +5911,23 @@ for (;; pptr++) switch(escape) { case ESC_d: - for (i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_digit]; + for (int i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_digit]; break; case ESC_D: should_flip_negation = TRUE; - for (i = 0; i < 32; i++) classbits[i] |= ~cbits[i+cbit_digit]; + for (int i = 0; i < 32; i++) + classbits[i] |= (uint8_t)(~cbits[i+cbit_digit]); break; case ESC_w: - for (i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_word]; + for (int i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_word]; break; case ESC_W: should_flip_negation = TRUE; - for (i = 0; i < 32; i++) classbits[i] |= ~cbits[i+cbit_word]; + for (int i = 0; i < 32; i++) + classbits[i] |= (uint8_t)(~cbits[i+cbit_word]); break; /* Perl 5.004 onwards omitted VT from \s, but restored it at Perl @@ -5852,12 +5938,13 @@ for (;; pptr++) longer treat \s and \S specially. */ case ESC_s: - for (i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_space]; + for (int i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_space]; break; case ESC_S: should_flip_negation = TRUE; - for (i = 0; i < 32; i++) classbits[i] |= ~cbits[i+cbit_space]; + for (int i = 0; i < 32; i++) + classbits[i] |= (uint8_t)(~cbits[i+cbit_space]); break; /* When adding the horizontal or vertical space lists to a class, or @@ -6098,7 +6185,7 @@ for (;; pptr++) if (negate_class && !xclass_has_prop) { /* Using 255 ^ instead of ~ avoids clang sanitize warning. */ - for (i = 0; i < 32; i++) classbits[i] = 255 ^ classbits[i]; + for (int i = 0; i < 32; i++) classbits[i] = 255 ^ classbits[i]; } memcpy(code, classbits, 32); code = class_uchardata + (32 / sizeof(PCRE2_UCHAR)); @@ -6124,7 +6211,7 @@ for (;; pptr++) if (negate_class) { /* Using 255 ^ instead of ~ avoids clang sanitize warning. */ - for (i = 0; i < 32; i++) classbits[i] = 255 ^ classbits[i]; + for (int i = 0; i < 32; i++) classbits[i] = 255 ^ classbits[i]; } memcpy(code, classbits, 32); } @@ -6198,7 +6285,7 @@ for (;; pptr++) verbarglen = *(++pptr); verbculen = 0; tempcode = code++; - for (i = 0; i < (int)verbarglen; i++) + for (int i = 0; i < (int)verbarglen; i++) { meta = *(++pptr); #ifdef SUPPORT_UNICODE @@ -6247,6 +6334,7 @@ for (;; pptr++) bravalue = OP_COND; { int count, index; + unsigned int i; PCRE2_SPTR name; named_group *ng = cb->named_groups; uint32_t length = *(++pptr); @@ -6286,7 +6374,7 @@ for (;; pptr++) groupnumber = 0; if (meta == META_COND_RNUMBER) { - for (i = 1; i < (int)length; i++) + for (i = 1; i < length; i++) { groupnumber = groupnumber * 10 + name[i] - CHAR_0; if (groupnumber > MAX_GROUP_NUMBER) @@ -6608,7 +6696,7 @@ for (;; pptr++) if (firstcuflags == REQ_UNSET && subfirstcuflags != REQ_UNSET) { - if (subfirstcuflags >= 0) + if (subfirstcuflags < REQ_NONE) { firstcu = subfirstcu; firstcuflags = subfirstcuflags; @@ -6622,7 +6710,7 @@ for (;; pptr++) into reqcu if there wasn't one, using the vary flag that was in existence beforehand. */ - else if (subfirstcuflags >= 0 && subreqcuflags < 0) + else if (subfirstcuflags < REQ_NONE && subreqcuflags >= REQ_NONE) { subreqcu = subfirstcu; subreqcuflags = subfirstcuflags | tempreqvary; @@ -6631,7 +6719,7 @@ for (;; pptr++) /* If the subpattern set a required code unit (or set a first code unit that isn't really the first code unit - see above), set it. */ - if (subreqcuflags >= 0) + if (subreqcuflags < REQ_NONE) { reqcu = subreqcu; reqcuflags = subreqcuflags; @@ -6650,7 +6738,7 @@ for (;; pptr++) in that example, 'X' ends up set for both. */ else if ((bravalue == OP_ASSERT || bravalue == OP_ASSERT_NA) && - subreqcuflags >= 0 && subfirstcuflags >= 0) + subreqcuflags < REQ_NONE && subfirstcuflags < REQ_NONE) { reqcu = subreqcu; reqcuflags = subreqcuflags; @@ -6680,7 +6768,7 @@ for (;; pptr++) this name is duplicated. */ groupnumber = 0; - for (i = 0; i < cb->names_found; i++, ng++) + for (unsigned int i = 0; i < cb->names_found; i++, ng++) { if (length == ng->length && PRIV(strncmp)(name, ng->name, length) == 0) @@ -6935,14 +7023,19 @@ for (;; pptr++) #endif /* MAYBE_UTF_MULTI */ /* Handle the case of a single code unit - either with no UTF support, or - with UTF disabled, or for a single-code-unit UTF character. */ + with UTF disabled, or for a single-code-unit UTF character. In the latter + case, for a repeated positive match, get the caseless flag for the + required code unit from the previous character, because a class like [Aa] + sets a caseless A but by now the req_caseopt flag has been reset. */ + { mcbuffer[0] = code[-1]; mclength = 1; if (op_previous <= OP_CHARI && repeat_min > 1) { reqcu = mcbuffer[0]; - reqcuflags = req_caseopt | cb->req_varyopt; + reqcuflags = cb->req_varyopt; + if (op_previous == OP_CHARI) reqcuflags |= REQ_CASELESS; } } goto OUTPUT_SINGLE_REPEAT; /* Code shared with single character types */ @@ -7034,7 +7127,7 @@ for (;; pptr++) *lengthptr += delta; } - else for (i = 0; i < replicate; i++) + else for (int i = 0; i < replicate; i++) { memcpy(code, previous, CU2BYTES(1 + LINK_SIZE)); previous = code; @@ -7210,12 +7303,12 @@ for (;; pptr++) else { - if (groupsetfirstcu && reqcuflags < 0) + if (groupsetfirstcu && reqcuflags >= REQ_NONE) { reqcu = firstcu; reqcuflags = firstcuflags; } - for (i = 1; (uint32_t)i < repeat_min; i++) + for (uint32_t i = 1; i < repeat_min; i++) { memcpy(code, previous, CU2BYTES(len)); code += len; @@ -7259,14 +7352,14 @@ for (;; pptr++) /* This is compiling for real */ - else for (i = repeat_max - 1; i >= 0; i--) + else for (uint32_t i = repeat_max; i >= 1; i--) { *code++ = OP_BRAZERO + repeat_type; /* All but the final copy start a new nesting, maintaining the chain of brackets outstanding. */ - if (i != 0) + if (i != 1) { int linkoffset; *code++ = OP_BRA; @@ -7985,9 +8078,9 @@ Arguments: errorcodeptr -> pointer to error code variable skipunits skip this many code units at start (for brackets and OP_COND) firstcuptr place to put the first required code unit - firstcuflagsptr place to put the first code unit flags, or a negative number + firstcuflagsptr place to put the first code unit flags reqcuptr place to put the last required code unit - reqcuflagsptr place to put the last required code unit flags, or a negative number + reqcuflagsptr place to put the last required code unit flags bcptr pointer to the chain of currently open branches cb points to the data block with tables pointers etc. lengthptr NULL during the real compile phase @@ -8001,7 +8094,7 @@ Returns: 0 There has been an error static int compile_regex(uint32_t options, PCRE2_UCHAR **codeptr, uint32_t **pptrptr, int *errorcodeptr, uint32_t skipunits, uint32_t *firstcuptr, - int32_t *firstcuflagsptr, uint32_t *reqcuptr,int32_t *reqcuflagsptr, + uint32_t *firstcuflagsptr, uint32_t *reqcuptr, uint32_t *reqcuflagsptr, branch_chain *bcptr, compile_block *cb, PCRE2_SIZE *lengthptr) { PCRE2_UCHAR *code = *codeptr; @@ -8014,9 +8107,9 @@ int okreturn = 1; uint32_t *pptr = *pptrptr; uint32_t firstcu, reqcu; uint32_t lookbehindlength; -int32_t firstcuflags, reqcuflags; +uint32_t firstcuflags, reqcuflags; uint32_t branchfirstcu, branchreqcu; -int32_t branchfirstcuflags, branchreqcuflags; +uint32_t branchfirstcuflags, branchreqcuflags; PCRE2_SIZE length; branch_chain bc; @@ -8135,9 +8228,9 @@ for (;;) if (firstcuflags != branchfirstcuflags || firstcu != branchfirstcu) { - if (firstcuflags >= 0) + if (firstcuflags < REQ_NONE) { - if (reqcuflags < 0) + if (reqcuflags >= REQ_NONE) { reqcu = firstcu; reqcuflags = firstcuflags; @@ -8149,8 +8242,8 @@ for (;;) /* If we (now or from before) have no firstcu, a firstcu from the branch becomes a reqcu if there isn't a branch reqcu. */ - if (firstcuflags < 0 && branchfirstcuflags >= 0 && - branchreqcuflags < 0) + if (firstcuflags >= REQ_NONE && branchfirstcuflags < REQ_NONE && + branchreqcuflags >= REQ_NONE) { branchreqcu = branchfirstcu; branchreqcuflags = branchfirstcuflags; @@ -8298,7 +8391,7 @@ Returns: TRUE or FALSE */ static BOOL -is_anchored(PCRE2_SPTR code, unsigned int bracket_map, compile_block *cb, +is_anchored(PCRE2_SPTR code, uint32_t bracket_map, compile_block *cb, int atomcount, BOOL inassert) { do { @@ -8321,7 +8414,7 @@ do { op == OP_SCBRA || op == OP_SCBRAPOS) { int n = GET2(scode, 1+LINK_SIZE); - int new_map = bracket_map | ((n < 32)? (1u << n) : 1); + uint32_t new_map = bracket_map | ((n < 32)? (1u << n) : 1); if (!is_anchored(scode, new_map, cb, atomcount, inassert)) return FALSE; } @@ -8681,15 +8774,15 @@ Returns: the fixed first code unit, or 0 with REQ_NONE in flags */ static uint32_t -find_firstassertedcu(PCRE2_SPTR code, int32_t *flags, uint32_t inassert) +find_firstassertedcu(PCRE2_SPTR code, uint32_t *flags, uint32_t inassert) { uint32_t c = 0; -int cflags = REQ_NONE; +uint32_t cflags = REQ_NONE; *flags = REQ_NONE; do { uint32_t d; - int dflags; + uint32_t dflags; int xl = (*code == OP_CBRA || *code == OP_SCBRA || *code == OP_CBRAPOS || *code == OP_SCBRAPOS)? IMM2_SIZE:0; PCRE2_SPTR scode = first_significant_code(code + 1+LINK_SIZE + xl, TRUE); @@ -8712,9 +8805,8 @@ do { case OP_SCRIPT_RUN: d = find_firstassertedcu(scode, &dflags, inassert + ((op == OP_ASSERT || op == OP_ASSERT_NA)?1:0)); - if (dflags < 0) - return 0; - if (cflags < 0) { c = d; cflags = dflags; } + if (dflags >= REQ_NONE) return 0; + if (cflags >= REQ_NONE) { c = d; cflags = dflags; } else if (c != d || cflags != dflags) return 0; break; @@ -8727,7 +8819,7 @@ do { case OP_MINPLUS: case OP_POSPLUS: if (inassert == 0) return 0; - if (cflags < 0) { c = scode[1]; cflags = 0; } + if (cflags >= REQ_NONE) { c = scode[1]; cflags = 0; } else if (c != scode[1]) return 0; break; @@ -8753,7 +8845,7 @@ do { #endif #endif - if (cflags < 0) { c = scode[1]; cflags = REQ_CASELESS; } + if (cflags >= REQ_NONE) { c = scode[1]; cflags = REQ_CASELESS; } else if (c != scode[1]) return 0; break; } @@ -9689,7 +9781,7 @@ PCRE2_SIZE re_blocksize; /* Size of memory block */ PCRE2_SIZE big32count = 0; /* 32-bit literals >= 0x80000000 */ PCRE2_SIZE parsed_size_needed; /* Needed for parsed pattern */ -int32_t firstcuflags, reqcuflags; /* Type of first/req code unit */ +uint32_t firstcuflags, reqcuflags; /* Type of first/req code unit */ uint32_t firstcu, reqcu; /* Value of first/req code unit */ uint32_t setflags = 0; /* NL and BSR set flags */ @@ -10369,13 +10461,13 @@ if ((re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0) (these are not saved during the compile because they can cause conflicts with actual literals that follow). */ - if (firstcuflags < 0) + if (firstcuflags >= REQ_NONE) firstcu = find_firstassertedcu(codestart, &firstcuflags, 0); /* Save the data for a first code unit. The existence of one means the minimum length must be at least 1. */ - if (firstcuflags >= 0) + if (firstcuflags < REQ_NONE) { re->first_codeunit = firstcu; re->flags |= PCRE2_FIRSTSET; @@ -10422,16 +10514,16 @@ if ((re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0) different character and not a non-starting code unit of the first character, because the minimum length count is in characters, not code units. */ - if (reqcuflags >= 0) + if (reqcuflags < REQ_NONE) { #if PCRE2_CODE_UNIT_WIDTH == 16 if ((re->overall_options & PCRE2_UTF) == 0 || /* Not UTF */ - firstcuflags < 0 || /* First not set */ + firstcuflags >= REQ_NONE || /* First not set */ (firstcu & 0xf800) != 0xd800 || /* First not surrogate */ (reqcu & 0xfc00) != 0xdc00) /* Req not low surrogate */ #elif PCRE2_CODE_UNIT_WIDTH == 8 if ((re->overall_options & PCRE2_UTF) == 0 || /* Not UTF */ - firstcuflags < 0 || /* First not set */ + firstcuflags >= REQ_NONE || /* First not set */ (firstcu & 0x80) == 0 || /* First is ASCII */ (reqcu & 0x80) == 0) /* Req is ASCII */ #endif diff --git a/src/3rdparty/pcre2/src/pcre2_dfa_match.c b/src/3rdparty/pcre2/src/pcre2_dfa_match.c index 060dc766..d29130f2 100644 --- a/src/3rdparty/pcre2/src/pcre2_dfa_match.c +++ b/src/3rdparty/pcre2/src/pcre2_dfa_match.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2021 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -1193,6 +1193,11 @@ for (;;) OK = prop->script == code[2]; break; + case PT_SCX: + OK = (prop->script == code[2] || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), code[2]) != 0); + break; + /* These are specials for combination cases. */ case PT_ALNUM: @@ -1240,6 +1245,15 @@ for (;;) c >= 0xe000; break; + case PT_BIDICL: + OK = UCD_BIDICLASS(c) == code[2]; + break; + + case PT_BOOL: + OK = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), code[2]) != 0; + break; + /* Should never occur, but keep compilers from grumbling. */ default: @@ -1451,6 +1465,11 @@ for (;;) OK = prop->script == code[3]; break; + case PT_SCX: + OK = (prop->script == code[3] || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), code[3]) != 0); + break; + /* These are specials for combination cases. */ case PT_ALNUM: @@ -1498,6 +1517,15 @@ for (;;) c >= 0xe000; break; + case PT_BIDICL: + OK = UCD_BIDICLASS(c) == code[3]; + break; + + case PT_BOOL: + OK = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), code[3]) != 0; + break; + /* Should never occur, but keep compilers from grumbling. */ default: @@ -1692,6 +1720,11 @@ for (;;) OK = prop->script == code[3]; break; + case PT_SCX: + OK = (prop->script == code[3] || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), code[3]) != 0); + break; + /* These are specials for combination cases. */ case PT_ALNUM: @@ -1739,6 +1772,15 @@ for (;;) c >= 0xe000; break; + case PT_BIDICL: + OK = UCD_BIDICLASS(c) == code[3]; + break; + + case PT_BOOL: + OK = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), code[3]) != 0; + break; + /* Should never occur, but keep compilers from grumbling. */ default: @@ -1958,6 +2000,12 @@ for (;;) OK = prop->script == code[1 + IMM2_SIZE + 2]; break; + case PT_SCX: + OK = (prop->script == code[1 + IMM2_SIZE + 2] || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), + code[1 + IMM2_SIZE + 2]) != 0); + break; + /* These are specials for combination cases. */ case PT_ALNUM: @@ -2005,6 +2053,15 @@ for (;;) c >= 0xe000; break; + case PT_BIDICL: + OK = UCD_BIDICLASS(c) == code[1 + IMM2_SIZE + 2]; + break; + + case PT_BOOL: + OK = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), code[1 + IMM2_SIZE + 2]) != 0; + break; + /* Should never occur, but keep compilers from grumbling. */ default: @@ -3285,8 +3342,15 @@ rws->next = NULL; rws->size = RWS_BASE_SIZE; rws->free = RWS_BASE_SIZE - RWS_ANCHOR_SIZE; -/* A length equal to PCRE2_ZERO_TERMINATED implies a zero-terminated -subject string. */ +/* Recognize NULL, length 0 as an empty string. */ + +if (subject == NULL && length == 0) subject = (PCRE2_SPTR)""; + +/* Plausibility checks */ + +if ((options & ~PUBLIC_DFA_MATCH_OPTIONS) != 0) return PCRE2_ERROR_BADOPTION; +if (re == NULL || subject == NULL || workspace == NULL || match_data == NULL) + return PCRE2_ERROR_NULL; if (length == PCRE2_ZERO_TERMINATED) { @@ -3294,11 +3358,6 @@ if (length == PCRE2_ZERO_TERMINATED) was_zero_terminated = 1; } -/* Plausibility checks */ - -if ((options & ~PUBLIC_DFA_MATCH_OPTIONS) != 0) return PCRE2_ERROR_BADOPTION; -if (re == NULL || subject == NULL || workspace == NULL || match_data == NULL) - return PCRE2_ERROR_NULL; if (wscount < 20) return PCRE2_ERROR_DFA_WSSIZE; if (start_offset > length) return PCRE2_ERROR_BADOFFSET; diff --git a/src/3rdparty/pcre2/src/pcre2_error.c b/src/3rdparty/pcre2/src/pcre2_error.c index 3dee63d0..09904c03 100644 --- a/src/3rdparty/pcre2/src/pcre2_error.c +++ b/src/3rdparty/pcre2/src/pcre2_error.c @@ -119,7 +119,7 @@ static const unsigned char compile_error_texts[] = /* 45 */ "this version of PCRE2 does not have support for \\P, \\p, or \\X\0" "malformed \\P or \\p sequence\0" - "unknown property name after \\P or \\p\0" + "unknown property after \\P or \\p\0" "subpattern name is too long (maximum " XSTRING(MAX_NAME_SIZE) " code units)\0" "too many named subpatterns (maximum " XSTRING(MAX_NAME_COUNT) ")\0" /* 50 */ @@ -253,7 +253,7 @@ static const unsigned char match_error_texts[] = "unknown substring\0" /* 50 */ "non-unique substring name\0" - "NULL argument passed\0" + "NULL argument passed with non-zero length\0" "nested recursion at the same subject position\0" "matching depth limit exceeded\0" "requested value is not available\0" diff --git a/src/3rdparty/pcre2/src/pcre2_extuni.c b/src/3rdparty/pcre2/src/pcre2_extuni.c index 5a719e9c..b23946b0 100644 --- a/src/3rdparty/pcre2/src/pcre2_extuni.c +++ b/src/3rdparty/pcre2/src/pcre2_extuni.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -105,7 +105,7 @@ while (eptr < end_subject) /* Not breaking between Regional Indicators is allowed only if there are an even number of preceding RIs. */ - if (lgb == ucp_gbRegionalIndicator && rgb == ucp_gbRegionalIndicator) + if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator) { int ricount = 0; PCRE2_SPTR bptr = eptr - 1; @@ -123,7 +123,7 @@ while (eptr < end_subject) } else c = *bptr; - if (UCD_GRAPHBREAK(c) != ucp_gbRegionalIndicator) break; + if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break; ricount++; } if ((ricount & 1) != 0) break; /* Grapheme break required */ diff --git a/src/3rdparty/pcre2/src/pcre2_internal.h b/src/3rdparty/pcre2/src/pcre2_internal.h index d8fad1e9..fe7a0e00 100644 --- a/src/3rdparty/pcre2/src/pcre2_internal.h +++ b/src/3rdparty/pcre2/src/pcre2_internal.h @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -954,6 +954,13 @@ a positive value. */ #define STRING_LIMIT_RECURSION_EQ "LIMIT_RECURSION=" #define STRING_MARK "MARK" +#define STRING_bc "bc" +#define STRING_bidiclass "bidiclass" +#define STRING_sc "sc" +#define STRING_script "script" +#define STRING_scriptextensions "scriptextensions" +#define STRING_scx "scx" + #else /* SUPPORT_UNICODE */ /* UTF-8 support is enabled; always use UTF-8 (=ASCII) character codes. This @@ -1248,26 +1255,39 @@ only. */ #define STRING_LIMIT_RECURSION_EQ STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_R STR_E STR_C STR_U STR_R STR_S STR_I STR_O STR_N STR_EQUALS_SIGN #define STRING_MARK STR_M STR_A STR_R STR_K +#define STRING_bc STR_b STR_c +#define STRING_bidiclass STR_b STR_i STR_d STR_i STR_c STR_l STR_a STR_s STR_s +#define STRING_sc STR_s STR_c +#define STRING_script STR_s STR_c STR_r STR_i STR_p STR_t +#define STRING_scriptextensions STR_s STR_c STR_r STR_i STR_p STR_t STR_e STR_x STR_t STR_e STR_n STR_s STR_i STR_o STR_n STR_s +#define STRING_scx STR_s STR_c STR_x + + #endif /* SUPPORT_UNICODE */ /* -------------------- End of character and string names -------------------*/ /* -------------------- Definitions for compiled patterns -------------------*/ -/* Codes for different types of Unicode property */ +/* Codes for different types of Unicode property. If these definitions are +changed, the autopossessifying table in pcre2_auto_possess.c must be updated to +match. */ #define PT_ANY 0 /* Any property - matches all chars */ #define PT_LAMP 1 /* L& - the union of Lu, Ll, Lt */ #define PT_GC 2 /* Specified general characteristic (e.g. L) */ #define PT_PC 3 /* Specified particular characteristic (e.g. Lu) */ -#define PT_SC 4 /* Script (e.g. Han) */ -#define PT_ALNUM 5 /* Alphanumeric - the union of L and N */ -#define PT_SPACE 6 /* Perl space - Z plus 9,10,12,13 */ -#define PT_PXSPACE 7 /* POSIX space - Z plus 9,10,11,12,13 */ -#define PT_WORD 8 /* Word - L plus N plus underscore */ -#define PT_CLIST 9 /* Pseudo-property: match character list */ -#define PT_UCNC 10 /* Universal Character nameable character */ -#define PT_TABSIZE 11 /* Size of square table for autopossessify tests */ +#define PT_SC 4 /* Script only (e.g. Han) */ +#define PT_SCX 5 /* Script extensions (includes SC) */ +#define PT_ALNUM 6 /* Alphanumeric - the union of L and N */ +#define PT_SPACE 7 /* Perl space - general category Z plus 9,10,12,13 */ +#define PT_PXSPACE 8 /* POSIX space - Z plus 9,10,11,12,13 */ +#define PT_WORD 9 /* Word - L plus N plus underscore */ +#define PT_CLIST 10 /* Pseudo-property: match character list */ +#define PT_UCNC 11 /* Universal Character nameable character */ +#define PT_BIDICL 12 /* Specified bidi class */ +#define PT_BOOL 13 /* Boolean property */ +#define PT_TABSIZE 14 /* Size of square table for autopossessify tests */ /* The following special properties are used only in XCLASS items, when POSIX classes are specified and PCRE2_UCP is set - in other words, for Unicode @@ -1275,22 +1295,27 @@ handling of these classes. They are not available via the \p or \P escapes like those in the above list, and so they do not take part in the autopossessifying table. */ -#define PT_PXGRAPH 11 /* [:graph:] - characters that mark the paper */ -#define PT_PXPRINT 12 /* [:print:] - [:graph:] plus non-control spaces */ -#define PT_PXPUNCT 13 /* [:punct:] - punctuation characters */ +#define PT_PXGRAPH 14 /* [:graph:] - characters that mark the paper */ +#define PT_PXPRINT 15 /* [:print:] - [:graph:] plus non-control spaces */ +#define PT_PXPUNCT 16 /* [:punct:] - punctuation characters */ + +/* This value is used when parsing \p and \P escapes to indicate that neither +\p{script:...} nor \p{scx:...} has been encountered. */ + +#define PT_NOTSCRIPT 255 /* Flag bits and data types for the extended class (OP_XCLASS) for classes that contain characters with values greater than 255. */ -#define XCL_NOT 0x01 /* Flag: this is a negative class */ -#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */ -#define XCL_HASPROP 0x04 /* Flag: property checks are present. */ +#define XCL_NOT 0x01 /* Flag: this is a negative class */ +#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */ +#define XCL_HASPROP 0x04 /* Flag: property checks are present. */ -#define XCL_END 0 /* Marks end of individual items */ -#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */ -#define XCL_RANGE 2 /* A range (two multibyte chars) follows */ -#define XCL_PROP 3 /* Unicode property (2-byte property code follows) */ -#define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */ +#define XCL_END 0 /* Marks end of individual items */ +#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */ +#define XCL_RANGE 2 /* A range (two multibyte chars) follows */ +#define XCL_PROP 3 /* Unicode property (2-byte property code follows) */ +#define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */ /* These are escaped items that aren't just an encoding of a particular data value such as \n. They must have non-zero values, as check_escape() returns 0 @@ -1797,8 +1822,8 @@ typedef struct { uint8_t gbprop; /* ucp_gbControl, etc. (grapheme break property) */ uint8_t caseset; /* offset to multichar other cases or zero */ int32_t other_case; /* offset to other case, or zero if none */ - int16_t scriptx; /* script extension value */ - int16_t dummy; /* spare - to round to multiple of 4 bytes */ + uint16_t scriptx_bidiclass; /* script extension (11 bit) and bidi class (5 bit) values */ + uint16_t bprops; /* binary properties offset */ } ucd_record; /* UCD access macros */ @@ -1815,13 +1840,30 @@ typedef struct { #define GET_UCD(ch) REAL_GET_UCD(ch) #endif +#define UCD_SCRIPTX_MASK 0x3ff +#define UCD_BIDICLASS_SHIFT 11 +#define UCD_BPROPS_MASK 0xfff + +#define UCD_SCRIPTX_PROP(prop) ((prop)->scriptx_bidiclass & UCD_SCRIPTX_MASK) +#define UCD_BIDICLASS_PROP(prop) ((prop)->scriptx_bidiclass >> UCD_BIDICLASS_SHIFT) +#define UCD_BPROPS_PROP(prop) ((prop)->bprops & UCD_BPROPS_MASK) + #define UCD_CHARTYPE(ch) GET_UCD(ch)->chartype #define UCD_SCRIPT(ch) GET_UCD(ch)->script #define UCD_CATEGORY(ch) PRIV(ucp_gentype)[UCD_CHARTYPE(ch)] #define UCD_GRAPHBREAK(ch) GET_UCD(ch)->gbprop #define UCD_CASESET(ch) GET_UCD(ch)->caseset #define UCD_OTHERCASE(ch) ((uint32_t)((int)ch + (int)(GET_UCD(ch)->other_case))) -#define UCD_SCRIPTX(ch) GET_UCD(ch)->scriptx +#define UCD_SCRIPTX(ch) UCD_SCRIPTX_PROP(GET_UCD(ch)) +#define UCD_BPROPS(ch) UCD_BPROPS_PROP(GET_UCD(ch)) +#define UCD_BIDICLASS(ch) UCD_BIDICLASS_PROP(GET_UCD(ch)) + +/* The "scriptx" and bprops fields contain offsets into vectors of 32-bit words +that form a bitmap representing a list of scripts or boolean properties. These +macros test or set a bit in the map by number. */ + +#define MAPBIT(map,n) ((map)[(n)/32]&(1u<<((n)%32))) +#define MAPSET(map,n) ((map)[(n)/32]|=(1u<<((n)%32))) /* Header for serialized pcre2 codes. */ @@ -1878,6 +1920,7 @@ extern const uint8_t PRIV(utf8_table4)[]; #endif #define _pcre2_hspace_list PCRE2_SUFFIX(_pcre2_hspace_list_) #define _pcre2_vspace_list PCRE2_SUFFIX(_pcre2_vspace_list_) +#define _pcre2_ucd_boolprop_sets PCRE2_SUFFIX(_pcre2_ucd_boolprop_sets_) #define _pcre2_ucd_caseless_sets PCRE2_SUFFIX(_pcre2_ucd_caseless_sets_) #define _pcre2_ucd_digit_sets PCRE2_SUFFIX(_pcre2_ucd_digit_sets_) #define _pcre2_ucd_script_sets PCRE2_SUFFIX(_pcre2_ucd_script_sets_) @@ -1901,9 +1944,10 @@ extern const pcre2_match_context PRIV(default_match_context); extern const uint8_t PRIV(default_tables)[]; extern const uint32_t PRIV(hspace_list)[]; extern const uint32_t PRIV(vspace_list)[]; +extern const uint32_t PRIV(ucd_boolprop_sets)[]; extern const uint32_t PRIV(ucd_caseless_sets)[]; extern const uint32_t PRIV(ucd_digit_sets)[]; -extern const uint8_t PRIV(ucd_script_sets)[]; +extern const uint32_t PRIV(ucd_script_sets)[]; extern const ucd_record PRIV(ucd_records)[]; #if PCRE2_CODE_UNIT_WIDTH == 32 extern const ucd_record PRIV(dummy_ucd_record)[]; diff --git a/src/3rdparty/pcre2/src/pcre2_intmodedep.h b/src/3rdparty/pcre2/src/pcre2_intmodedep.h index ea3b3ec6..f8a3d25d 100644 --- a/src/3rdparty/pcre2/src/pcre2_intmodedep.h +++ b/src/3rdparty/pcre2/src/pcre2_intmodedep.h @@ -519,7 +519,7 @@ it is. This is called only in UTF-32 mode - we don't put a test within the macro because almost all calls are already within a block of UTF-32 only code. -These are all no-ops since all UTF-32 characters fit into one pcre_uchar. */ +These are all no-ops since all UTF-32 characters fit into one PCRE2_UCHAR. */ #define BACKCHAR(eptr) do { } while (0) @@ -747,8 +747,8 @@ typedef struct compile_block { uint32_t class_range_start; /* Overall class range start */ uint32_t class_range_end; /* Overall class range end */ PCRE2_UCHAR nl[4]; /* Newline string when fixed length */ + uint32_t req_varyopt; /* "After variable item" flag for reqbyte */ int max_lookbehind; /* Maximum lookbehind (characters) */ - int req_varyopt; /* "After variable item" flag for reqbyte */ BOOL had_accept; /* (*ACCEPT) encountered */ BOOL had_pruneorskip; /* (*PRUNE) or (*SKIP) encountered */ BOOL had_recurse; /* Had a recursion or subroutine call */ @@ -764,7 +764,7 @@ typedef struct pcre2_real_jit_stack { } pcre2_real_jit_stack; /* Structure for items in a linked list that represents an explicit recursive -call within the pattern when running pcre_dfa_match(). */ +call within the pattern when running pcre2_dfa_match(). */ typedef struct dfa_recursion_info { struct dfa_recursion_info *prevrec; @@ -838,6 +838,17 @@ multiple of PCRE2_SIZE. See various comments above. */ typedef char check_heapframe_size[ ((sizeof(heapframe) % sizeof(PCRE2_SIZE)) == 0)? (+1):(-1)]; +/* Structure for computing the alignment of heapframe. */ + +typedef struct heapframe_align { + char unalign; /* Completely unalign the current offset */ + heapframe frame; /* Offset is its alignment */ +} heapframe_align; + +/* This define is the minimum alignment required for a heapframe, in bytes. */ + +#define HEAPFRAME_ALIGNMENT offsetof(heapframe_align, frame) + /* Structure for passing "static" information around between the functions doing traditional NFA matching (pcre2_match() and friends). */ diff --git a/src/3rdparty/pcre2/src/pcre2_jit_compile.c b/src/3rdparty/pcre2/src/pcre2_jit_compile.c index db2ce655..d726c3ca 100644 --- a/src/3rdparty/pcre2/src/pcre2_jit_compile.c +++ b/src/3rdparty/pcre2/src/pcre2_jit_compile.c @@ -8,7 +8,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel This module by Zoltan Herczeg Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -413,6 +413,9 @@ typedef struct compiler_common { /* Locals used by fast fail optimization. */ sljit_s32 early_fail_start_ptr; sljit_s32 early_fail_end_ptr; + /* Variables used by recursive call generator. */ + sljit_s32 recurse_bitset_size; + uint8_t *recurse_bitset; /* Flipped and lower case tables. */ const sljit_u8 *fcc; @@ -613,6 +616,8 @@ the start pointers when the end of the capturing group has not yet reached. */ sljit_emit_op1(compiler, (op), (dst), (dstw), (src), (srcw)) #define OP2(op, dst, dstw, src1, src1w, src2, src2w) \ sljit_emit_op2(compiler, (op), (dst), (dstw), (src1), (src1w), (src2), (src2w)) +#define OP2U(op, src1, src1w, src2, src2w) \ + sljit_emit_op2u(compiler, (op), (src1), (src1w), (src2), (src2w)) #define OP_SRC(op, src, srcw) \ sljit_emit_op_src(compiler, (op), (src), (srcw)) #define LABEL() \ @@ -1621,7 +1626,7 @@ if (end[-(1 + LINK_SIZE)] != OP_KET || PRIVATE_DATA(begin) != 0) /* /(?:AB){4,6}/ is currently converted to /(?:AB){3}(?AB){1,3}/ * Skip the check of the second part. */ -if (PRIVATE_DATA(end - LINK_SIZE) == 0) +if (PRIVATE_DATA(end - LINK_SIZE) != 0) return TRUE; next = end; @@ -2315,22 +2320,47 @@ for (i = 0; i < RECURSE_TMP_REG_COUNT; i++) #undef RECURSE_TMP_REG_COUNT -static int get_recurse_data_length(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, - BOOL *needs_control_head, BOOL *has_quit, BOOL *has_accept) +static BOOL recurse_check_bit(compiler_common *common, sljit_sw bit_index) +{ +uint8_t *byte; +uint8_t mask; + +SLJIT_ASSERT((bit_index & (sizeof(sljit_sw) - 1)) == 0); + +bit_index >>= SLJIT_WORD_SHIFT; + +SLJIT_ASSERT((bit_index >> 3) < common->recurse_bitset_size); + +mask = 1 << (bit_index & 0x7); +byte = common->recurse_bitset + (bit_index >> 3); + +if (*byte & mask) + return FALSE; + +*byte |= mask; +return TRUE; +} + +enum get_recurse_flags { + recurse_flag_quit_found = (1 << 0), + recurse_flag_accept_found = (1 << 1), + recurse_flag_setsom_found = (1 << 2), + recurse_flag_setmark_found = (1 << 3), + recurse_flag_control_head_found = (1 << 4), +}; + +static int get_recurse_data_length(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, uint32_t *result_flags) { int length = 1; -int size; +int size, offset; PCRE2_SPTR alternative; -BOOL quit_found = FALSE; -BOOL accept_found = FALSE; -BOOL setsom_found = FALSE; -BOOL setmark_found = FALSE; -BOOL capture_last_found = FALSE; -BOOL control_head_found = FALSE; +uint32_t recurse_flags = 0; + +memset(common->recurse_bitset, 0, common->recurse_bitset_size); #if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD SLJIT_ASSERT(common->control_head_ptr != 0); -control_head_found = TRUE; +recurse_flags |= recurse_flag_control_head_found; #endif /* Calculate the sum of the private machine words. */ @@ -2341,24 +2371,26 @@ while (cc < ccend) { case OP_SET_SOM: SLJIT_ASSERT(common->has_set_som); - setsom_found = TRUE; + recurse_flags |= recurse_flag_setsom_found; cc += 1; break; case OP_RECURSE: if (common->has_set_som) - setsom_found = TRUE; + recurse_flags |= recurse_flag_setsom_found; if (common->mark_ptr != 0) - setmark_found = TRUE; - if (common->capture_last_ptr != 0) - capture_last_found = TRUE; + recurse_flags |= recurse_flag_setmark_found; + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) + length++; cc += 1 + LINK_SIZE; break; case OP_KET: - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0) { - length++; + if (recurse_check_bit(common, offset)) + length++; SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0); cc += PRIVATE_DATA(cc + 1); } @@ -2377,39 +2409,55 @@ while (cc < ccend) case OP_SBRA: case OP_SBRAPOS: case OP_SCOND: - length++; SLJIT_ASSERT(PRIVATE_DATA(cc) != 0); + if (recurse_check_bit(common, PRIVATE_DATA(cc))) + length++; cc += 1 + LINK_SIZE; break; case OP_CBRA: case OP_SCBRA: - length += 2; - if (common->capture_last_ptr != 0) - capture_last_found = TRUE; - if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) + offset = GET2(cc, 1 + LINK_SIZE); + if (recurse_check_bit(common, OVECTOR(offset << 1))) + { + SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1))); + length += 2; + } + if (common->optimized_cbracket[offset] == 0 && recurse_check_bit(common, OVECTOR_PRIV(offset))) + length++; + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) length++; cc += 1 + LINK_SIZE + IMM2_SIZE; break; case OP_CBRAPOS: case OP_SCBRAPOS: - length += 2 + 2; - if (common->capture_last_ptr != 0) - capture_last_found = TRUE; + offset = GET2(cc, 1 + LINK_SIZE); + if (recurse_check_bit(common, OVECTOR(offset << 1))) + { + SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1))); + length += 2; + } + if (recurse_check_bit(common, OVECTOR_PRIV(offset))) + length++; + if (recurse_check_bit(common, PRIVATE_DATA(cc))) + length++; + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) + length++; cc += 1 + LINK_SIZE + IMM2_SIZE; break; case OP_COND: /* Might be a hidden SCOND. */ alternative = cc + GET(cc, 1); - if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) + if ((*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) && recurse_check_bit(common, PRIVATE_DATA(cc))) length++; cc += 1 + LINK_SIZE; break; CASE_ITERATOR_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) length++; cc += 2; #ifdef SUPPORT_UNICODE @@ -2418,8 +2466,12 @@ while (cc < ccend) break; CASE_ITERATOR_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) + { + SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); length += 2; + } cc += 2; #ifdef SUPPORT_UNICODE if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); @@ -2427,8 +2479,12 @@ while (cc < ccend) break; CASE_ITERATOR_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) + { + SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); length += 2; + } cc += 2 + IMM2_SIZE; #ifdef SUPPORT_UNICODE if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); @@ -2436,20 +2492,29 @@ while (cc < ccend) break; CASE_ITERATOR_TYPE_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) length++; cc += 1; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) + { + SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); length += 2; + } cc += 1; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc) != 0) + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) + { + SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw))); length += 2; + } cc += 1 + IMM2_SIZE; break; @@ -2461,7 +2526,9 @@ while (cc < ccend) #else size = 1 + 32 / (int)sizeof(PCRE2_UCHAR); #endif - if (PRIVATE_DATA(cc) != 0) + + offset = PRIVATE_DATA(cc); + if (offset != 0 && recurse_check_bit(common, offset)) length += get_class_iterator_size(cc + size); cc += size; break; @@ -2471,12 +2538,11 @@ while (cc < ccend) case OP_PRUNE_ARG: case OP_THEN_ARG: SLJIT_ASSERT(common->mark_ptr != 0); - if (!setmark_found) - setmark_found = TRUE; + recurse_flags |= recurse_flag_setmark_found; if (common->control_head_ptr != 0) - control_head_found = TRUE; + recurse_flags |= recurse_flag_control_head_found; if (*cc != OP_MARK) - quit_found = TRUE; + recurse_flags |= recurse_flag_quit_found; cc += 1 + 2 + cc[1]; break; @@ -2484,26 +2550,24 @@ while (cc < ccend) case OP_PRUNE: case OP_SKIP: case OP_COMMIT: - quit_found = TRUE; + recurse_flags |= recurse_flag_quit_found; cc++; break; case OP_SKIP_ARG: - quit_found = TRUE; + recurse_flags |= recurse_flag_quit_found; cc += 1 + 2 + cc[1]; break; case OP_THEN: SLJIT_ASSERT(common->control_head_ptr != 0); - quit_found = TRUE; - if (!control_head_found) - control_head_found = TRUE; + recurse_flags |= recurse_flag_quit_found | recurse_flag_control_head_found; cc++; break; case OP_ACCEPT: case OP_ASSERT_ACCEPT: - accept_found = TRUE; + recurse_flags |= recurse_flag_accept_found; cc++; break; @@ -2515,21 +2579,17 @@ while (cc < ccend) } SLJIT_ASSERT(cc == ccend); -if (control_head_found) +if (recurse_flags & recurse_flag_control_head_found) length++; -if (capture_last_found) - length++; -if (quit_found) +if (recurse_flags & recurse_flag_quit_found) { - if (setsom_found) + if (recurse_flags & recurse_flag_setsom_found) length++; - if (setmark_found) + if (recurse_flags & recurse_flag_setmark_found) length++; } -*needs_control_head = control_head_found; -*has_quit = quit_found; -*has_accept = accept_found; +*result_flags = recurse_flags; return length; } @@ -2542,7 +2602,7 @@ enum copy_recurse_data_types { }; static void copy_recurse_data(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, - int type, int stackptr, int stacktop, BOOL has_quit) + int type, int stackptr, int stacktop, uint32_t recurse_flags) { delayed_mem_copy_status status; PCRE2_SPTR alternative; @@ -2551,14 +2611,12 @@ sljit_sw shared_srcw[3]; sljit_sw kept_shared_srcw[2]; int private_count, shared_count, kept_shared_count; int from_sp, base_reg, offset, i; -BOOL setsom_found = FALSE; -BOOL setmark_found = FALSE; -BOOL capture_last_found = FALSE; -BOOL control_head_found = FALSE; + +memset(common->recurse_bitset, 0, common->recurse_bitset_size); #if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD SLJIT_ASSERT(common->control_head_ptr != 0); -control_head_found = TRUE; +recurse_check_bit(common, common->control_head_ptr); #endif switch (type) @@ -2646,45 +2704,42 @@ while (cc < ccend) { case OP_SET_SOM: SLJIT_ASSERT(common->has_set_som); - if (has_quit && !setsom_found) + if ((recurse_flags & recurse_flag_quit_found) && recurse_check_bit(common, OVECTOR(0))) { kept_shared_srcw[0] = OVECTOR(0); kept_shared_count = 1; - setsom_found = TRUE; } cc += 1; break; case OP_RECURSE: - if (has_quit) + if (recurse_flags & recurse_flag_quit_found) { - if (common->has_set_som && !setsom_found) + if (common->has_set_som && recurse_check_bit(common, OVECTOR(0))) { kept_shared_srcw[0] = OVECTOR(0); kept_shared_count = 1; - setsom_found = TRUE; } - if (common->mark_ptr != 0 && !setmark_found) + if (common->mark_ptr != 0 && recurse_check_bit(common, common->mark_ptr)) { kept_shared_srcw[kept_shared_count] = common->mark_ptr; kept_shared_count++; - setmark_found = TRUE; } } - if (common->capture_last_ptr != 0 && !capture_last_found) + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) { shared_srcw[0] = common->capture_last_ptr; shared_count = 1; - capture_last_found = TRUE; } cc += 1 + LINK_SIZE; break; case OP_KET: - if (PRIVATE_DATA(cc) != 0) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0) { - private_count = 1; - private_srcw[0] = PRIVATE_DATA(cc); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0); cc += PRIVATE_DATA(cc + 1); } @@ -2703,50 +2758,66 @@ while (cc < ccend) case OP_SBRA: case OP_SBRAPOS: case OP_SCOND: - private_count = 1; private_srcw[0] = PRIVATE_DATA(cc); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; cc += 1 + LINK_SIZE; break; case OP_CBRA: case OP_SCBRA: - offset = (GET2(cc, 1 + LINK_SIZE)) << 1; - shared_srcw[0] = OVECTOR(offset); - shared_srcw[1] = OVECTOR(offset + 1); - shared_count = 2; - - if (common->capture_last_ptr != 0 && !capture_last_found) + offset = GET2(cc, 1 + LINK_SIZE); + shared_srcw[0] = OVECTOR(offset << 1); + if (recurse_check_bit(common, shared_srcw[0])) { - shared_srcw[2] = common->capture_last_ptr; - shared_count = 3; - capture_last_found = TRUE; + shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1])); + shared_count = 2; } - if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0) + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) { - private_count = 1; - private_srcw[0] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); + shared_srcw[shared_count] = common->capture_last_ptr; + shared_count++; } + + if (common->optimized_cbracket[offset] == 0) + { + private_srcw[0] = OVECTOR_PRIV(offset); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; + } + cc += 1 + LINK_SIZE + IMM2_SIZE; break; case OP_CBRAPOS: case OP_SCBRAPOS: - offset = (GET2(cc, 1 + LINK_SIZE)) << 1; - shared_srcw[0] = OVECTOR(offset); - shared_srcw[1] = OVECTOR(offset + 1); - shared_count = 2; - - if (common->capture_last_ptr != 0 && !capture_last_found) + offset = GET2(cc, 1 + LINK_SIZE); + shared_srcw[0] = OVECTOR(offset << 1); + if (recurse_check_bit(common, shared_srcw[0])) { - shared_srcw[2] = common->capture_last_ptr; - shared_count = 3; - capture_last_found = TRUE; + shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1])); + shared_count = 2; + } + + if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr)) + { + shared_srcw[shared_count] = common->capture_last_ptr; + shared_count++; } - private_count = 2; private_srcw[0] = PRIVATE_DATA(cc); - private_srcw[1] = OVECTOR_PRIV(GET2(cc, 1 + LINK_SIZE)); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; + + offset = OVECTOR_PRIV(offset); + if (recurse_check_bit(common, offset)) + { + private_srcw[private_count] = offset; + private_count++; + } cc += 1 + LINK_SIZE + IMM2_SIZE; break; @@ -2755,18 +2826,17 @@ while (cc < ccend) alternative = cc + GET(cc, 1); if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) { - private_count = 1; private_srcw[0] = PRIVATE_DATA(cc); + if (recurse_check_bit(common, private_srcw[0])) + private_count = 1; } cc += 1 + LINK_SIZE; break; CASE_ITERATOR_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc)) - { + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) private_count = 1; - private_srcw[0] = PRIVATE_DATA(cc); - } cc += 2; #ifdef SUPPORT_UNICODE if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]); @@ -2774,11 +2844,12 @@ while (cc < ccend) break; CASE_ITERATOR_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc)) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) { private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); - private_srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); + private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); } cc += 2; #ifdef SUPPORT_UNICODE @@ -2787,11 +2858,12 @@ while (cc < ccend) break; CASE_ITERATOR_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc)) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) { private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); - private_srcw[1] = PRIVATE_DATA(cc) + sizeof(sljit_sw); + private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); } cc += 2 + IMM2_SIZE; #ifdef SUPPORT_UNICODE @@ -2800,30 +2872,30 @@ while (cc < ccend) break; CASE_ITERATOR_TYPE_PRIVATE_DATA_1 - if (PRIVATE_DATA(cc)) - { + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) private_count = 1; - private_srcw[0] = PRIVATE_DATA(cc); - } cc += 1; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_2A - if (PRIVATE_DATA(cc)) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) { private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); } cc += 1; break; CASE_ITERATOR_TYPE_PRIVATE_DATA_2B - if (PRIVATE_DATA(cc)) + private_srcw[0] = PRIVATE_DATA(cc); + if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0])) { private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); } cc += 1 + IMM2_SIZE; break; @@ -2837,23 +2909,28 @@ while (cc < ccend) i = 1 + 32 / (int)sizeof(PCRE2_UCHAR); #endif if (PRIVATE_DATA(cc) != 0) + { + private_count = 1; + private_srcw[0] = PRIVATE_DATA(cc); switch(get_class_iterator_size(cc + i)) { case 1: - private_count = 1; - private_srcw[0] = PRIVATE_DATA(cc); break; case 2: - private_count = 2; - private_srcw[0] = PRIVATE_DATA(cc); - private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + if (recurse_check_bit(common, private_srcw[0])) + { + private_count = 2; + private_srcw[1] = private_srcw[0] + sizeof(sljit_sw); + SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1])); + } break; default: SLJIT_UNREACHABLE(); break; } + } cc += i; break; @@ -2862,28 +2939,25 @@ while (cc < ccend) case OP_PRUNE_ARG: case OP_THEN_ARG: SLJIT_ASSERT(common->mark_ptr != 0); - if (has_quit && !setmark_found) + if ((recurse_flags & recurse_flag_quit_found) && recurse_check_bit(common, common->mark_ptr)) { kept_shared_srcw[0] = common->mark_ptr; kept_shared_count = 1; - setmark_found = TRUE; } - if (common->control_head_ptr != 0 && !control_head_found) + if (common->control_head_ptr != 0 && recurse_check_bit(common, common->control_head_ptr)) { private_srcw[0] = common->control_head_ptr; private_count = 1; - control_head_found = TRUE; } cc += 1 + 2 + cc[1]; break; case OP_THEN: SLJIT_ASSERT(common->control_head_ptr != 0); - if (!control_head_found) + if (recurse_check_bit(common, common->control_head_ptr)) { private_srcw[0] = common->control_head_ptr; private_count = 1; - control_head_found = TRUE; } cc++; break; @@ -2891,7 +2965,7 @@ while (cc < ccend) default: cc = next_opcode(common, cc); SLJIT_ASSERT(cc != NULL); - break; + continue; } if (type != recurse_copy_shared_to_global && type != recurse_copy_kept_shared_to_global) @@ -3743,9 +3817,9 @@ if (common->invalid_utf) else { OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800); - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x110000); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); } } @@ -3982,7 +4056,7 @@ if (common->utf) { if (options & READ_CHAR_UPDATE_STR_PTR) OP2(SLJIT_ADD, RETURN_ADDR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x400); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0x400); if (options & READ_CHAR_UPDATE_STR_PTR) CMOV(SLJIT_LESS, STR_PTR, RETURN_ADDR, 0); if (max >= 0xd800) @@ -4010,9 +4084,9 @@ if (common->invalid_utf) else { OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800); - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x110000); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); } } @@ -4167,7 +4241,7 @@ if (common->utf && negated) if (sljit_has_cpu_feature(SLJIT_HAS_CMOV) && !HAS_VIRTUAL_REGISTERS) { OP2(SLJIT_ADD, RETURN_ADDR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x400); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0x400); CMOV(SLJIT_LESS, STR_PTR, RETURN_ADDR, 0); } else @@ -4250,7 +4324,7 @@ if (common->utf) /* Skip low surrogate if necessary. */ OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xdc00); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0xdc00); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP1, 0); @@ -4267,7 +4341,7 @@ if (common->invalid_utf && !must_be_valid) return; } - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x110000); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x110000); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_LESS); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP1, 0); @@ -4332,7 +4406,7 @@ OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); /* Searching for the first zero. */ -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); /* Two byte sequence. */ OP2(SLJIT_XOR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x3000); @@ -4345,7 +4419,7 @@ OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6); OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x10000); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x10000); jump = JUMP(SLJIT_NOT_ZERO); /* Three byte sequence. */ OP2(SLJIT_XOR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xe0000); @@ -4373,7 +4447,7 @@ struct sljit_jump *compare; sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x20); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, 0x20); jump = JUMP(SLJIT_NOT_ZERO); /* Two byte sequence. */ OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); @@ -4432,7 +4506,7 @@ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); exit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); @@ -4447,14 +4521,14 @@ OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x40); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, 0x20000); exit_invalid[2] = NULL; } else exit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x10000); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x10000); jump = JUMP(SLJIT_NOT_ZERO); three_byte_entry = LABEL(); @@ -4462,7 +4536,7 @@ three_byte_entry = LABEL(); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x2d800); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR - 0xd800); exit_invalid[3] = NULL; } @@ -4473,7 +4547,7 @@ OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); exit_invalid[4] = NULL; } @@ -4490,7 +4564,7 @@ OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x40); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, 0); exit_invalid[5] = NULL; } @@ -4500,7 +4574,7 @@ else OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xc10000); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x100000); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR - 0x10000); exit_invalid[6] = NULL; } @@ -4522,7 +4596,7 @@ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); exit_invalid[8] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x800); jump = JUMP(SLJIT_NOT_ZERO); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); @@ -4537,7 +4611,7 @@ OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x40); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); exit_invalid[10] = NULL; } @@ -4830,7 +4904,7 @@ OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, -0xd800); exit_invalid[2] = NULL; } @@ -4840,7 +4914,7 @@ else OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x800); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800); CMOV(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR); exit_invalid[3] = NULL; } @@ -4865,7 +4939,7 @@ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); if (has_cmov) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x100000); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000); CMOV(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR - 0x10000); exit_invalid[5] = NULL; } @@ -4968,7 +5042,7 @@ OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); exit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xdc00); OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xdc00); -OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, 0x400); +OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0x400); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0x10000); OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -5239,7 +5313,7 @@ if (newlinecheck) OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); end = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, common->newline & 0xff); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, common->newline & 0xff); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); #if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -5304,12 +5378,12 @@ else if (common->utf) if (sljit_has_cpu_feature(SLJIT_HAS_CMOV)) { OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x400); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x400); CMOV(SLJIT_LESS, STR_PTR, TMP2, 0); } else { - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x400); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x400); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_LESS); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); @@ -5860,7 +5934,7 @@ if (has_match_end) OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offset + 1)); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_END, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_END, 0, TMP1, 0); CMOV(SLJIT_GREATER, STR_END, TMP1, 0); } @@ -6063,7 +6137,7 @@ if (common->match_end_ptr != 0) OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP2(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max)); add_jump(compiler, &common->failed_match, JUMP(SLJIT_LESS)); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_END, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_END, 0, TMP1, 0); CMOV(SLJIT_GREATER, STR_END, TMP1, 0); } else @@ -6200,7 +6274,7 @@ if (common->nltype == NLTYPE_FIXED && common->newline > 255) firstchar = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0); OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, STR_PTR, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_Z, STR_PTR, 0, TMP1, 0); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_NOT_EQUAL); #if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -6228,7 +6302,7 @@ if (common->nltype == NLTYPE_FIXED && common->newline > 255) firstchar = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(2)); - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, STR_PTR, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, STR_PTR, 0, TMP1, 0); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER_EQUAL); #if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -6293,7 +6367,7 @@ if (JIT_HAS_FAST_FORWARD_CHAR_SIMD && (common->nltype == NLTYPE_FIXED || common- OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); if (common->mode != PCRE2_JIT_COMPLETE) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } } @@ -6319,7 +6393,7 @@ if (common->nltype == NLTYPE_ANY || common->nltype == NLTYPE_ANYCRLF) notfoundnl = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, CHAR_NL); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_NL); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); #if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT); @@ -6355,7 +6429,7 @@ if (common->match_end_ptr != 0) OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); OP1(SLJIT_MOV, RETURN_ADDR, 0, STR_END, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_END, 0, TMP1, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_END, 0, TMP1, 0); CMOV(SLJIT_GREATER, STR_END, TMP1, 0); } @@ -6385,12 +6459,12 @@ if (!optimize_class(common, start_bits, (start_bits[31] & 0x80) != 0, FALSE, &ma if (!HAS_VIRTUAL_REGISTERS) { OP2(SLJIT_SHL, TMP3, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP3, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP3, 0); } else { OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0); } JUMPTO(SLJIT_ZERO, start); } @@ -6525,7 +6599,7 @@ jump = CMP(SLJIT_NOT_ZERO /* SIG_LESS */, TMP2, 0, SLJIT_IMM, 0); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); JUMPHERE(jump); -OP1(SLJIT_NEG, TMP2, 0, TMP2, 0); +OP2(SLJIT_SUB, TMP2, 0, SLJIT_IMM, 0, TMP2, 0); OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); if (HAS_VIRTUAL_REGISTERS) { @@ -6600,10 +6674,10 @@ if (common->ucp) jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_UNDERSCORE); add_jump(compiler, &common->getucdtype, JUMP(SLJIT_FAST_CALL)); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Nd - ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); JUMPHERE(jump); OP1(SLJIT_MOV, TMP3, 0, TMP2, 0); @@ -6646,10 +6720,10 @@ if (common->ucp) jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_UNDERSCORE); add_jump(compiler, &common->getucdtype, JUMP(SLJIT_FAST_CALL)); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ucp_Nd - ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); JUMPHERE(jump); } @@ -6916,7 +6990,7 @@ j = 0; if (char_list[0] == 0) { i++; - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_ZERO); } else @@ -6928,7 +7002,7 @@ while (i < len) j++; else { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, char_list[i]); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, char_list[i]); CMOV(SLJIT_ZERO, TMP2, TMP1, 0); } i++; @@ -6942,7 +7016,7 @@ if (j != 0) if ((char_list[i] & 0x100) != 0) { j--; - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, char_list[i] & 0xff); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, char_list[i] & 0xff); CMOV(SLJIT_ZERO, TMP2, TMP1, 0); } } @@ -6971,9 +7045,9 @@ DEFINE_COMPILER; sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x0a); -OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); +OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); #if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 #if PCRE2_CODE_UNIT_WIDTH == 8 if (common->utf) @@ -6981,7 +7055,7 @@ if (common->utf) #endif OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x1); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); #if PCRE2_CODE_UNIT_WIDTH == 8 } #endif @@ -6997,29 +7071,29 @@ DEFINE_COMPILER; sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x09); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x09); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x20); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x20); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xa0); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0xa0); #if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 #if PCRE2_CODE_UNIT_WIDTH == 8 if (common->utf) { #endif OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x1680); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x1680); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x180e); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x2000); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x200A - 0x2000); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x200A - 0x2000); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x202f - 0x2000); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x202f - 0x2000); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x205f - 0x2000); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x205f - 0x2000); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x3000 - 0x2000); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x3000 - 0x2000); #if PCRE2_CODE_UNIT_WIDTH == 8 } #endif @@ -7037,9 +7111,9 @@ DEFINE_COMPILER; sljit_emit_fast_enter(compiler, RETURN_ADDR, 0); OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x0a); -OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); +OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x0d - 0x0a); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); -OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); +OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x85 - 0x0a); #if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 #if PCRE2_CODE_UNIT_WIDTH == 8 if (common->utf) @@ -7047,7 +7121,7 @@ if (common->utf) #endif OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x1); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x2029 - 0x0a); #if PCRE2_CODE_UNIT_WIDTH == 8 } #endif @@ -7412,6 +7486,21 @@ return cc; static PCRE2_SPTR compile_char1_matchingpath(compiler_common *common, PCRE2_UCHAR type, PCRE2_SPTR cc, jump_list **backtracks, BOOL check_str_ptr); +#ifdef SUPPORT_UNICODE +#define XCLASS_SAVE_CHAR 0x001 +#define XCLASS_CHAR_SAVED 0x002 +#define XCLASS_HAS_TYPE 0x004 +#define XCLASS_HAS_SCRIPT 0x008 +#define XCLASS_HAS_SCRIPT_EXTENSION 0x010 +#define XCLASS_HAS_BOOL 0x020 +#define XCLASS_HAS_BIDICL 0x040 +#define XCLASS_NEEDS_UCD (XCLASS_HAS_TYPE | XCLASS_HAS_SCRIPT | XCLASS_HAS_SCRIPT_EXTENSION | XCLASS_HAS_BOOL | XCLASS_HAS_BIDICL) +#define XCLASS_SCRIPT_EXTENSION_NOTPROP 0x080 +#define XCLASS_SCRIPT_EXTENSION_RESTORE_RETURN_ADDR 0x100 +#define XCLASS_SCRIPT_EXTENSION_RESTORE_LOCALS0 0x200 + +#endif /* SUPPORT_UNICODE */ + static void compile_xclass_matchingpath(compiler_common *common, PCRE2_SPTR cc, jump_list **backtracks) { DEFINE_COMPILER; @@ -7426,8 +7515,7 @@ BOOL utf = common->utf; #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == [8|16] */ #ifdef SUPPORT_UNICODE -BOOL needstype = FALSE, needsscript = FALSE, needschar = FALSE; -BOOL charsaved = FALSE; +sljit_u32 unicode_status = 0; int typereg = TMP1; const sljit_u32 *other_cases; sljit_uw typeoffset; @@ -7454,7 +7542,7 @@ while (*cc != XCL_END) if (c > max) max = c; if (c < min) min = c; #ifdef SUPPORT_UNICODE - needschar = TRUE; + unicode_status |= XCLASS_SAVE_CHAR; #endif /* SUPPORT_UNICODE */ } else if (*cc == XCL_RANGE) @@ -7465,7 +7553,7 @@ while (*cc != XCL_END) GETCHARINCTEST(c, cc); if (c > max) max = c; #ifdef SUPPORT_UNICODE - needschar = TRUE; + unicode_status |= XCLASS_SAVE_CHAR; #endif /* SUPPORT_UNICODE */ } #ifdef SUPPORT_UNICODE @@ -7473,7 +7561,7 @@ while (*cc != XCL_END) { SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); cc++; - if (*cc == PT_CLIST) + if (*cc == PT_CLIST && cc[-1] == XCL_PROP) { other_cases = PRIV(ucd_caseless_sets) + cc[1]; while (*other_cases != NOTACHAR) @@ -7506,11 +7594,21 @@ while (*cc != XCL_END) case PT_GC: case PT_PC: case PT_ALNUM: - needstype = TRUE; + unicode_status |= XCLASS_HAS_TYPE; break; + case PT_SCX: + unicode_status |= XCLASS_HAS_SCRIPT_EXTENSION; + if (cc[-1] == XCL_NOTPROP) + { + unicode_status |= XCLASS_SCRIPT_EXTENSION_NOTPROP; + break; + } + compares++; + /* Fall through */ + case PT_SC: - needsscript = TRUE; + unicode_status |= XCLASS_HAS_SCRIPT; break; case PT_SPACE: @@ -7519,13 +7617,20 @@ while (*cc != XCL_END) case PT_PXGRAPH: case PT_PXPRINT: case PT_PXPUNCT: - needstype = TRUE; - needschar = TRUE; + unicode_status |= XCLASS_SAVE_CHAR | XCLASS_HAS_TYPE; break; case PT_CLIST: case PT_UCNC: - needschar = TRUE; + unicode_status |= XCLASS_SAVE_CHAR; + break; + + case PT_BOOL: + unicode_status |= XCLASS_HAS_BOOL; + break; + + case PT_BIDICL: + unicode_status |= XCLASS_HAS_BIDICL; break; default: @@ -7545,7 +7650,7 @@ if ((cc[-1] & XCL_NOT) != 0) else { #ifdef SUPPORT_UNICODE - read_char(common, min, max, (needstype || needsscript) ? backtracks : NULL, 0); + read_char(common, min, max, (unicode_status & XCLASS_NEEDS_UCD) ? backtracks : NULL, 0); #else /* !SUPPORT_UNICODE */ read_char(common, min, max, NULL, 0); #endif /* SUPPORT_UNICODE */ @@ -7562,7 +7667,7 @@ if ((cc[-1] & XCL_HASPROP) == 0) OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0); add_jump(compiler, &found, JUMP(SLJIT_NOT_ZERO)); } @@ -7581,7 +7686,7 @@ else if ((cc[-1] & XCL_MAP) != 0) { OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0); #ifdef SUPPORT_UNICODE - charsaved = TRUE; + unicode_status |= XCLASS_CHAR_SAVED; #endif /* SUPPORT_UNICODE */ if (!optimize_class(common, (const sljit_u8 *)cc, FALSE, TRUE, list)) { @@ -7595,7 +7700,7 @@ else if ((cc[-1] & XCL_MAP) != 0) OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0); add_jump(compiler, list, JUMP(SLJIT_NOT_ZERO)); #if PCRE2_CODE_UNIT_WIDTH == 8 @@ -7609,9 +7714,9 @@ else if ((cc[-1] & XCL_MAP) != 0) } #ifdef SUPPORT_UNICODE -if (needstype || needsscript) +if (unicode_status & XCLASS_NEEDS_UCD) { - if (needschar && !charsaved) + if ((unicode_status & (XCLASS_SAVE_CHAR | XCLASS_CHAR_SAVED)) == XCLASS_SAVE_CHAR) OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0); #if PCRE2_CODE_UNIT_WIDTH == 32 @@ -7631,17 +7736,16 @@ if (needstype || needsscript) OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_stage2)); OP1(SLJIT_MOV_U16, TMP2, 0, SLJIT_MEM2(TMP2, TMP1), 1); + OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 3); + OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2); + OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); - /* Before anything else, we deal with scripts. */ - if (needsscript) + ccbegin = cc; + + if (unicode_status & XCLASS_HAS_BIDICL) { - OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 3); - OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2); - OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); - - OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script)); - - ccbegin = cc; + OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, scriptx_bidiclass)); + OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BIDICLASS_SHIFT); while (*cc != XCL_END) { @@ -7660,7 +7764,7 @@ if (needstype || needsscript) { SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); cc++; - if (*cc == PT_SC) + if (*cc == PT_BIDICL) { compares--; invertcmp = (compares == 0 && list != backtracks); @@ -7674,52 +7778,176 @@ if (needstype || needsscript) } cc = ccbegin; + } - if (needstype) + if (unicode_status & XCLASS_HAS_BOOL) + { + OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, bprops)); + OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BPROPS_MASK); + OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 2); + + while (*cc != XCL_END) { - /* TMP2 has already been shifted by 2 */ - if (!needschar) + if (*cc == XCL_SINGLE) { - OP2(SLJIT_ADD, TMP1, 0, TMP2, 0, TMP2, 0); - OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); - - OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); + cc ++; + GETCHARINCTEST(c, cc); + } + else if (*cc == XCL_RANGE) + { + cc ++; + GETCHARINCTEST(c, cc); + GETCHARINCTEST(c, cc); } else { - OP2(SLJIT_ADD, TMP1, 0, TMP2, 0, TMP2, 0); - OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); + SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); + cc++; + if (*cc == PT_BOOL) + { + compares--; + invertcmp = (compares == 0 && list != backtracks); + if (cc[-1] == XCL_NOTPROP) + invertcmp ^= 0x1; - OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); - OP1(SLJIT_MOV_U8, RETURN_ADDR, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); - typereg = RETURN_ADDR; + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_boolprop_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)1 << (cc[1] & 0x1f)); + add_jump(compiler, compares > 0 ? list : backtracks, JUMP(SLJIT_NOT_ZERO ^ invertcmp)); + } + cc += 2; } } - else if (needschar) - OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); + + cc = ccbegin; } - else if (needstype) + + if (unicode_status & XCLASS_HAS_SCRIPT) { - OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 3); - OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2); + OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script)); - if (!needschar) + while (*cc != XCL_END) { - OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); + if (*cc == XCL_SINGLE) + { + cc ++; + GETCHARINCTEST(c, cc); + } + else if (*cc == XCL_RANGE) + { + cc ++; + GETCHARINCTEST(c, cc); + GETCHARINCTEST(c, cc); + } + else + { + SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); + cc++; + switch (*cc) + { + case PT_SCX: + if (cc[-1] == XCL_NOTPROP) + break; + /* Fall through */ - OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); - } - else - { - OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0); + case PT_SC: + compares--; + invertcmp = (compares == 0 && list != backtracks); + if (cc[-1] == XCL_NOTPROP) + invertcmp ^= 0x1; - OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); - OP1(SLJIT_MOV_U8, RETURN_ADDR, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); - typereg = RETURN_ADDR; + add_jump(compiler, compares > 0 ? list : backtracks, CMP(SLJIT_EQUAL ^ invertcmp, TMP1, 0, SLJIT_IMM, (int)cc[1])); + } + cc += 2; + } } + + cc = ccbegin; } - else if (needschar) + + if (unicode_status & XCLASS_HAS_SCRIPT_EXTENSION) + { + OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, scriptx_bidiclass)); + OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_SCRIPTX_MASK); + OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 2); + + if (unicode_status & XCLASS_SCRIPT_EXTENSION_NOTPROP) + { + if (unicode_status & XCLASS_HAS_TYPE) + { + if (unicode_status & XCLASS_SAVE_CHAR) + { + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, TMP2, 0); + unicode_status |= XCLASS_SCRIPT_EXTENSION_RESTORE_LOCALS0; + } + else + { + OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP2, 0); + unicode_status |= XCLASS_SCRIPT_EXTENSION_RESTORE_RETURN_ADDR; + } + } + OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script)); + } + + while (*cc != XCL_END) + { + if (*cc == XCL_SINGLE) + { + cc ++; + GETCHARINCTEST(c, cc); + } + else if (*cc == XCL_RANGE) + { + cc ++; + GETCHARINCTEST(c, cc); + GETCHARINCTEST(c, cc); + } + else + { + SLJIT_ASSERT(*cc == XCL_PROP || *cc == XCL_NOTPROP); + cc++; + if (*cc == PT_SCX) + { + compares--; + invertcmp = (compares == 0 && list != backtracks); + + jump = NULL; + if (cc[-1] == XCL_NOTPROP) + { + jump = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, (int)cc[1]); + if (invertcmp) + { + add_jump(compiler, backtracks, jump); + jump = NULL; + } + invertcmp ^= 0x1; + } + + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_script_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)1 << (cc[1] & 0x1f)); + add_jump(compiler, compares > 0 ? list : backtracks, JUMP(SLJIT_NOT_ZERO ^ invertcmp)); + + if (jump != NULL) + JUMPHERE(jump); + } + cc += 2; + } + } + + if (unicode_status & XCLASS_SCRIPT_EXTENSION_RESTORE_LOCALS0) + OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0); + else if (unicode_status & XCLASS_SCRIPT_EXTENSION_RESTORE_RETURN_ADDR) + OP1(SLJIT_MOV, TMP2, 0, RETURN_ADDR, 0); + cc = ccbegin; + } + + if (unicode_status & XCLASS_SAVE_CHAR) OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0); + + if (unicode_status & XCLASS_HAS_TYPE) + { + if (unicode_status & XCLASS_SAVE_CHAR) + typereg = RETURN_ADDR; + + OP1(SLJIT_MOV_U8, typereg, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype)); + } } #endif /* SUPPORT_UNICODE */ @@ -7743,13 +7971,13 @@ while (*cc != XCL_END) if (numberofcmps < 3 && (*cc == XCL_SINGLE || *cc == XCL_RANGE)) { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); OP_FLAGS(numberofcmps == 0 ? SLJIT_MOV : SLJIT_OR, TMP2, 0, SLJIT_EQUAL); numberofcmps++; } else if (numberofcmps > 0) { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); numberofcmps = 0; @@ -7769,13 +7997,13 @@ while (*cc != XCL_END) if (numberofcmps < 3 && (*cc == XCL_SINGLE || *cc == XCL_RANGE)) { - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); OP_FLAGS(numberofcmps == 0 ? SLJIT_MOV : SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); numberofcmps++; } else if (numberofcmps > 0) { - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw)(c - charoffset)); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); numberofcmps = 0; @@ -7801,11 +8029,11 @@ while (*cc != XCL_END) break; case PT_LAMP: - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lu - typeoffset); + OP2U(SLJIT_SUB | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, ucp_Lu - typeoffset); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Ll - typeoffset); + OP2U(SLJIT_SUB | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, ucp_Ll - typeoffset); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lt - typeoffset); + OP2U(SLJIT_SUB | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, ucp_Lt - typeoffset); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -7821,6 +8049,9 @@ while (*cc != XCL_END) break; case PT_SC: + case PT_SCX: + case PT_BOOL: + case PT_BIDICL: compares++; /* Do nothing. */ break; @@ -7828,32 +8059,32 @@ while (*cc != XCL_END) case PT_SPACE: case PT_PXSPACE: SET_CHAR_OFFSET(9); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd - 0x9); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0xd - 0x9); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x85 - 0x9); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x85 - 0x9); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e - 0x9); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x180e - 0x9); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); SET_TYPE_OFFSET(ucp_Zl); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Zl); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Zl); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; case PT_WORD: - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_UNDERSCORE - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_UNDERSCORE - charoffset)); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); /* Fall through. */ case PT_ALNUM: SET_TYPE_OFFSET(ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_Lu - ucp_Ll); OP_FLAGS((*cc == PT_ALNUM) ? SLJIT_MOV : SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); SET_TYPE_OFFSET(ucp_Nd); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_No - ucp_Nd); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_No - ucp_Nd); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -7876,7 +8107,7 @@ while (*cc != XCL_END) OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)charoffset); OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, other_cases[1] ^ other_cases[0]); } - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[1]); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, other_cases[1]); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); other_cases += 2; } @@ -7889,41 +8120,41 @@ while (*cc != XCL_END) OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)charoffset); OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, other_cases[1] ^ other_cases[0]); } - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, other_cases[2]); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, other_cases[2]); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(other_cases[0] - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(other_cases[0] - charoffset)); OP_FLAGS(SLJIT_OR | ((other_cases[3] == NOTACHAR) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_EQUAL); other_cases += 3; } else { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); } while (*other_cases != NOTACHAR) { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++ - charoffset)); OP_FLAGS(SLJIT_OR | ((*other_cases == NOTACHAR) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_EQUAL); } jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; case PT_UCNC: - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_DOLLAR_SIGN - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_DOLLAR_SIGN - charoffset)); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_COMMERCIAL_AT - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_COMMERCIAL_AT - charoffset)); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_GRAVE_ACCENT - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_GRAVE_ACCENT - charoffset)); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); SET_CHAR_OFFSET(0xa0); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(0xd7ff - charoffset)); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw)(0xd7ff - charoffset)); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL); SET_CHAR_OFFSET(0); - OP2(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xe000 - 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xe000 - 0); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_GREATER_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -7931,20 +8162,20 @@ while (*cc != XCL_END) case PT_PXGRAPH: /* C and Z groups are the farthest two groups. */ SET_TYPE_OFFSET(ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER); jump = CMP(SLJIT_NOT_EQUAL, typereg, 0, SLJIT_IMM, ucp_Cf - ucp_Ll); /* In case of ucp_Cf, we overwrite the result. */ SET_CHAR_OFFSET(0x2066); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x180e - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x180e - 0x2066); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); JUMPHERE(jump); @@ -7954,20 +8185,20 @@ while (*cc != XCL_END) case PT_PXPRINT: /* C and Z groups are the farthest two groups. */ SET_TYPE_OFFSET(ucp_Ll); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, typereg, 0, SLJIT_IMM, ucp_So - ucp_Ll); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Ll); + OP2U(SLJIT_SUB | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, ucp_Zs - ucp_Ll); OP_FLAGS(SLJIT_AND, TMP2, 0, SLJIT_NOT_EQUAL); jump = CMP(SLJIT_NOT_EQUAL, typereg, 0, SLJIT_IMM, ucp_Cf - ucp_Ll); /* In case of ucp_Cf, we overwrite the result. */ SET_CHAR_OFFSET(0x2066); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066); OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL); JUMPHERE(jump); @@ -7976,15 +8207,15 @@ while (*cc != XCL_END) case PT_PXPUNCT: SET_TYPE_OFFSET(ucp_Sc); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_So - ucp_Sc); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_So - ucp_Sc); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL); SET_CHAR_OFFSET(0); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0x7f); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x7f); OP_FLAGS(SLJIT_AND, TMP2, 0, SLJIT_LESS_EQUAL); SET_TYPE_OFFSET(ucp_Pc); - OP2(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, SLJIT_UNUSED, 0, typereg, 0, SLJIT_IMM, ucp_Ps - ucp_Pc); + OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, typereg, 0, SLJIT_IMM, ucp_Ps - ucp_Pc); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_LESS_EQUAL); jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp); break; @@ -8069,9 +8300,9 @@ switch(type) else { jump[1] = CMP(SLJIT_EQUAL, TMP2, 0, STR_END, 0); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP2, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, STR_END, 0); OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff); OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_NOT_EQUAL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_EQUAL)); check_partial(common, TRUE); @@ -8094,7 +8325,7 @@ switch(type) OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); jump[1] = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR); OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2)); - OP2(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, TMP2, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_GREATER, TMP2, 0, STR_END, 0); jump[2] = JUMP(SLJIT_GREATER); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_EQUAL) /* LESS */); /* Equal. */ @@ -8137,10 +8368,10 @@ switch(type) if (HAS_VIRTUAL_REGISTERS) { OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); } else - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); if (!common->endonly) @@ -8157,10 +8388,10 @@ switch(type) if (HAS_VIRTUAL_REGISTERS) { OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); } else - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); check_partial(common, FALSE); jump[0] = JUMP(SLJIT_JUMP); @@ -8200,14 +8431,14 @@ switch(type) OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, begin)); add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0)); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); } else { OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin)); add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0)); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); } return cc; @@ -8219,13 +8450,13 @@ switch(type) OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, begin)); jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); } else { OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin)); jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0); - OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); + OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL); } add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO)); jump[0] = JUMP(SLJIT_JUMP); @@ -8319,7 +8550,7 @@ do /* Not breaking between Regional Indicators is allowed only if there are an even number of preceding RIs. */ - if (lgb == ucp_gbRegionalIndicator && rgb == ucp_gbRegionalIndicator) + if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator) { ricount = 0; bptr = prevcc; @@ -8331,7 +8562,7 @@ do BACKCHAR(bptr); GETCHAR(c, bptr); - if (UCD_GRAPHBREAK(c) != ucp_gbRegionalIndicator) + if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break; ricount++; @@ -8387,7 +8618,7 @@ do /* Not breaking between Regional Indicators is allowed only if there are an even number of preceding RIs. */ - if (lgb == ucp_gbRegionalIndicator && rgb == ucp_gbRegionalIndicator) + if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator) { ricount = 0; bptr = prevcc; @@ -8397,7 +8628,7 @@ do { GETCHARBACK_INVALID(c, bptr, start_subject, break); - if (UCD_GRAPHBREAK(c) != ucp_gbRegionalIndicator) + if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break; ricount++; @@ -8455,7 +8686,7 @@ while (cc < end_subject) /* Not breaking between Regional Indicators is allowed only if there are an even number of preceding RIs. */ - if (lgb == ucp_gbRegionalIndicator && rgb == ucp_gbRegionalIndicator) + if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator) { ricount = 0; bptr = cc - 1; @@ -8470,7 +8701,7 @@ while (cc < end_subject) break; #endif /* PCRE2_CODE_UNIT_WIDTH == 32 */ - if (UCD_GRAPHBREAK(c) != ucp_gbRegionalIndicator) break; + if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break; ricount++; } @@ -8520,7 +8751,7 @@ switch(type) #endif read_char8_type(common, backtracks, type == OP_NOT_DIGIT); /* Flip the starting bit in the negative case. */ - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_digit); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, ctype_digit); add_jump(compiler, backtracks, JUMP(type == OP_DIGIT ? SLJIT_ZERO : SLJIT_NOT_ZERO)); return cc; @@ -8534,7 +8765,7 @@ switch(type) else #endif read_char8_type(common, backtracks, type == OP_NOT_WHITESPACE); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_space); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, ctype_space); add_jump(compiler, backtracks, JUMP(type == OP_WHITESPACE ? SLJIT_ZERO : SLJIT_NOT_ZERO)); return cc; @@ -8548,7 +8779,7 @@ switch(type) else #endif read_char8_type(common, backtracks, type == OP_NOT_WORDCHAR); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ctype_word); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, ctype_word); add_jump(compiler, backtracks, JUMP(type == OP_WORDCHAR ? SLJIT_ZERO : SLJIT_NOT_ZERO)); return cc; @@ -8596,7 +8827,7 @@ switch(type) #elif PCRE2_CODE_UNIT_WIDTH == 16 jump[0] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xd800); OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00); - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, 0xd800); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0xd800); OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL); OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0); @@ -8690,13 +8921,13 @@ switch(type) OP1(SLJIT_MOV, SLJIT_R0, 0, ARGUMENTS, 0); #if PCRE2_CODE_UNIT_WIDTH != 32 - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, - common->utf ? (common->invalid_utf ? SLJIT_FUNC_OFFSET(do_extuni_utf_invalid) : SLJIT_FUNC_OFFSET(do_extuni_utf)) : SLJIT_FUNC_OFFSET(do_extuni_no_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, + common->utf ? (common->invalid_utf ? SLJIT_FUNC_ADDR(do_extuni_utf_invalid) : SLJIT_FUNC_ADDR(do_extuni_utf)) : SLJIT_FUNC_ADDR(do_extuni_no_utf)); if (common->invalid_utf) add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0)); #else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, - common->invalid_utf ? SLJIT_FUNC_OFFSET(do_extuni_utf_invalid) : SLJIT_FUNC_OFFSET(do_extuni_no_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, + common->invalid_utf ? SLJIT_FUNC_ADDR(do_extuni_utf_invalid) : SLJIT_FUNC_ADDR(do_extuni_no_utf)); if (!common->utf || common->invalid_utf) add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0)); #endif @@ -8758,7 +8989,7 @@ switch(type) if (sljit_has_cpu_feature(SLJIT_HAS_CMOV)) { - OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, oc); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, oc); CMOV(SLJIT_EQUAL, TMP1, SLJIT_IMM, c); add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, c)); } @@ -8878,7 +9109,7 @@ switch(type) OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3); OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc); OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP1, 0, TMP2, 0); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0); add_jump(compiler, backtracks, JUMP(SLJIT_ZERO)); #if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8 @@ -9116,7 +9347,7 @@ if (common->utf && *cc == OP_REFI) caseless_loop = LABEL(); OP1(SLJIT_MOV_U32, TMP1, 0, SLJIT_MEM1(TMP2), 0); OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, sizeof(uint32_t)); - OP2(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, char1_reg, 0); + OP2U(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_LESS, TMP1, 0, char1_reg, 0); JUMPTO(SLJIT_EQUAL, loop); JUMPTO(SLJIT_LESS, caseless_loop); @@ -9575,12 +9806,12 @@ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STR_PTR, 0); /* SLJIT_R0 = arguments */ OP1(SLJIT_MOV, SLJIT_R1, 0, STACK_TOP, 0); GET_LOCAL_BASE(SLJIT_R2, 0, OVECTOR_START); -sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(S32) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(do_callout)); +sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS3(32, W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(do_callout)); OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0); free_stack(common, callout_arg_size); /* Check return value. */ -OP2(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); +OP2U(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER)); if (common->abort_label == NULL) add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL) /* SIG_LESS */); @@ -10148,10 +10379,10 @@ SLJIT_ASSERT(TMP1 == SLJIT_R0 && STR_PTR == SLJIT_R1); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); #ifdef SUPPORT_UNICODE -sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, - common->utf ? SLJIT_FUNC_OFFSET(do_script_run_utf) : SLJIT_FUNC_OFFSET(do_script_run)); +sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, + common->utf ? SLJIT_FUNC_ADDR(do_script_run_utf) : SLJIT_FUNC_ADDR(do_script_run)); #else -sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(do_script_run)); +sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(do_script_run)); #endif OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_RETURN_REG, 0); @@ -11374,7 +11605,7 @@ switch(opcode) if (common->mode == PCRE2_JIT_COMPLETE) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } else @@ -11667,7 +11898,7 @@ switch(opcode) if (common->mode == PCRE2_JIT_COMPLETE) { - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } else @@ -11751,9 +11982,9 @@ if (HAS_VIRTUAL_REGISTERS) else OP1(SLJIT_MOV_U32, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options)); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY); add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_NOT_ZERO)); -OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART); +OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART); if (common->accept_label == NULL) add_jump(compiler, &common->accept, JUMP(SLJIT_ZERO)); else @@ -13004,7 +13235,7 @@ if (opcode == OP_SKIP_ARG) SLJIT_ASSERT(common->control_head_ptr != 0 && TMP1 == SLJIT_R0 && STR_PTR == SLJIT_R1); OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr); OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_IMM, (sljit_sw)(current->cc + 2)); - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(do_search_mark)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(do_search_mark)); OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_R0, 0); add_jump(compiler, &common->reset_match, CMP(SLJIT_NOT_EQUAL, SLJIT_R0, 0, SLJIT_IMM, 0)); @@ -13248,10 +13479,8 @@ DEFINE_COMPILER; PCRE2_SPTR cc = common->start + common->currententry->start; PCRE2_SPTR ccbegin = cc + 1 + LINK_SIZE + (*cc == OP_BRA ? 0 : IMM2_SIZE); PCRE2_SPTR ccend = bracketend(cc) - (1 + LINK_SIZE); -BOOL needs_control_head; -BOOL has_quit; -BOOL has_accept; -int private_data_size = get_recurse_data_length(common, ccbegin, ccend, &needs_control_head, &has_quit, &has_accept); +uint32_t recurse_flags = 0; +int private_data_size = get_recurse_data_length(common, ccbegin, ccend, &recurse_flags); int alt_count, alt_max, local_size; backtrack_common altbacktrack; jump_list *match = NULL; @@ -13285,12 +13514,12 @@ allocate_stack(common, private_data_size + local_size); /* Save return address. */ OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1), TMP2, 0); -copy_recurse_data(common, ccbegin, ccend, recurse_copy_from_global, local_size, private_data_size + local_size, has_quit); +copy_recurse_data(common, ccbegin, ccend, recurse_copy_from_global, local_size, private_data_size + local_size, recurse_flags); /* This variable is saved and restored all time when we enter or exit from a recursive context. */ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr, STACK_TOP, 0); -if (needs_control_head) +if (recurse_flags & recurse_flag_control_head_found) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0); if (alt_max > 1) @@ -13315,10 +13544,10 @@ while (1) if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) return; - allocate_stack(common, (alt_max > 1 || has_accept) ? 2 : 1); + allocate_stack(common, (alt_max > 1 || (recurse_flags & recurse_flag_accept_found)) ? 2 : 1); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr); - if (alt_max > 1 || has_accept) + if (alt_max > 1 || (recurse_flags & recurse_flag_accept_found)) { if (alt_max > 3) put_label = sljit_emit_put_label(compiler, SLJIT_MEM1(STACK_TOP), STACK(1)); @@ -13337,14 +13566,14 @@ while (1) sljit_emit_fast_enter(compiler, TMP1, 0); - if (has_accept) + if (recurse_flags & recurse_flag_accept_found) accept_exit = CMP(SLJIT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, -1); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(0)); /* Save return address. */ OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), STACK(local_size - 1), TMP1, 0); - copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, has_quit); + copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, recurse_flags); if (alt_max > 1) { @@ -13361,7 +13590,7 @@ while (1) next_alt = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0); } else - free_stack(common, has_accept ? 2 : 1); + free_stack(common, (recurse_flags & recurse_flag_accept_found) ? 2 : 1); } else if (alt_max > 3) { @@ -13396,7 +13625,7 @@ while (1) quit = LABEL(); -copy_recurse_data(common, ccbegin, ccend, recurse_copy_private_to_global, local_size, private_data_size + local_size, has_quit); +copy_recurse_data(common, ccbegin, ccend, recurse_copy_private_to_global, local_size, private_data_size + local_size, recurse_flags); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1)); free_stack(common, private_data_size + local_size); @@ -13405,15 +13634,15 @@ OP_SRC(SLJIT_FAST_RETURN, TMP2, 0); if (common->quit != NULL) { - SLJIT_ASSERT(has_quit); + SLJIT_ASSERT(recurse_flags & recurse_flag_quit_found); set_jumps(common->quit, LABEL()); OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr); - copy_recurse_data(common, ccbegin, ccend, recurse_copy_shared_to_global, local_size, private_data_size + local_size, has_quit); + copy_recurse_data(common, ccbegin, ccend, recurse_copy_shared_to_global, local_size, private_data_size + local_size, recurse_flags); JUMPTO(SLJIT_JUMP, quit); } -if (has_accept) +if (recurse_flags & recurse_flag_accept_found) { JUMPHERE(accept_exit); free_stack(common, 2); @@ -13421,7 +13650,7 @@ if (has_accept) /* Save return address. */ OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1), TMP1, 0); - copy_recurse_data(common, ccbegin, ccend, recurse_copy_kept_shared_to_global, local_size, private_data_size + local_size, has_quit); + copy_recurse_data(common, ccbegin, ccend, recurse_copy_kept_shared_to_global, local_size, private_data_size + local_size, recurse_flags); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1)); free_stack(common, private_data_size + local_size); @@ -13431,7 +13660,7 @@ if (has_accept) if (common->accept != NULL) { - SLJIT_ASSERT(has_accept); + SLJIT_ASSERT(recurse_flags & recurse_flag_accept_found); set_jumps(common->accept, LABEL()); @@ -13446,7 +13675,7 @@ set_jumps(match, LABEL()); OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0); -copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, has_quit); +copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, recurse_flags); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP2), STACK(local_size - 1)); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1); @@ -13652,7 +13881,7 @@ SLJIT_ASSERT(!(common->req_char_ptr != 0 && common->start_used_ptr != 0)); common->cbra_ptr = OVECTOR_START + (re->top_bracket + 1) * 2 * sizeof(sljit_sw); total_length = ccend - common->start; -common->private_data_ptrs = (sljit_s32 *)SLJIT_MALLOC(total_length * (sizeof(sljit_s32) + (common->has_then ? 1 : 0)), allocator_data); +common->private_data_ptrs = (sljit_s32*)SLJIT_MALLOC(total_length * (sizeof(sljit_s32) + (common->has_then ? 1 : 0)), allocator_data); if (!common->private_data_ptrs) { SLJIT_FREE(common->optimized_cbracket, allocator_data); @@ -13692,8 +13921,9 @@ if (!compiler) } common->compiler = compiler; -/* Main pcre_jit_exec entry. */ -sljit_emit_enter(compiler, 0, SLJIT_ARG1(SW), 5, 5, 0, 0, private_data_size); +/* Main pcre2_jit_exec entry. */ +SLJIT_ASSERT((private_data_size & (sizeof(sljit_sw) - 1)) == 0); +sljit_emit_enter(compiler, 0, SLJIT_ARGS1(W, W), 5, 5, 0, 0, private_data_size); /* Register init. */ reset_ovector(common, (re->top_bracket + 1) * 2); @@ -13900,9 +14130,9 @@ if (common->might_be_empty) JUMPHERE(empty_match); OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0); OP1(SLJIT_MOV_U32, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, options)); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY); JUMPTO(SLJIT_NOT_ZERO, empty_match_backtrack_label); - OP2(SLJIT_AND | SLJIT_SET_Z, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART); + OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART); JUMPTO(SLJIT_ZERO, empty_match_found_label); OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str)); CMPTO(SLJIT_NOT_EQUAL, TMP2, 0, STR_PTR, 0, empty_match_found_label); @@ -13915,20 +14145,40 @@ common->early_fail_end_ptr = 0; common->currententry = common->entries; common->local_quit_available = TRUE; quit_label = common->quit_label; -while (common->currententry != NULL) +if (common->currententry != NULL) { - /* Might add new entries. */ - compile_recurse(common); - if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) + /* A free bit for each private data. */ + common->recurse_bitset_size = ((private_data_size / (int)sizeof(sljit_sw)) + 7) >> 3; + SLJIT_ASSERT(common->recurse_bitset_size > 0); + common->recurse_bitset = (sljit_u8*)SLJIT_MALLOC(common->recurse_bitset_size, allocator_data);; + + if (common->recurse_bitset != NULL) { + do + { + /* Might add new entries. */ + compile_recurse(common); + if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) + break; + flush_stubs(common); + common->currententry = common->currententry->next; + } + while (common->currententry != NULL); + + SLJIT_FREE(common->recurse_bitset, allocator_data); + } + + if (common->currententry != NULL) + { + /* The common->recurse_bitset has been freed. */ + SLJIT_ASSERT(sljit_get_compiler_error(compiler) || common->recurse_bitset == NULL); + sljit_free_compiler(compiler); SLJIT_FREE(common->optimized_cbracket, allocator_data); SLJIT_FREE(common->private_data_ptrs, allocator_data); PRIV(jit_free_rodata)(common->read_only_data_head, allocator_data); return PCRE2_ERROR_NOMEMORY; } - flush_stubs(common); - common->currententry = common->currententry->next; } common->local_quit_available = FALSE; common->quit_label = quit_label; @@ -13947,7 +14197,7 @@ OP2(SLJIT_SUB, SLJIT_R1, 0, STACK_LIMIT, 0, SLJIT_IMM, STACK_GROWTH_RATE); OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, stack)); OP1(SLJIT_MOV, STACK_LIMIT, 0, TMP2, 0); -sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW), SLJIT_IMM, SLJIT_FUNC_OFFSET(sljit_stack_resize)); +sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(sljit_stack_resize)); jump = CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0); OP1(SLJIT_MOV, TMP2, 0, STACK_LIMIT, 0); diff --git a/src/3rdparty/pcre2/src/pcre2_jit_match.c b/src/3rdparty/pcre2/src/pcre2_jit_match.c index 7e13b8cf..1ab3af07 100644 --- a/src/3rdparty/pcre2/src/pcre2_jit_match.c +++ b/src/3rdparty/pcre2/src/pcre2_jit_match.c @@ -120,7 +120,7 @@ else if ((options & PCRE2_PARTIAL_SOFT) != 0) if (functions == NULL || functions->executable_funcs[index] == NULL) return PCRE2_ERROR_JIT_BADOPTION; -/* Sanity checks should be handled by pcre_exec. */ +/* Sanity checks should be handled by pcre2_match. */ arguments.str = subject + start_offset; arguments.begin = subject; arguments.end = subject + length; diff --git a/src/3rdparty/pcre2/src/pcre2_jit_misc.c b/src/3rdparty/pcre2/src/pcre2_jit_misc.c index ec924e0f..e57afad0 100644 --- a/src/3rdparty/pcre2/src/pcre2_jit_misc.c +++ b/src/3rdparty/pcre2/src/pcre2_jit_misc.c @@ -135,7 +135,7 @@ return NULL; pcre2_jit_stack *jit_stack; -if (startsize < 1 || maxsize < 1) +if (startsize == 0 || maxsize == 0 || maxsize > SIZE_MAX - STACK_GROWTH_RATE) return NULL; if (startsize > maxsize) startsize = maxsize; diff --git a/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h b/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h index aa029cce..d99cfc5c 100644 --- a/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h +++ b/src/3rdparty/pcre2/src/pcre2_jit_simd_inc.h @@ -339,7 +339,7 @@ if (common->mode != PCRE2_JIT_COMPLETE) { JUMPHERE(partial_quit[0]); JUMPHERE(partial_quit[1]); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } else @@ -537,7 +537,7 @@ if (common->match_end_ptr != 0) OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0); CMOV(SLJIT_LESS, STR_END, TMP1, 0); } @@ -883,14 +883,14 @@ if (char1 == char2) #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf && offset > 0) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_utf)); else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs)); #else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs)); #endif } else @@ -904,14 +904,14 @@ else #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf && offset > 0) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_mask_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask_utf)); else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_mask)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask)); #else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_mask)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_mask)); #endif } else @@ -922,14 +922,14 @@ else #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf && offset > 0) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_2_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2_utf)); else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_2)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2)); #else - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(UW) | SLJIT_ARG3(UW) | SLJIT_ARG4(UW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcs_2)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcs_2)); #endif } } @@ -1067,7 +1067,7 @@ else OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr); OP2(SLJIT_ADD, SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, STR_END, 0, SLJIT_R0, 0); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, SLJIT_R0, 0); CMOV(SLJIT_LESS, SLJIT_R0, STR_END, 0); } @@ -1084,31 +1084,31 @@ if (diff == 1) { if (char1a == char1b && char2a == char2b) { #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_0_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_0_utf)); else #endif - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_0)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_0)); } else { #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_1_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_1_utf)); else #endif - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_1)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_1)); } } else { #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 if (common->utf) - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_default_utf)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_default_utf)); else #endif - sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_RET(SW) | SLJIT_ARG1(SW) | SLJIT_ARG2(SW) | SLJIT_ARG3(SW) | SLJIT_ARG4(SW), - SLJIT_IMM, SLJIT_FUNC_OFFSET(ffcps_default)); + sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS4(W, W, W, W, W), + SLJIT_IMM, SLJIT_FUNC_ADDR(ffcps_default)); } /* Restore STR_PTR register. */ @@ -1418,7 +1418,7 @@ if (common->mode != PCRE2_JIT_COMPLETE) { JUMPHERE(partial_quit[0]); JUMPHERE(partial_quit[1]); - OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0); CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0); } else @@ -1673,7 +1673,7 @@ if (common->match_end_ptr != 0) OP1(SLJIT_MOV, TMP3, 0, STR_END, 0); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1)); - OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0); + OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0); CMOV(SLJIT_LESS, STR_END, TMP1, 0); } diff --git a/src/3rdparty/pcre2/src/pcre2_match.c b/src/3rdparty/pcre2/src/pcre2_match.c index f28cdbb4..6354e1bb 100644 --- a/src/3rdparty/pcre2/src/pcre2_match.c +++ b/src/3rdparty/pcre2/src/pcre2_match.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2015-2021 University of Cambridge + New API code Copyright (c) 2015-2022 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -49,7 +49,7 @@ POSSIBILITY OF SUCH DAMAGE. /* #define DEBUG_SHOW_OPS */ /* #define DEBUG_SHOW_RMATCH */ -#ifdef DEBUG_FRAME_DISPLAY +#ifdef DEBUG_FRAMES_DISPLAY #include #endif @@ -159,7 +159,8 @@ enum { RM100=100, RM101 }; #ifdef SUPPORT_UNICODE enum { RM200=200, RM201, RM202, RM203, RM204, RM205, RM206, RM207, RM208, RM209, RM210, RM211, RM212, RM213, RM214, RM215, - RM216, RM217, RM218, RM219, RM220, RM221, RM222 }; + RM216, RM217, RM218, RM219, RM220, RM221, RM222, RM223, + RM224, RM225 }; #endif /* Define short names for general fields in the current backtrack frame, which @@ -2421,40 +2422,49 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { const uint32_t *cp; const ucd_record *prop = GET_UCD(fc); + BOOL notmatch = Fop == OP_NOTPROP; switch(Fecode[1]) { case PT_ANY: - if (Fop == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); break; case PT_LAMP: if ((prop->chartype == ucp_Lu || prop->chartype == ucp_Ll || - prop->chartype == ucp_Lt) == (Fop == OP_NOTPROP)) + prop->chartype == ucp_Lt) == notmatch) RRETURN(MATCH_NOMATCH); break; case PT_GC: - if ((Fecode[2] != PRIV(ucp_gentype)[prop->chartype]) == (Fop == OP_PROP)) + if ((Fecode[2] == PRIV(ucp_gentype)[prop->chartype]) == notmatch) RRETURN(MATCH_NOMATCH); break; case PT_PC: - if ((Fecode[2] != prop->chartype) == (Fop == OP_PROP)) + if ((Fecode[2] == prop->chartype) == notmatch) RRETURN(MATCH_NOMATCH); break; case PT_SC: - if ((Fecode[2] != prop->script) == (Fop == OP_PROP)) + if ((Fecode[2] == prop->script) == notmatch) RRETURN(MATCH_NOMATCH); break; + case PT_SCX: + { + BOOL ok = (Fecode[2] == prop->script || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Fecode[2]) != 0); + if (ok == notmatch) RRETURN(MATCH_NOMATCH); + } + break; + /* These are specials */ case PT_ALNUM: if ((PRIV(ucp_gentype)[prop->chartype] == ucp_L || - PRIV(ucp_gentype)[prop->chartype] == ucp_N) == (Fop == OP_NOTPROP)) + PRIV(ucp_gentype)[prop->chartype] == ucp_N) == notmatch) RRETURN(MATCH_NOMATCH); break; @@ -2468,12 +2478,12 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { HSPACE_CASES: VSPACE_CASES: - if (Fop == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); break; default: - if ((PRIV(ucp_gentype)[prop->chartype] == ucp_Z) == - (Fop == OP_NOTPROP)) RRETURN(MATCH_NOMATCH); + if ((PRIV(ucp_gentype)[prop->chartype] == ucp_Z) == notmatch) + RRETURN(MATCH_NOMATCH); break; } break; @@ -2481,7 +2491,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); case PT_WORD: if ((PRIV(ucp_gentype)[prop->chartype] == ucp_L || PRIV(ucp_gentype)[prop->chartype] == ucp_N || - fc == CHAR_UNDERSCORE) == (Fop == OP_NOTPROP)) + fc == CHAR_UNDERSCORE) == notmatch) RRETURN(MATCH_NOMATCH); break; @@ -2490,19 +2500,32 @@ fprintf(stderr, "++ op=%d\n", *Fecode); for (;;) { if (fc < *cp) - { if (Fop == OP_PROP) { RRETURN(MATCH_NOMATCH); } else break; } + { if (notmatch) break; else { RRETURN(MATCH_NOMATCH); } } if (fc == *cp++) - { if (Fop == OP_PROP) break; else { RRETURN(MATCH_NOMATCH); } } + { if (notmatch) { RRETURN(MATCH_NOMATCH); } else break; } } break; case PT_UCNC: if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT || fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) || - fc >= 0xe000) == (Fop == OP_NOTPROP)) + fc >= 0xe000) == notmatch) RRETURN(MATCH_NOMATCH); break; + case PT_BIDICL: + if ((UCD_BIDICLASS_PROP(prop) == Fecode[2]) == notmatch) + RRETURN(MATCH_NOMATCH); + break; + + case PT_BOOL: + { + BOOL ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), Fecode[2]) != 0; + if (ok == notmatch) RRETURN(MATCH_NOMATCH); + } + break; + /* This should never occur */ default: @@ -2616,18 +2639,20 @@ fprintf(stderr, "++ op=%d\n", *Fecode); /* First, ensure the minimum number of matches are present. Use inline code for maximizing the speed, and do the type test once at the start - (i.e. keep it out of the loop). The code for UTF mode is separated out for - tidiness, except for Unicode property tests. */ + (i.e. keep it out of the loops). As there are no calls to RMATCH in the + loops, we can use an ordinary variable for "notmatch". The code for UTF + mode is separated out for tidiness, except for Unicode property tests. */ if (Lmin > 0) { #ifdef SUPPORT_UNICODE if (proptype >= 0) /* Property tests in all modes */ { + BOOL notmatch = Lctype == OP_NOTPROP; switch(proptype) { case PT_ANY: - if (Lctype == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); for (i = 1; i <= Lmin; i++) { if (Feptr >= mb->end_subject) @@ -2652,7 +2677,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); chartype = UCD_CHARTYPE(fc); if ((chartype == ucp_Lu || chartype == ucp_Ll || - chartype == ucp_Lt) == (Lctype == OP_NOTPROP)) + chartype == ucp_Lt) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2666,7 +2691,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); RRETURN(MATCH_NOMATCH); } GETCHARINCTEST(fc, Feptr); - if ((UCD_CATEGORY(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + if ((UCD_CATEGORY(fc) == Lpropvalue) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2680,7 +2705,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); RRETURN(MATCH_NOMATCH); } GETCHARINCTEST(fc, Feptr); - if ((UCD_CHARTYPE(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + if ((UCD_CHARTYPE(fc) == Lpropvalue) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2694,7 +2719,26 @@ fprintf(stderr, "++ op=%d\n", *Fecode); RRETURN(MATCH_NOMATCH); } GETCHARINCTEST(fc, Feptr); - if ((UCD_SCRIPT(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + if ((UCD_SCRIPT(fc) == Lpropvalue) == notmatch) + RRETURN(MATCH_NOMATCH); + } + break; + + case PT_SCX: + for (i = 1; i <= Lmin; i++) + { + BOOL ok; + const ucd_record *prop; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + prop = GET_UCD(fc); + ok = (prop->script == Lpropvalue || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Lpropvalue) != 0); + if (ok == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2710,7 +2754,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } GETCHARINCTEST(fc, Feptr); category = UCD_CATEGORY(fc); - if ((category == ucp_L || category == ucp_N) == (Lctype == OP_NOTPROP)) + if ((category == ucp_L || category == ucp_N) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2733,11 +2777,11 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { HSPACE_CASES: VSPACE_CASES: - if (Lctype == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); break; default: - if ((UCD_CATEGORY(fc) == ucp_Z) == (Lctype == OP_NOTPROP)) + if ((UCD_CATEGORY(fc) == ucp_Z) == notmatch) RRETURN(MATCH_NOMATCH); break; } @@ -2756,7 +2800,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); GETCHARINCTEST(fc, Feptr); category = UCD_CATEGORY(fc); if ((category == ucp_L || category == ucp_N || - fc == CHAR_UNDERSCORE) == (Lctype == OP_NOTPROP)) + fc == CHAR_UNDERSCORE) == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -2776,12 +2820,12 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { if (fc < *cp) { - if (Lctype == OP_NOTPROP) break; + if (notmatch) break; RRETURN(MATCH_NOMATCH); } if (fc == *cp++) { - if (Lctype == OP_NOTPROP) RRETURN(MATCH_NOMATCH); + if (notmatch) RRETURN(MATCH_NOMATCH); break; } } @@ -2799,7 +2843,40 @@ fprintf(stderr, "++ op=%d\n", *Fecode); GETCHARINCTEST(fc, Feptr); if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT || fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) || - fc >= 0xe000) == (Lctype == OP_NOTPROP)) + fc >= 0xe000) == notmatch) + RRETURN(MATCH_NOMATCH); + } + break; + + case PT_BIDICL: + for (i = 1; i <= Lmin; i++) + { + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + if ((UCD_BIDICLASS(fc) == Lpropvalue) == notmatch) + RRETURN(MATCH_NOMATCH); + } + break; + + case PT_BOOL: + for (i = 1; i <= Lmin; i++) + { + BOOL ok; + const ucd_record *prop; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + prop = GET_UCD(fc); + ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), Lpropvalue) != 0; + if (ok == notmatch) RRETURN(MATCH_NOMATCH); } break; @@ -3343,7 +3420,9 @@ fprintf(stderr, "++ op=%d\n", *Fecode); if (Lmin == Lmax) continue; /* If minimizing, we have to test the rest of the pattern before each - subsequent match. */ + subsequent match. This means we cannot use a local "notmatch" variable as + in the other cases. As all 4 temporary 32-bit values in the frame are + already in use, just test the type each time. */ if (reptype == REPTYPE_MIN) { @@ -3440,6 +3519,28 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } /* Control never gets here */ + case PT_SCX: + for (;;) + { + BOOL ok; + const ucd_record *prop; + RMATCH(Fecode, RM225); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH); + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + prop = GET_UCD(fc); + ok = (prop->script == Lpropvalue + || MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Lpropvalue) != 0); + if (ok == (Lctype == OP_NOTPROP)) + RRETURN(MATCH_NOMATCH); + } + /* Control never gets here */ + case PT_ALNUM: for (;;) { @@ -3454,8 +3555,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } GETCHARINCTEST(fc, Feptr); category = UCD_CATEGORY(fc); - if ((category == ucp_L || category == ucp_N) == - (Lctype == OP_NOTPROP)) + if ((category == ucp_L || category == ucp_N) == (Lctype == OP_NOTPROP)) RRETURN(MATCH_NOMATCH); } /* Control never gets here */ @@ -3562,6 +3662,45 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } /* Control never gets here */ + case PT_BIDICL: + for (;;) + { + RMATCH(Fecode, RM224); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH); + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + if ((UCD_BIDICLASS(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + RRETURN(MATCH_NOMATCH); + } + /* Control never gets here */ + + case PT_BOOL: + for (;;) + { + BOOL ok; + const ucd_record *prop; + RMATCH(Fecode, RM223); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH); + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + RRETURN(MATCH_NOMATCH); + } + GETCHARINCTEST(fc, Feptr); + prop = GET_UCD(fc); + ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), Lpropvalue) != 0; + if (ok == (Lctype == OP_NOTPROP)) + RRETURN(MATCH_NOMATCH); + } + /* Control never gets here */ + /* This should never occur */ default: return PCRE2_ERROR_INTERNAL; @@ -3870,7 +4009,9 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } /* If maximizing, it is worth using inline code for speed, doing the type - test once at the start (i.e. keep it out of the loop). */ + test once at the start (i.e. keep it out of the loops). Once again, + "notmatch" can be an ordinary local variable because the loops do not call + RMATCH. */ else { @@ -3879,6 +4020,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); #ifdef SUPPORT_UNICODE if (proptype >= 0) { + BOOL notmatch = Lctype == OP_NOTPROP; switch(proptype) { case PT_ANY: @@ -3891,7 +4033,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); break; } GETCHARLENTEST(fc, Feptr, len); - if (Lctype == OP_NOTPROP) break; + if (notmatch) break; Feptr+= len; } break; @@ -3910,7 +4052,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); chartype = UCD_CHARTYPE(fc); if ((chartype == ucp_Lu || chartype == ucp_Ll || - chartype == ucp_Lt) == (Lctype == OP_NOTPROP)) + chartype == ucp_Lt) == notmatch) break; Feptr+= len; } @@ -3926,8 +4068,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); break; } GETCHARLENTEST(fc, Feptr, len); - if ((UCD_CATEGORY(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) - break; + if ((UCD_CATEGORY(fc) == Lpropvalue) == notmatch) break; Feptr+= len; } break; @@ -3942,8 +4083,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); break; } GETCHARLENTEST(fc, Feptr, len); - if ((UCD_CHARTYPE(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) - break; + if ((UCD_CHARTYPE(fc) == Lpropvalue) == notmatch) break; Feptr+= len; } break; @@ -3958,8 +4098,27 @@ fprintf(stderr, "++ op=%d\n", *Fecode); break; } GETCHARLENTEST(fc, Feptr, len); - if ((UCD_SCRIPT(fc) == Lpropvalue) == (Lctype == OP_NOTPROP)) + if ((UCD_SCRIPT(fc) == Lpropvalue) == notmatch) break; + Feptr+= len; + } + break; + + case PT_SCX: + for (i = Lmin; i < Lmax; i++) + { + BOOL ok; + const ucd_record *prop; + int len = 1; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); break; + } + GETCHARLENTEST(fc, Feptr, len); + prop = GET_UCD(fc); + ok = (prop->script == Lpropvalue || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Lpropvalue) != 0); + if (ok == notmatch) break; Feptr+= len; } break; @@ -3976,8 +4135,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); } GETCHARLENTEST(fc, Feptr, len); category = UCD_CATEGORY(fc); - if ((category == ucp_L || category == ucp_N) == - (Lctype == OP_NOTPROP)) + if ((category == ucp_L || category == ucp_N) == notmatch) break; Feptr+= len; } @@ -4002,11 +4160,11 @@ fprintf(stderr, "++ op=%d\n", *Fecode); { HSPACE_CASES: VSPACE_CASES: - if (Lctype == OP_NOTPROP) goto ENDLOOP99; /* Break the loop */ + if (notmatch) goto ENDLOOP99; /* Break the loop */ break; default: - if ((UCD_CATEGORY(fc) == ucp_Z) == (Lctype == OP_NOTPROP)) + if ((UCD_CATEGORY(fc) == ucp_Z) == notmatch) goto ENDLOOP99; /* Break the loop */ break; } @@ -4028,7 +4186,7 @@ fprintf(stderr, "++ op=%d\n", *Fecode); GETCHARLENTEST(fc, Feptr, len); category = UCD_CATEGORY(fc); if ((category == ucp_L || category == ucp_N || - fc == CHAR_UNDERSCORE) == (Lctype == OP_NOTPROP)) + fc == CHAR_UNDERSCORE) == notmatch) break; Feptr+= len; } @@ -4049,9 +4207,9 @@ fprintf(stderr, "++ op=%d\n", *Fecode); for (;;) { if (fc < *cp) - { if (Lctype == OP_NOTPROP) break; else goto GOT_MAX; } + { if (notmatch) break; else goto GOT_MAX; } if (fc == *cp++) - { if (Lctype == OP_NOTPROP) goto GOT_MAX; else break; } + { if (notmatch) goto GOT_MAX; else break; } } Feptr += len; } @@ -4070,12 +4228,47 @@ fprintf(stderr, "++ op=%d\n", *Fecode); GETCHARLENTEST(fc, Feptr, len); if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT || fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) || - fc >= 0xe000) == (Lctype == OP_NOTPROP)) + fc >= 0xe000) == notmatch) break; Feptr += len; } break; + case PT_BIDICL: + for (i = Lmin; i < Lmax; i++) + { + int len = 1; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + break; + } + GETCHARLENTEST(fc, Feptr, len); + if ((UCD_BIDICLASS(fc) == Lpropvalue) == notmatch) break; + Feptr+= len; + } + break; + + case PT_BOOL: + for (i = Lmin; i < Lmax; i++) + { + BOOL ok; + const ucd_record *prop; + int len = 1; + if (Feptr >= mb->end_subject) + { + SCHECK_PARTIAL(); + break; + } + GETCHARLENTEST(fc, Feptr, len); + prop = GET_UCD(fc); + ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), Lpropvalue) != 0; + if (ok == notmatch) break; + Feptr+= len; + } + break; + default: return PCRE2_ERROR_INTERNAL; } @@ -6066,7 +6259,7 @@ switch (Freturn_id) LBL(200) LBL(201) LBL(202) LBL(203) LBL(204) LBL(205) LBL(206) LBL(207) LBL(208) LBL(209) LBL(210) LBL(211) LBL(212) LBL(213) LBL(214) LBL(215) LBL(216) LBL(217) LBL(218) LBL(219) LBL(220) - LBL(221) LBL(222) + LBL(221) LBL(222) LBL(223) LBL(224) LBL(225) #endif default: @@ -6129,8 +6322,8 @@ PCRE2_UCHAR req_cu2 = 0; PCRE2_SPTR bumpalong_limit; PCRE2_SPTR end_subject; PCRE2_SPTR true_end_subject; -PCRE2_SPTR start_match = subject + start_offset; -PCRE2_SPTR req_cu_ptr = start_match - 1; +PCRE2_SPTR start_match; +PCRE2_SPTR req_cu_ptr; PCRE2_SPTR start_partial; PCRE2_SPTR match_partial; @@ -6170,9 +6363,18 @@ PCRE2_SPTR stack_frames_vector[START_FRAMES_SIZE/sizeof(PCRE2_SPTR)] PCRE2_KEEP_UNINITIALIZED; mb->stack_frames = (heapframe *)stack_frames_vector; -/* A length equal to PCRE2_ZERO_TERMINATED implies a zero-terminated -subject string. */ +/* Recognize NULL, length 0 as an empty string. */ +if (subject == NULL && length == 0) subject = (PCRE2_SPTR)""; + +/* Plausibility checks */ + +if ((options & ~PUBLIC_MATCH_OPTIONS) != 0) return PCRE2_ERROR_BADOPTION; +if (code == NULL || subject == NULL || match_data == NULL) + return PCRE2_ERROR_NULL; + +start_match = subject + start_offset; +req_cu_ptr = start_match - 1; if (length == PCRE2_ZERO_TERMINATED) { length = PRIV(strlen)(subject); @@ -6180,11 +6382,6 @@ if (length == PCRE2_ZERO_TERMINATED) } true_end_subject = end_subject = subject + length; -/* Plausibility checks */ - -if ((options & ~PUBLIC_MATCH_OPTIONS) != 0) return PCRE2_ERROR_BADOPTION; -if (code == NULL || subject == NULL || match_data == NULL) - return PCRE2_ERROR_NULL; if (start_offset > length) return PCRE2_ERROR_BADOFFSET; /* Check that the first field in the block is the magic number. */ @@ -6482,7 +6679,7 @@ if (utf && /* If the end precedes start_match, it means there is invalid UTF in the extra code units we reversed over because of a lookbehind. Advance past the first bad code unit, and then skip invalid character starting code units in - 8-bit and 16-bit modes, and try again. */ + 8-bit and 16-bit modes, and try again with the original end point. */ if (end_subject < start_match) { @@ -6491,6 +6688,7 @@ if (utf && while (mb->check_subject < start_match && NOT_FIRSTCU(*mb->check_subject)) mb->check_subject++; #endif + end_subject = true_end_subject; } /* Otherwise, set the not end of line option, and do the match. */ @@ -6601,10 +6799,16 @@ the pattern. It is not used at all if there are no capturing parentheses. The last of these is changed within the match() function if the frame vector has to be expanded. We therefore put it into the match block so that it is -correct when calling match() more than once for non-anchored patterns. */ +correct when calling match() more than once for non-anchored patterns. -frame_size = offsetof(heapframe, ovector) + - re->top_bracket * 2 * sizeof(PCRE2_SIZE); +We must also pad frame_size for alignment to ensure subsequent frames are as +aligned as heapframe. Whilst ovector is word-aligned due to being a PCRE2_SIZE +array, that does not guarantee it is suitably aligned for pointers, as some +architectures have pointers that are larger than a size_t. */ + +frame_size = (offsetof(heapframe, ovector) + + re->top_bracket * 2 * sizeof(PCRE2_SIZE) + HEAPFRAME_ALIGNMENT - 1) & + ~(HEAPFRAME_ALIGNMENT - 1); /* Limits set in the pattern override the match context only if they are smaller. */ @@ -6648,7 +6852,7 @@ mb->match_frames_top = to avoid uninitialized memory read errors when it is copied to a new frame. */ memset((char *)(mb->match_frames) + offsetof(heapframe, ovector), 0xff, - re->top_bracket * 2 * sizeof(PCRE2_SIZE)); + frame_size - offsetof(heapframe, ovector)); /* Pointers to the individual character tables */ diff --git a/src/3rdparty/pcre2/src/pcre2_script_run.c b/src/3rdparty/pcre2/src/pcre2_script_run.c index 91a48330..4926fa63 100644 --- a/src/3rdparty/pcre2/src/pcre2_script_run.c +++ b/src/3rdparty/pcre2/src/pcre2_script_run.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2018 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -68,26 +68,26 @@ Arguments: Returns: TRUE if this is a valid script run */ -/* These dummy values must be less than the negation of the largest offset in -the PRIV(ucd_script_sets) vector, which is held in a 16-bit field in UCD -records (and is only likely to be a few hundred). */ +/* These are states in the checking process. */ -#define SCRIPT_UNSET (-99999) -#define SCRIPT_HANPENDING (-99998) -#define SCRIPT_HANHIRAKATA (-99997) -#define SCRIPT_HANBOPOMOFO (-99996) -#define SCRIPT_HANHANGUL (-99995) -#define SCRIPT_LIST (-99994) +enum { SCRIPT_UNSET, /* Requirement as yet unknown */ + SCRIPT_MAP, /* Bitmap contains acceptable scripts */ + SCRIPT_HANPENDING, /* Have had only Han characters */ + SCRIPT_HANHIRAKATA, /* Expect Han or Hirikata */ + SCRIPT_HANBOPOMOFO, /* Expect Han or Bopomofo */ + SCRIPT_HANHANGUL /* Expect Han or Hangul */ + }; -#define INTERSECTION_LIST_SIZE 50 +#define UCD_MAPSIZE (ucp_Unknown/32 + 1) +#define FULL_MAPSIZE (ucp_Script_Count/32 + 1) BOOL PRIV(script_run)(PCRE2_SPTR ptr, PCRE2_SPTR endptr, BOOL utf) { #ifdef SUPPORT_UNICODE -int require_script = SCRIPT_UNSET; -uint8_t intersection_list[INTERSECTION_LIST_SIZE]; -const uint8_t *require_list = NULL; +uint32_t require_state = SCRIPT_UNSET; +uint32_t require_map[FULL_MAPSIZE]; +uint32_t map[FULL_MAPSIZE]; uint32_t require_digitset = 0; uint32_t c; @@ -101,11 +101,17 @@ if (ptr >= endptr) return TRUE; GETCHARINCTEST(c, ptr); if (ptr >= endptr) return TRUE; +/* Initialize the require map. This is a full-size bitmap that has a bit for +every script, as opposed to the maps in ucd_script_sets, which only have bits +for scripts less than ucp_Unknown - those that appear in script extension +lists. */ + +for (int i = 0; i < FULL_MAPSIZE; i++) require_map[i] = 0; + /* Scan strings of two or more characters, checking the Unicode characteristics -of each code point. We make use of the Script Extensions property. There is -special code for scripts that can be combined with characters from the Han -Chinese script. This may be used in conjunction with four other scripts in -these combinations: +of each code point. There is special code for scripts that can be combined with +characters from the Han Chinese script. This may be used in conjunction with +four other scripts in these combinations: . Han with Hiragana and Katakana is allowed (for Japanese). . Han with Bopomofo is allowed (for Taiwanese Mandarin). @@ -119,310 +125,207 @@ Hence the SCRIPT_HANPENDING state. */ for (;;) { const ucd_record *ucd = GET_UCD(c); - int32_t scriptx = ucd->scriptx; + uint32_t script = ucd->script; - /* If the script extension is Unknown, the string is not a valid script run. - Such characters can only form script runs of length one. */ + /* If the script is Unknown, the string is not a valid script run. Such + characters can only form script runs of length one (see test above). */ - if (scriptx == ucp_Unknown) return FALSE; + if (script == ucp_Unknown) return FALSE; - /* A character whose script extension is Inherited is always accepted with - any script, and plays no further part in this testing. A character whose - script is Common is always accepted, but must still be tested for a digit - below. The scriptx value at this point is non-zero, because zero is - ucp_Unknown, tested for above. */ + /* A character without any script extensions whose script is Inherited or + Common is always accepted with any script. If there are extensions, the + following processing happens for all scripts. */ - if (scriptx != ucp_Inherited) + if (UCD_SCRIPTX_PROP(ucd) != 0 || (script != ucp_Inherited && script != ucp_Common)) { - if (scriptx != ucp_Common) + BOOL OK; + + /* Set up a full-sized map for this character that can include bits for all + scripts. Copy the scriptx map for this character (which covers those + scripts that appear in script extension lists), set the remaining values to + zero, and then, except for Common or Inherited, add this script's bit to + the map. */ + + memcpy(map, PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(ucd), UCD_MAPSIZE * sizeof(uint32_t)); + memset(map + UCD_MAPSIZE, 0, (FULL_MAPSIZE - UCD_MAPSIZE) * sizeof(uint32_t)); + if (script != ucp_Common && script != ucp_Inherited) MAPSET(map, script); + + /* Handle the different checking states */ + + switch(require_state) { - /* If the script extension value is positive, the character is not a mark - that can be used with many scripts. In the simple case we either set or - compare with the required script. However, handling the scripts that can - combine with Han are more complicated, as is the case when the previous - characters have been man-script marks. */ + /* First significant character - it might follow Common or Inherited + characters that do not have any script extensions. */ - if (scriptx > 0) + case SCRIPT_UNSET: + switch(script) { - switch(require_script) - { - /* Either the first significant character (require_script unset) or - after only Han characters. */ + case ucp_Han: + require_state = SCRIPT_HANPENDING; + break; - case SCRIPT_UNSET: - case SCRIPT_HANPENDING: - switch(scriptx) - { - case ucp_Han: - require_script = SCRIPT_HANPENDING; - break; + case ucp_Hiragana: + case ucp_Katakana: + require_state = SCRIPT_HANHIRAKATA; + break; - case ucp_Hiragana: - case ucp_Katakana: - require_script = SCRIPT_HANHIRAKATA; - break; + case ucp_Bopomofo: + require_state = SCRIPT_HANBOPOMOFO; + break; - case ucp_Bopomofo: - require_script = SCRIPT_HANBOPOMOFO; - break; + case ucp_Hangul: + require_state = SCRIPT_HANHANGUL; + break; - case ucp_Hangul: - require_script = SCRIPT_HANHANGUL; - break; + default: + memcpy(require_map, map, FULL_MAPSIZE * sizeof(uint32_t)); + require_state = SCRIPT_MAP; + break; + } + break; - /* Not a Han-related script. If expecting one, fail. Otherise set - the requirement to this script. */ + /* The first significant character was Han. An inspection of the Unicode + 11.0.0 files shows that there are the following types of Script Extension + list that involve the Han, Bopomofo, Hiragana, Katakana, and Hangul + scripts: - default: - if (require_script == SCRIPT_HANPENDING) return FALSE; - require_script = scriptx; - break; - } - break; + . Bopomofo + Han + . Han + Hiragana + Katakana + . Hiragana + Katakana + . Bopopmofo + Hangul + Han + Hiragana + Katakana - /* Previously encountered one of the "with Han" scripts. Check that - this character is appropriate. */ - - case SCRIPT_HANHIRAKATA: - if (scriptx != ucp_Han && scriptx != ucp_Hiragana && - scriptx != ucp_Katakana) - return FALSE; - break; - - case SCRIPT_HANBOPOMOFO: - if (scriptx != ucp_Han && scriptx != ucp_Bopomofo) return FALSE; - break; - - case SCRIPT_HANHANGUL: - if (scriptx != ucp_Han && scriptx != ucp_Hangul) return FALSE; - break; - - /* We have a list of scripts to check that is derived from one or - more previous characters. This is either one of the lists in - ucd_script_sets[] (for one previous character) or the intersection of - several lists for multiple characters. */ - - case SCRIPT_LIST: - { - const uint8_t *list; - for (list = require_list; *list != 0; list++) - { - if (*list == scriptx) break; - } - if (*list == 0) return FALSE; - } - - /* The rest of the string must be in this script, but we have to - allow for the Han complications. */ - - switch(scriptx) - { - case ucp_Han: - require_script = SCRIPT_HANPENDING; - break; - - case ucp_Hiragana: - case ucp_Katakana: - require_script = SCRIPT_HANHIRAKATA; - break; - - case ucp_Bopomofo: - require_script = SCRIPT_HANBOPOMOFO; - break; - - case ucp_Hangul: - require_script = SCRIPT_HANHANGUL; - break; - - default: - require_script = scriptx; - break; - } - break; - - /* This is the easy case when a single script is required. */ - - default: - if (scriptx != require_script) return FALSE; - break; - } - } /* End of handing positive scriptx */ - - /* If scriptx is negative, this character is a mark-type character that - has a list of permitted scripts. */ - - else - { - uint32_t chspecial; - const uint8_t *clist, *rlist; - const uint8_t *list = PRIV(ucd_script_sets) - scriptx; - - switch(require_script) - { - case SCRIPT_UNSET: - require_list = PRIV(ucd_script_sets) - scriptx; - require_script = SCRIPT_LIST; - break; - - /* An inspection of the Unicode 11.0.0 files shows that there are the - following types of Script Extension list that involve the Han, - Bopomofo, Hiragana, Katakana, and Hangul scripts: - - . Bopomofo + Han - . Han + Hiragana + Katakana - . Hiragana + Katakana - . Bopopmofo + Hangul + Han + Hiragana + Katakana - - The following code tries to make sense of this. */ + The following code tries to make sense of this. */ #define FOUND_BOPOMOFO 1 #define FOUND_HIRAGANA 2 #define FOUND_KATAKANA 4 #define FOUND_HANGUL 8 - case SCRIPT_HANPENDING: - chspecial = 0; - for (; *list != 0; list++) - { - switch (*list) - { - case ucp_Bopomofo: chspecial |= FOUND_BOPOMOFO; break; - case ucp_Hiragana: chspecial |= FOUND_HIRAGANA; break; - case ucp_Katakana: chspecial |= FOUND_KATAKANA; break; - case ucp_Hangul: chspecial |= FOUND_HANGUL; break; - default: break; - } - } - - if (chspecial == 0) return FALSE; - - if (chspecial == FOUND_BOPOMOFO) - { - require_script = SCRIPT_HANBOPOMOFO; - } - else if (chspecial == (FOUND_HIRAGANA|FOUND_KATAKANA)) - { - require_script = SCRIPT_HANHIRAKATA; - } - - /* Otherwise it must be allowed with all of them, so remain in - the pending state. */ - - break; - - case SCRIPT_HANHIRAKATA: - for (; *list != 0; list++) - { - if (*list == ucp_Hiragana || *list == ucp_Katakana) break; - } - if (*list == 0) return FALSE; - break; - - case SCRIPT_HANBOPOMOFO: - for (; *list != 0; list++) - { - if (*list == ucp_Bopomofo) break; - } - if (*list == 0) return FALSE; - break; - - case SCRIPT_HANHANGUL: - for (; *list != 0; list++) - { - if (*list == ucp_Hangul) break; - } - if (*list == 0) return FALSE; - break; - - /* Previously encountered one or more characters that are allowed - with a list of scripts. Build the intersection of the required list - with this character's list in intersection_list[]. This code is - written so that it still works OK if the required list is already in - that vector. */ - - case SCRIPT_LIST: - { - int i = 0; - for (rlist = require_list; *rlist != 0; rlist++) - { - for (clist = list; *clist != 0; clist++) - { - if (*rlist == *clist) - { - intersection_list[i++] = *rlist; - break; - } - } - } - if (i == 0) return FALSE; /* No scripts in common */ - - /* If there's just one script in common, we can set it as the - unique required script. Otherwise, terminate the intersection list - and make it the required list. */ - - if (i == 1) - { - require_script = intersection_list[0]; - } - else - { - intersection_list[i] = 0; - require_list = intersection_list; - } - } - break; - - /* The previously set required script is a single script, not - Han-related. Check that it is in this character's list. */ - - default: - for (; *list != 0; list++) - { - if (*list == require_script) break; - } - if (*list == 0) return FALSE; - break; - } - } /* End of handling negative scriptx */ - } /* End of checking non-Common character */ - - /* The character is in an acceptable script. We must now ensure that all - decimal digits in the string come from the same set. Some scripts (e.g. - Common, Arabic) have more than one set of decimal digits. This code does - not allow mixing sets, even within the same script. The vector called - PRIV(ucd_digit_sets)[] contains, in its first element, the number of - following elements, and then, in ascending order, the code points of the - '9' characters in every set of 10 digits. Each set is identified by the - offset in the vector of its '9' character. An initial check of the first - value picks up ASCII digits quickly. Otherwise, a binary chop is used. */ - - if (ucd->chartype == ucp_Nd) - { - uint32_t digitset; - - if (c <= PRIV(ucd_digit_sets)[1]) digitset = 1; else + case SCRIPT_HANPENDING: + if (script != ucp_Han) /* Another Han does nothing */ { - int mid; - int bot = 1; - int top = PRIV(ucd_digit_sets)[0]; - for (;;) + uint32_t chspecial = 0; + + if (MAPBIT(map, ucp_Bopomofo) != 0) chspecial |= FOUND_BOPOMOFO; + if (MAPBIT(map, ucp_Hiragana) != 0) chspecial |= FOUND_HIRAGANA; + if (MAPBIT(map, ucp_Katakana) != 0) chspecial |= FOUND_KATAKANA; + if (MAPBIT(map, ucp_Hangul) != 0) chspecial |= FOUND_HANGUL; + + if (chspecial == 0) return FALSE; /* Not allowed with Han */ + + if (chspecial == FOUND_BOPOMOFO) + require_state = SCRIPT_HANBOPOMOFO; + else if (chspecial == (FOUND_HIRAGANA|FOUND_KATAKANA)) + require_state = SCRIPT_HANHIRAKATA; + + /* Otherwise this character must be allowed with all of them, so remain + in the pending state. */ + } + break; + + /* Previously encountered one of the "with Han" scripts. Check that + this character is appropriate. */ + + case SCRIPT_HANHIRAKATA: + if (MAPBIT(map, ucp_Han) + MAPBIT(map, ucp_Hiragana) + + MAPBIT(map, ucp_Katakana) == 0) return FALSE; + break; + + case SCRIPT_HANBOPOMOFO: + if (MAPBIT(map, ucp_Han) + MAPBIT(map, ucp_Bopomofo) == 0) return FALSE; + break; + + case SCRIPT_HANHANGUL: + if (MAPBIT(map, ucp_Han) + MAPBIT(map, ucp_Hangul) == 0) return FALSE; + break; + + /* Previously encountered one or more characters that are allowed with a + list of scripts. */ + + case SCRIPT_MAP: + OK = FALSE; + + for (int i = 0; i < FULL_MAPSIZE; i++) + { + if ((require_map[i] & map[i]) != 0) { - if (top <= bot + 1) /* <= rather than == is paranoia */ - { - digitset = top; - break; - } - mid = (top + bot) / 2; - if (c <= PRIV(ucd_digit_sets)[mid]) top = mid; else bot = mid; + OK = TRUE; + break; } } - /* A required value of 0 means "unset". */ + if (!OK) return FALSE; - if (require_digitset == 0) require_digitset = digitset; - else if (digitset != require_digitset) return FALSE; - } /* End digit handling */ - } /* End checking non-Inherited character */ + /* The rest of the string must be in this script, but we have to + allow for the Han complications. */ + + switch(script) + { + case ucp_Han: + require_state = SCRIPT_HANPENDING; + break; + + case ucp_Hiragana: + case ucp_Katakana: + require_state = SCRIPT_HANHIRAKATA; + break; + + case ucp_Bopomofo: + require_state = SCRIPT_HANBOPOMOFO; + break; + + case ucp_Hangul: + require_state = SCRIPT_HANHANGUL; + break; + + /* Compute the intersection of the required list of scripts and the + allowed scripts for this character. */ + + default: + for (int i = 0; i < FULL_MAPSIZE; i++) require_map[i] &= map[i]; + break; + } + + break; + } + } /* End checking character's script and extensions. */ + + /* The character is in an acceptable script. We must now ensure that all + decimal digits in the string come from the same set. Some scripts (e.g. + Common, Arabic) have more than one set of decimal digits. This code does + not allow mixing sets, even within the same script. The vector called + PRIV(ucd_digit_sets)[] contains, in its first element, the number of + following elements, and then, in ascending order, the code points of the + '9' characters in every set of 10 digits. Each set is identified by the + offset in the vector of its '9' character. An initial check of the first + value picks up ASCII digits quickly. Otherwise, a binary chop is used. */ + + if (ucd->chartype == ucp_Nd) + { + uint32_t digitset; + + if (c <= PRIV(ucd_digit_sets)[1]) digitset = 1; else + { + int mid; + int bot = 1; + int top = PRIV(ucd_digit_sets)[0]; + for (;;) + { + if (top <= bot + 1) /* <= rather than == is paranoia */ + { + digitset = top; + break; + } + mid = (top + bot) / 2; + if (c <= PRIV(ucd_digit_sets)[mid]) top = mid; else bot = mid; + } + } + + /* A required value of 0 means "unset". */ + + if (require_digitset == 0) require_digitset = digitset; + else if (digitset != require_digitset) return FALSE; + } /* End digit handling */ /* If we haven't yet got to the end, pick up the next character. */ diff --git a/src/3rdparty/pcre2/src/pcre2_string_utils.c b/src/3rdparty/pcre2/src/pcre2_string_utils.c index d6be01ac..ebfa9434 100644 --- a/src/3rdparty/pcre2/src/pcre2_string_utils.c +++ b/src/3rdparty/pcre2/src/pcre2_string_utils.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2018 University of Cambridge + New API code Copyright (c) 2018-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without diff --git a/src/3rdparty/pcre2/src/pcre2_study.c b/src/3rdparty/pcre2/src/pcre2_study.c index 9bbb3757..4db3ad11 100644 --- a/src/3rdparty/pcre2/src/pcre2_study.c +++ b/src/3rdparty/pcre2/src/pcre2_study.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -908,7 +908,7 @@ set_nottype_bits(pcre2_real_code *re, int cbit_type, unsigned int table_limit) { uint32_t c; for (c = 0; c < table_limit; c++) - re->start_bitmap[c] |= ~(re->tables[c+cbits_offset+cbit_type]); + re->start_bitmap[c] |= (uint8_t)(~(re->tables[c+cbits_offset+cbit_type])); #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8 if (table_limit != 32) for (c = 24; c < 32; c++) re->start_bitmap[c] = 0xff; #endif diff --git a/src/3rdparty/pcre2/src/pcre2_substitute.c b/src/3rdparty/pcre2/src/pcre2_substitute.c index 981a106a..8b2c369c 100644 --- a/src/3rdparty/pcre2/src/pcre2_substitute.c +++ b/src/3rdparty/pcre2/src/pcre2_substitute.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2020 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -259,6 +259,18 @@ PCRE2_UNSET, so as not to imply an offset in the replacement. */ if ((options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0) return PCRE2_ERROR_BADOPTION; + +/* Validate length and find the end of the replacement. A NULL replacement of +zero length is interpreted as an empty string. */ + +if (replacement == NULL) + { + if (rlength != 0) return PCRE2_ERROR_NULL; + replacement = (PCRE2_SPTR)""; + } + +if (rlength == PCRE2_ZERO_TERMINATED) rlength = PRIV(strlen)(replacement); +repend = replacement + rlength; /* Check for using a match that has already happened. Note that the subject pointer in the match data may be NULL after a no-match. */ @@ -312,11 +324,18 @@ scb.input = subject; scb.output = (PCRE2_SPTR)buffer; scb.ovector = ovector; -/* Find lengths of zero-terminated strings and the end of the replacement. */ +/* A NULL subject of zero length is treated as an empty string. */ -if (length == PCRE2_ZERO_TERMINATED) length = PRIV(strlen)(subject); -if (rlength == PCRE2_ZERO_TERMINATED) rlength = PRIV(strlen)(replacement); -repend = replacement + rlength; +if (subject == NULL) + { + if (length != 0) return PCRE2_ERROR_NULL; + subject = (PCRE2_SPTR)""; + } + +/* Find length of zero-terminated subject */ + +if (length == PCRE2_ZERO_TERMINATED) + length = subject? PRIV(strlen)(subject) : 0; /* Check UTF replacement string if necessary. */ diff --git a/src/3rdparty/pcre2/src/pcre2_tables.c b/src/3rdparty/pcre2/src/pcre2_tables.c index c164e976..e00252f1 100644 --- a/src/3rdparty/pcre2/src/pcre2_tables.c +++ b/src/3rdparty/pcre2/src/pcre2_tables.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2019 University of Cambridge + New API code Copyright (c) 2016-2021 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -51,10 +51,10 @@ defined. */ #include "pcre2_internal.h" #endif /* PCRE2_PCRE2TEST */ - /* Table of sizes for the fixed-length opcodes. It's defined in a macro so that the definition is next to the definition of the opcodes in pcre2_internal.h. -This is mode-dependent, so is skipped when this file is included by pcre2test. */ +This is mode-dependent, so it is skipped when this file is included by +pcre2test. */ #ifndef PCRE2_PCRE2TEST const uint8_t PRIV(OP_lengths)[] = { OP_LENGTHS }; @@ -119,6 +119,9 @@ const uint8_t PRIV(utf8_table4)[] = { #endif /* UTF-8 support needed */ +/* Tables concerned with Unicode properties are relevant only when Unicode +support is enabled. See also the pcre2_ucptables.c file, which is generated by +a Python script from Unicode data files. */ #ifdef SUPPORT_UNICODE @@ -190,7 +193,7 @@ const uint32_t PRIV(ucp_gbtable)[] = { ESZ|(1u<script) == isprop) return !negated; break; + case PT_SCX: + ok = (data[1] == prop->script || + MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), data[1]) != 0); + if (ok == isprop) return !negated; + break; + case PT_ALNUM: if ((PRIV(ucp_gentype)[prop->chartype] == ucp_L || PRIV(ucp_gentype)[prop->chartype] == ucp_N) == isprop) @@ -207,6 +214,17 @@ while ((t = *data++) != XCL_END) } break; + case PT_BIDICL: + if ((UCD_BIDICLASS_PROP(prop) == data[1]) == isprop) + return !negated; + break; + + case PT_BOOL: + ok = MAPBIT(PRIV(ucd_boolprop_sets) + + UCD_BPROPS_PROP(prop), data[1]) != 0; + if (ok == isprop) return !negated; + break; + /* The following three properties can occur only in an XCLASS, as there is no \p or \P coding for them. */ diff --git a/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h b/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h index 7bb9990a..55e4e39f 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h +++ b/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h @@ -60,7 +60,7 @@ extern "C" { SLJIT_LITTLE_ENDIAN : little endian architecture SLJIT_BIG_ENDIAN : big endian architecture SLJIT_UNALIGNED : allows unaligned memory accesses for non-fpu operations (only!) - SLJIT_INDIRECT_CALL : see SLJIT_FUNC_OFFSET() for more information + SLJIT_INDIRECT_CALL : see SLJIT_FUNC_ADDR() for more information Constants: SLJIT_NUMBER_OF_REGISTERS : number of available registers @@ -148,7 +148,7 @@ extern "C" { #endif #elif defined (__aarch64__) #define SLJIT_CONFIG_ARM_64 1 -#elif defined(__ppc64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) || (defined(_POWER) && defined(__64BIT__)) +#elif defined(__ppc64__) || defined(__powerpc64__) || (defined(_ARCH_PPC64) && defined(__64BIT__)) || (defined(_POWER) && defined(__64BIT__)) #define SLJIT_CONFIG_PPC_64 1 #elif defined(__ppc__) || defined(__powerpc__) || defined(_ARCH_PPC) || defined(_ARCH_PWR) || defined(_ARCH_PWR2) || defined(_POWER) #define SLJIT_CONFIG_PPC_32 1 @@ -156,7 +156,7 @@ extern "C" { #define SLJIT_CONFIG_MIPS_32 1 #elif defined(__mips64) #define SLJIT_CONFIG_MIPS_64 1 -#elif defined(__sparc__) || defined(__sparc) +#elif (defined(__sparc__) || defined(__sparc)) && !defined(_LP64) #define SLJIT_CONFIG_SPARC_32 1 #elif defined(__s390x__) #define SLJIT_CONFIG_S390X 1 @@ -274,9 +274,13 @@ extern "C" { #ifndef SLJIT_INLINE /* Inline functions. Some old compilers do not support them. */ -#if defined(__SUNPRO_C) && __SUNPRO_C <= 0x510 +#ifdef __SUNPRO_C +#if __SUNPRO_C < 0x560 #define SLJIT_INLINE #else +#define SLJIT_INLINE inline +#endif /* __SUNPRO_C */ +#else #define SLJIT_INLINE __inline #endif #endif /* !SLJIT_INLINE */ @@ -319,18 +323,36 @@ extern "C" { /* Instruction cache flush. */ /****************************/ +/* + * TODO: + * + * clang >= 15 could be safe to enable below + * older versions are known to abort in some targets + * https://github.com/PhilipHazel/pcre2/issues/92 + * + * beware APPLE is known to have removed the code in iOS so + * it will need to be excempted or result in broken builds + */ #if (!defined SLJIT_CACHE_FLUSH && defined __has_builtin) -#if __has_builtin(__builtin___clear_cache) +#if __has_builtin(__builtin___clear_cache) && !defined(__clang__) +/* + * https://gcc.gnu.org/bugzilla//show_bug.cgi?id=91248 + * https://gcc.gnu.org/bugzilla//show_bug.cgi?id=93811 + * gcc's clear_cache builtin for power and sparc are broken + */ +#if !defined(SLJIT_CONFIG_PPC) && !defined(SLJIT_CONFIG_SPARC_32) #define SLJIT_CACHE_FLUSH(from, to) \ __builtin___clear_cache((char*)(from), (char*)(to)) +#endif -#endif /* __has_builtin(__builtin___clear_cache) */ +#endif /* gcc >= 10 */ #endif /* (!defined SLJIT_CACHE_FLUSH && defined __has_builtin) */ #ifndef SLJIT_CACHE_FLUSH -#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) +#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ + || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) /* Not required to implement on archs with unified caches. */ #define SLJIT_CACHE_FLUSH(from, to) @@ -340,9 +362,9 @@ extern "C" { /* Supported by all macs since Mac OS 10.5. However, it does not work on non-jailbroken iOS devices, although the compilation is successful. */ - +#include #define SLJIT_CACHE_FLUSH(from, to) \ - sys_icache_invalidate((char*)(from), (char*)(to) - (char*)(from)) + sys_icache_invalidate((void*)(from), (size_t)((char*)(to) - (char*)(from))) #elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) @@ -351,18 +373,6 @@ extern "C" { ppc_cache_flush((from), (to)) #define SLJIT_CACHE_FLUSH_OWN_IMPL 1 -#elif (defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) - -#define SLJIT_CACHE_FLUSH(from, to) \ - __builtin___clear_cache((char*)(from), (char*)(to)) - -#elif defined __ANDROID__ - -/* Android lacks __clear_cache; instead, cacheflush should be used. */ - -#define SLJIT_CACHE_FLUSH(from, to) \ - cacheflush((long)(from), (long)(to), 0) - #elif (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) /* The __clear_cache() implementation of GCC is a dummy function on Sparc. */ @@ -370,14 +380,26 @@ extern "C" { sparc_cache_flush((from), (to)) #define SLJIT_CACHE_FLUSH_OWN_IMPL 1 +#elif (defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) || defined(__clang__) + +#define SLJIT_CACHE_FLUSH(from, to) \ + __builtin___clear_cache((char*)(from), (char*)(to)) + +#elif defined __ANDROID__ + +/* Android ARMv7 with gcc lacks __clear_cache; use cacheflush instead. */ +#include +#define SLJIT_CACHE_FLUSH(from, to) \ + cacheflush((long)(from), (long)(to), 0) + #elif defined _WIN32 #define SLJIT_CACHE_FLUSH(from, to) \ - FlushInstructionCache(GetCurrentProcess(), (char*)(from), (char*)(to) - (char*)(from)) + FlushInstructionCache(GetCurrentProcess(), (void*)(from), (char*)(to) - (char*)(from)) #else -/* Calls __ARM_NR_cacheflush on ARM-Linux. */ +/* Call __ARM_NR_cacheflush on ARM-Linux or the corresponding MIPS syscall. */ #define SLJIT_CACHE_FLUSH(from, to) \ __clear_cache((char*)(from), (char*)(to)) @@ -645,18 +667,23 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_REGISTERS 12 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 9 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 7 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 #define SLJIT_LOCALS_OFFSET_BASE (compiler->locals_offset) #define SLJIT_PREF_SHIFT_REG SLJIT_R2 #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) #define SLJIT_NUMBER_OF_REGISTERS 13 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 15 #ifndef _WIN64 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 6 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 #define SLJIT_LOCALS_OFFSET_BASE 0 #else /* _WIN64 */ #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 -#define SLJIT_LOCALS_OFFSET_BASE (compiler->locals_offset) +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 10 +#define SLJIT_LOCALS_OFFSET_BASE (4 * (sljit_s32)sizeof(sljit_sw)) #endif /* !_WIN64 */ #define SLJIT_PREF_SHIFT_REG SLJIT_R3 @@ -664,31 +691,39 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_REGISTERS 12 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 14 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 #define SLJIT_LOCALS_OFFSET_BASE 0 #elif (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2) #define SLJIT_NUMBER_OF_REGISTERS 12 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 14 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 #define SLJIT_LOCALS_OFFSET_BASE 0 #elif (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) #define SLJIT_NUMBER_OF_REGISTERS 26 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 10 -#define SLJIT_LOCALS_OFFSET_BASE 0 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 30 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 +#define SLJIT_LOCALS_OFFSET_BASE (2 * (sljit_s32)sizeof(sljit_sw)) #elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) #define SLJIT_NUMBER_OF_REGISTERS 23 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 17 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 30 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 18 #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) || (defined _AIX) -#define SLJIT_LOCALS_OFFSET_BASE ((6 + 8) * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE ((6 + 8) * (sljit_s32)sizeof(sljit_sw)) #elif (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) /* Add +1 for double alignment. */ -#define SLJIT_LOCALS_OFFSET_BASE ((3 + 1) * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE ((3 + 1) * (sljit_s32)sizeof(sljit_sw)) #else -#define SLJIT_LOCALS_OFFSET_BASE (3 * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE (3 * (sljit_s32)sizeof(sljit_sw)) #endif /* SLJIT_CONFIG_PPC_64 || _AIX */ #elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) @@ -696,19 +731,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_REGISTERS 21 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -#define SLJIT_LOCALS_OFFSET_BASE (4 * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE (4 * (sljit_s32)sizeof(sljit_sw)) +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 13 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 6 #else #define SLJIT_LOCALS_OFFSET_BASE 0 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 29 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 #endif #elif (defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) #define SLJIT_NUMBER_OF_REGISTERS 18 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 14 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 14 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) /* saved registers (16), return struct pointer (1), space for 6 argument words (1), 4th double arg (2), double alignment (1). */ -#define SLJIT_LOCALS_OFFSET_BASE ((16 + 1 + 6 + 2 + 1) * sizeof(sljit_sw)) +#define SLJIT_LOCALS_OFFSET_BASE ((16 + 1 + 6 + 2 + 1) * (sljit_s32)sizeof(sljit_sw)) #endif #elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) @@ -736,12 +777,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_REGISTERS 12 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 8 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 15 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 #define SLJIT_LOCALS_OFFSET_BASE SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE #elif (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) #define SLJIT_NUMBER_OF_REGISTERS 0 #define SLJIT_NUMBER_OF_SAVED_REGISTERS 0 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 0 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 #define SLJIT_LOCALS_OFFSET_BASE 0 #endif @@ -751,13 +796,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); #define SLJIT_NUMBER_OF_SCRATCH_REGISTERS \ (SLJIT_NUMBER_OF_REGISTERS - SLJIT_NUMBER_OF_SAVED_REGISTERS) -#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 6 -#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) && (defined _WIN64) -#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 1 -#else -#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 0 -#endif - #define SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS \ (SLJIT_NUMBER_OF_FLOAT_REGISTERS - SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS) @@ -765,8 +803,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr); /* CPU status flags management. */ /********************************/ -#if (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \ - || (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \ +#if (defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM) \ + || (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) \ || (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \ || (defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) \ || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) diff --git a/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c b/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c index 6e5bf78e..92d940dd 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c +++ b/src/3rdparty/pcre2/src/sljit/sljitExecAllocator.c @@ -66,7 +66,7 @@ /* --------------------------------------------------------------------- */ /* 64 KByte. */ -#define CHUNK_SIZE 0x10000 +#define CHUNK_SIZE (sljit_uw)0x10000u /* alloc_chunk / free_chunk : @@ -112,7 +112,7 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size) static SLJIT_INLINE int get_map_jit_flag() { - sljit_sw page_size; + size_t page_size; void *ptr; struct utsname name; static int map_jit_flag = -1; @@ -139,8 +139,9 @@ static SLJIT_INLINE int get_map_jit_flag() #endif /* MAP_ANON */ #else /* !SLJIT_CONFIG_X86 */ #if !(defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM) -#error Unsupported architecture +#error "Unsupported architecture" #endif /* SLJIT_CONFIG_ARM */ +#include #include #define SLJIT_MAP_JIT (MAP_JIT) @@ -149,7 +150,11 @@ static SLJIT_INLINE int get_map_jit_flag() static SLJIT_INLINE void apple_update_wx_flags(sljit_s32 enable_exec) { +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 110000 pthread_jit_write_protect_np(enable_exec); +#else +#error "Must target Big Sur or newer" +#endif /* BigSur */ } #endif /* SLJIT_CONFIG_X86 */ #else /* !TARGET_OS_OSX */ @@ -187,10 +192,13 @@ static SLJIT_INLINE void* alloc_chunk(sljit_uw size) if (retval == MAP_FAILED) return NULL; +#ifdef __FreeBSD__ + /* HardenedBSD's mmap lies, so check permissions again */ if (mprotect(retval, size, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) { munmap(retval, size); return NULL; } +#endif /* FreeBSD */ SLJIT_UPDATE_WX_FLAGS(retval, (uint8_t *)retval + size, 0); @@ -227,7 +235,7 @@ struct free_block { #define AS_FREE_BLOCK(base, offset) \ ((struct free_block*)(((sljit_u8*)base) + offset)) #define MEM_START(base) ((void*)(((sljit_u8*)base) + sizeof(struct block_header))) -#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7) & ~7) +#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7u) & ~(sljit_uw)7) static struct free_block* free_blocks; static sljit_uw allocated_size; diff --git a/src/3rdparty/pcre2/src/sljit/sljitLir.c b/src/3rdparty/pcre2/src/sljit/sljitLir.c index a24a99ab..313a061d 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitLir.c +++ b/src/3rdparty/pcre2/src/sljit/sljitLir.c @@ -90,26 +90,28 @@ #if !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) +#define SSIZE_OF(type) ((sljit_s32)sizeof(sljit_ ## type)) + #define VARIABLE_FLAG_SHIFT (10) #define VARIABLE_FLAG_MASK (0x3f << VARIABLE_FLAG_SHIFT) #define GET_FLAG_TYPE(op) ((op) >> VARIABLE_FLAG_SHIFT) #define GET_OPCODE(op) \ - ((op) & ~(SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) + ((op) & ~(SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) #define HAS_FLAGS(op) \ ((op) & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) #define GET_ALL_FLAGS(op) \ - ((op) & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) + ((op) & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE) #define TYPE_CAST_NEEDED(op) \ ((op) >= SLJIT_MOV_U8 && (op) <= SLJIT_MOV_S32) -#else +#else /* !SLJIT_64BIT_ARCHITECTURE */ #define TYPE_CAST_NEEDED(op) \ ((op) >= SLJIT_MOV_U8 && (op) <= SLJIT_MOV_S16) -#endif +#endif /* SLJIT_64BIT_ARCHITECTURE */ #define BUF_SIZE 4096 @@ -126,11 +128,10 @@ #define TO_OFFS_REG(reg) ((reg) << 8) /* When reg cannot be unused. */ #define FAST_IS_REG(reg) ((reg) <= REG_MASK) -/* When reg can be unused. */ -#define SLOW_IS_REG(reg) ((reg) > 0 && (reg) <= REG_MASK) /* Mask for argument types. */ -#define SLJIT_DEF_MASK ((1 << SLJIT_DEF_SHIFT) - 1) +#define SLJIT_ARG_MASK 0x7 +#define SLJIT_ARG_FULL_MASK (SLJIT_ARG_MASK | SLJIT_ARG_TYPE_SCRATCH_REG) /* Jump flags. */ #define JUMP_LABEL 0x1 @@ -247,8 +248,11 @@ #define GET_SAVED_REGISTERS_SIZE(scratches, saveds, extra) \ (((scratches < SLJIT_NUMBER_OF_SCRATCH_REGISTERS ? 0 : (scratches - SLJIT_NUMBER_OF_SCRATCH_REGISTERS)) + \ - (saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? saveds : SLJIT_NUMBER_OF_SAVED_REGISTERS) + \ - extra) * sizeof(sljit_sw)) + (saveds) + (sljit_s32)(extra)) * (sljit_s32)sizeof(sljit_sw)) + +#define GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, size) \ + (((fscratches < SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS ? 0 : (fscratches - SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS)) + \ + (fsaveds)) * (sljit_s32)(size)) #define ADJUST_LOCAL_OFFSET(p, i) \ if ((p) == (SLJIT_MEM1(SLJIT_SP))) \ @@ -379,9 +383,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allo && (sizeof(sljit_sw) == 4 || sizeof(sljit_sw) == 8) && (sizeof(sljit_uw) == 4 || sizeof(sljit_uw) == 8), invalid_integer_types); - SLJIT_COMPILE_ASSERT(SLJIT_I32_OP == SLJIT_F32_OP, - int_op_and_single_op_must_be_the_same); - SLJIT_COMPILE_ASSERT(SLJIT_REWRITABLE_JUMP != SLJIT_F32_OP, + SLJIT_COMPILE_ASSERT(SLJIT_REWRITABLE_JUMP != SLJIT_32, rewritable_jump_and_single_op_must_not_be_the_same); SLJIT_COMPILE_ASSERT(!(SLJIT_EQUAL & 0x1) && !(SLJIT_LESS & 0x1) && !(SLJIT_EQUAL_F64 & 0x1) && !(SLJIT_JUMP & 0x1), conditional_flags_must_be_even_numbers); @@ -415,7 +417,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allo compiler->local_size = -1; #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - compiler->args = -1; + compiler->args_size = -1; #endif #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) @@ -439,6 +441,13 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_create_compiler(void *allo compiler->delay_slot = UNMOVABLE_INS; #endif +#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \ + || (defined SLJIT_DEBUG && SLJIT_DEBUG) + compiler->last_flags = 0; + compiler->last_return = -1; + compiler->logical_local_size = 0; +#endif + #if (defined SLJIT_NEEDS_COMPILER_INIT && SLJIT_NEEDS_COMPILER_INIT) if (!compiler_initialized) { init_compiler(); @@ -488,7 +497,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code, void *exec_allocator_d SLJIT_UNUSED_ARG(exec_allocator_data); /* Remove thumb mode flag. */ - SLJIT_FREE_EXEC((void*)((sljit_uw)code & ~0x1), exec_allocator_data); + SLJIT_FREE_EXEC((void*)((sljit_uw)code & ~(sljit_uw)0x1), exec_allocator_data); } #elif (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code, void *exec_allocator_data) @@ -511,7 +520,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* code, void *exec_allocator_d SLJIT_API_FUNC_ATTRIBUTE void sljit_set_label(struct sljit_jump *jump, struct sljit_label* label) { if (SLJIT_LIKELY(!!jump) && SLJIT_LIKELY(!!label)) { - jump->flags &= ~JUMP_ADDR; + jump->flags &= (sljit_uw)~JUMP_ADDR; jump->flags |= JUMP_LABEL; jump->u.label = label; } @@ -520,7 +529,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_label(struct sljit_jump *jump, struct sl SLJIT_API_FUNC_ATTRIBUTE void sljit_set_target(struct sljit_jump *jump, sljit_uw target) { if (SLJIT_LIKELY(!!jump)) { - jump->flags &= ~JUMP_LABEL; + jump->flags &= (sljit_uw)~JUMP_LABEL; jump->flags |= JUMP_ADDR; jump->u.target = target; } @@ -533,7 +542,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_put_label(struct sljit_put_label *put_la } #define SLJIT_CURRENT_FLAGS_ALL \ - (SLJIT_CURRENT_FLAGS_I32_OP | SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE) + (SLJIT_CURRENT_FLAGS_32 | SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB | SLJIT_CURRENT_FLAGS_COMPARE) SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler, sljit_s32 current_flags) { @@ -547,7 +556,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *com #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->last_flags = 0; if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_SET_Z | SLJIT_CURRENT_FLAGS_ALL)) == 0) { - compiler->last_flags = GET_FLAG_TYPE(current_flags) | (current_flags & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(current_flags) | (current_flags & (SLJIT_32 | SLJIT_SET_Z)); } #endif } @@ -607,7 +616,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_alloc_memory(struct sljit_compiler *compile return NULL; size = (size + 3) & ~3; #endif - return ensure_abuf(compiler, size); + return ensure_abuf(compiler, (sljit_uw)size); } static SLJIT_INLINE void reverse_buf(struct sljit_compiler *compiler) @@ -626,20 +635,6 @@ static SLJIT_INLINE void reverse_buf(struct sljit_compiler *compiler) compiler->buf = prev; } -static SLJIT_INLINE sljit_s32 get_arg_count(sljit_s32 arg_types) -{ - sljit_s32 arg_count = 0; - - arg_types >>= SLJIT_DEF_SHIFT; - while (arg_types) { - arg_count++; - arg_types >>= SLJIT_DEF_SHIFT; - } - - return arg_count; -} - - /* Only used in RISC architectures where the instruction size is constant */ #if !(defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) @@ -679,6 +674,7 @@ static SLJIT_INLINE void set_emit_enter(struct sljit_compiler *compiler, compiler->fscratches = fscratches; compiler->fsaveds = fsaveds; #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->last_return = args & SLJIT_ARG_MASK; compiler->logical_local_size = local_size; #endif } @@ -696,6 +692,7 @@ static SLJIT_INLINE void set_set_context(struct sljit_compiler *compiler, compiler->fscratches = fscratches; compiler->fsaveds = fsaveds; #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->last_return = args & SLJIT_ARG_MASK; compiler->logical_local_size = local_size; #endif } @@ -711,7 +708,7 @@ static SLJIT_INLINE void set_label(struct sljit_label *label, struct sljit_compi compiler->last_label = label; } -static SLJIT_INLINE void set_jump(struct sljit_jump *jump, struct sljit_compiler *compiler, sljit_s32 flags) +static SLJIT_INLINE void set_jump(struct sljit_jump *jump, struct sljit_compiler *compiler, sljit_u32 flags) { jump->next = NULL; jump->flags = flags; @@ -751,6 +748,58 @@ static SLJIT_INLINE void set_put_label(struct sljit_put_label *put_label, struct #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) +static sljit_s32 function_check_arguments(sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches) +{ + sljit_s32 word_arg_count, scratch_arg_end, saved_arg_count, float_arg_count, curr_type; + + curr_type = (arg_types & SLJIT_ARG_FULL_MASK); + + if (curr_type >= SLJIT_ARG_TYPE_F64) { + if (curr_type > SLJIT_ARG_TYPE_F32 || fscratches == 0) + return 0; + } else if (curr_type >= SLJIT_ARG_TYPE_W) { + if (scratches == 0) + return 0; + } + + arg_types >>= SLJIT_ARG_SHIFT; + + word_arg_count = 0; + scratch_arg_end = 0; + saved_arg_count = 0; + float_arg_count = 0; + while (arg_types != 0) { + if (word_arg_count + float_arg_count >= 4) + return 0; + + curr_type = (arg_types & SLJIT_ARG_MASK); + + if (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) { + if (saveds == -1 || curr_type < SLJIT_ARG_TYPE_W || curr_type > SLJIT_ARG_TYPE_P) + return 0; + + word_arg_count++; + scratch_arg_end = word_arg_count; + } else { + if (curr_type < SLJIT_ARG_TYPE_W || curr_type > SLJIT_ARG_TYPE_F32) + return 0; + + if (curr_type < SLJIT_ARG_TYPE_F64) { + word_arg_count++; + saved_arg_count++; + } else + float_arg_count++; + } + + arg_types >>= SLJIT_ARG_SHIFT; + } + + if (saveds == -1) + return (word_arg_count <= scratches && float_arg_count <= fscratches); + + return (saved_arg_count <= saveds && scratch_arg_end <= scratches && float_arg_count <= fscratches); +} + #define FUNCTION_CHECK_IS_REG(r) \ (((r) >= SLJIT_R0 && (r) < (SLJIT_R0 + compiler->scratches)) \ || ((r) > (SLJIT_S0 - compiler->saveds) && (r) <= SLJIT_S0)) @@ -773,14 +822,14 @@ static sljit_s32 function_check_src_mem(struct sljit_compiler *compiler, sljit_s if (!(p & SLJIT_MEM)) return 0; - if (!((p & REG_MASK) == SLJIT_UNUSED || FUNCTION_CHECK_IS_REG(p & REG_MASK))) + if (!(!(p & REG_MASK) || FUNCTION_CHECK_IS_REG(p & REG_MASK))) return 0; if (CHECK_IF_VIRTUAL_REGISTER(p & REG_MASK)) return 0; if (p & OFFS_REG_MASK) { - if ((p & REG_MASK) == SLJIT_UNUSED) + if (!(p & REG_MASK)) return 0; if (!(FUNCTION_CHECK_IS_REG(OFFS_REG(p)))) @@ -819,12 +868,12 @@ static sljit_s32 function_check_src(struct sljit_compiler *compiler, sljit_s32 p #define FUNCTION_CHECK_SRC(p, i) \ CHECK_ARGUMENT(function_check_src(compiler, p, i)); -static sljit_s32 function_check_dst(struct sljit_compiler *compiler, sljit_s32 p, sljit_sw i, sljit_s32 unused) +static sljit_s32 function_check_dst(struct sljit_compiler *compiler, sljit_s32 p, sljit_sw i) { if (compiler->scratches == -1 || compiler->saveds == -1) return 0; - if (FUNCTION_CHECK_IS_REG(p) || ((unused) && (p) == SLJIT_UNUSED)) + if (FUNCTION_CHECK_IS_REG(p)) return (i == 0); if (p == SLJIT_MEM1(SLJIT_SP)) @@ -833,8 +882,8 @@ static sljit_s32 function_check_dst(struct sljit_compiler *compiler, sljit_s32 p return function_check_src_mem(compiler, p, i); } -#define FUNCTION_CHECK_DST(p, i, unused) \ - CHECK_ARGUMENT(function_check_dst(compiler, p, i, unused)); +#define FUNCTION_CHECK_DST(p, i) \ + CHECK_ARGUMENT(function_check_dst(compiler, p, i)); static sljit_s32 function_fcheck(struct sljit_compiler *compiler, sljit_s32 p, sljit_sw i) { @@ -910,10 +959,8 @@ static void sljit_verbose_param(struct sljit_compiler *compiler, sljit_s32 p, sl } else fprintf(compiler->verbose, "[#%" SLJIT_PRINT_D "d]", (i)); - } else if (p) + } else sljit_verbose_reg(compiler, p); - else - fprintf(compiler->verbose, "unused"); } static void sljit_verbose_fparam(struct sljit_compiler *compiler, sljit_s32 p, sljit_sw i) @@ -940,63 +987,61 @@ static void sljit_verbose_fparam(struct sljit_compiler *compiler, sljit_s32 p, s } static const char* op0_names[] = { - (char*)"breakpoint", (char*)"nop", (char*)"lmul.uw", (char*)"lmul.sw", - (char*)"divmod.u", (char*)"divmod.s", (char*)"div.u", (char*)"div.s", - (char*)"endbr", (char*)"skip_frames_before_return" + "breakpoint", "nop", "lmul.uw", "lmul.sw", + "divmod.u", "divmod.s", "div.u", "div.s", + "endbr", "skip_frames_before_return" }; static const char* op1_names[] = { - (char*)"", (char*)".u8", (char*)".s8", (char*)".u16", - (char*)".s16", (char*)".u32", (char*)".s32", (char*)".p", - (char*)"", (char*)".u8", (char*)".s8", (char*)".u16", - (char*)".s16", (char*)".u32", (char*)".s32", (char*)".p", - (char*)"not", (char*)"neg", (char*)"clz", + "", ".u8", ".s8", ".u16", + ".s16", ".u32", ".s32", "32", + ".p", "not", "clz", }; static const char* op2_names[] = { - (char*)"add", (char*)"addc", (char*)"sub", (char*)"subc", - (char*)"mul", (char*)"and", (char*)"or", (char*)"xor", - (char*)"shl", (char*)"lshr", (char*)"ashr", + "add", "addc", "sub", "subc", + "mul", "and", "or", "xor", + "shl", "lshr", "ashr", }; static const char* op_src_names[] = { - (char*)"fast_return", (char*)"skip_frames_before_fast_return", - (char*)"prefetch_l1", (char*)"prefetch_l2", - (char*)"prefetch_l3", (char*)"prefetch_once", + "fast_return", "skip_frames_before_fast_return", + "prefetch_l1", "prefetch_l2", + "prefetch_l3", "prefetch_once", }; static const char* fop1_names[] = { - (char*)"mov", (char*)"conv", (char*)"conv", (char*)"conv", - (char*)"conv", (char*)"conv", (char*)"cmp", (char*)"neg", - (char*)"abs", + "mov", "conv", "conv", "conv", + "conv", "conv", "cmp", "neg", + "abs", }; static const char* fop2_names[] = { - (char*)"add", (char*)"sub", (char*)"mul", (char*)"div" + "add", "sub", "mul", "div" }; #define JUMP_POSTFIX(type) \ - ((type & 0xff) <= SLJIT_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \ - : ((type & 0xff) <= SLJIT_ORDERED_F64 ? ((type & SLJIT_F32_OP) ? ".f32" : ".f64") : "")) + ((type & 0xff) <= SLJIT_NOT_OVERFLOW ? ((type & SLJIT_32) ? "32" : "") \ + : ((type & 0xff) <= SLJIT_ORDERED_F64 ? ((type & SLJIT_32) ? ".f32" : ".f64") : "")) -static char* jump_names[] = { - (char*)"equal", (char*)"not_equal", - (char*)"less", (char*)"greater_equal", - (char*)"greater", (char*)"less_equal", - (char*)"sig_less", (char*)"sig_greater_equal", - (char*)"sig_greater", (char*)"sig_less_equal", - (char*)"overflow", (char*)"not_overflow", - (char*)"carry", (char*)"", - (char*)"equal", (char*)"not_equal", - (char*)"less", (char*)"greater_equal", - (char*)"greater", (char*)"less_equal", - (char*)"unordered", (char*)"ordered", - (char*)"jump", (char*)"fast_call", - (char*)"call", (char*)"call.cdecl" +static const char* jump_names[] = { + "equal", "not_equal", + "less", "greater_equal", + "greater", "less_equal", + "sig_less", "sig_greater_equal", + "sig_greater", "sig_less_equal", + "overflow", "not_overflow", + "carry", "", + "equal", "not_equal", + "less", "greater_equal", + "greater", "less_equal", + "unordered", "ordered", + "jump", "fast_call", + "call", "call.cdecl" }; -static char* call_arg_names[] = { - (char*)"void", (char*)"sw", (char*)"uw", (char*)"s32", (char*)"u32", (char*)"f32", (char*)"f64" +static const char* call_arg_names[] = { + "void", "w", "32", "p", "f64", "f32" }; #endif /* SLJIT_VERBOSE */ @@ -1032,48 +1077,40 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_enter(struct sljit_compil sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { -#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - sljit_s32 types, arg_count, curr_type; -#endif - SLJIT_UNUSED_ARG(compiler); #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(options & ~SLJIT_F64_ALIGNMENT)); + CHECK_ARGUMENT(!(options & ~SLJIT_ENTER_CDECL)); CHECK_ARGUMENT(scratches >= 0 && scratches <= SLJIT_NUMBER_OF_REGISTERS); - CHECK_ARGUMENT(saveds >= 0 && saveds <= SLJIT_NUMBER_OF_REGISTERS); + CHECK_ARGUMENT(saveds >= 0 && saveds <= SLJIT_NUMBER_OF_SAVED_REGISTERS); CHECK_ARGUMENT(scratches + saveds <= SLJIT_NUMBER_OF_REGISTERS); CHECK_ARGUMENT(fscratches >= 0 && fscratches <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); - CHECK_ARGUMENT(fsaveds >= 0 && fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); + CHECK_ARGUMENT(fsaveds >= 0 && fsaveds <= SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS); CHECK_ARGUMENT(fscratches + fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); CHECK_ARGUMENT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE); - CHECK_ARGUMENT((arg_types & SLJIT_DEF_MASK) == 0); - - types = (arg_types >> SLJIT_DEF_SHIFT); - arg_count = 0; - while (types != 0 && arg_count < 3) { - curr_type = (types & SLJIT_DEF_MASK); - CHECK_ARGUMENT(curr_type == SLJIT_ARG_TYPE_SW || curr_type == SLJIT_ARG_TYPE_UW); - arg_count++; - types >>= SLJIT_DEF_SHIFT; - } - CHECK_ARGUMENT(arg_count <= saveds && types == 0); + CHECK_ARGUMENT((arg_types & SLJIT_ARG_FULL_MASK) < SLJIT_ARG_TYPE_F64); + CHECK_ARGUMENT(function_check_arguments(arg_types, scratches, saveds, fscratches)); compiler->last_flags = 0; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " enter options:%s args[", (options & SLJIT_F64_ALIGNMENT) ? "f64_align" : ""); + fprintf(compiler->verbose, " enter ret[%s", call_arg_names[arg_types & SLJIT_ARG_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; - while (arg_types) { - fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_DEF_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; - if (arg_types) - fprintf(compiler->verbose, ","); + arg_types >>= SLJIT_ARG_SHIFT; + if (arg_types) { + fprintf(compiler->verbose, "], args["); + do { + fprintf(compiler->verbose, "%s%s", call_arg_names[arg_types & SLJIT_ARG_MASK], + (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) ? "_r" : ""); + arg_types >>= SLJIT_ARG_SHIFT; + if (arg_types) + fprintf(compiler->verbose, ","); + } while (arg_types); } - fprintf(compiler->verbose, "] scratches:%d saveds:%d fscratches:%d fsaveds:%d local_size:%d\n", + fprintf(compiler->verbose, "],%s scratches:%d, saveds:%d, fscratches:%d, fsaveds:%d, local_size:%d\n", + (options & SLJIT_ENTER_CDECL) ? " enter:cdecl," : "", scratches, saveds, fscratches, fsaveds, local_size); } #endif @@ -1084,74 +1121,94 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_set_context(struct sljit_compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { -#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - sljit_s32 types, arg_count, curr_type; -#endif - SLJIT_UNUSED_ARG(compiler); #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(options & ~SLJIT_F64_ALIGNMENT)); + CHECK_ARGUMENT(!(options & ~SLJIT_ENTER_CDECL)); CHECK_ARGUMENT(scratches >= 0 && scratches <= SLJIT_NUMBER_OF_REGISTERS); - CHECK_ARGUMENT(saveds >= 0 && saveds <= SLJIT_NUMBER_OF_REGISTERS); + CHECK_ARGUMENT(saveds >= 0 && saveds <= SLJIT_NUMBER_OF_SAVED_REGISTERS); CHECK_ARGUMENT(scratches + saveds <= SLJIT_NUMBER_OF_REGISTERS); CHECK_ARGUMENT(fscratches >= 0 && fscratches <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); - CHECK_ARGUMENT(fsaveds >= 0 && fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); + CHECK_ARGUMENT(fsaveds >= 0 && fsaveds <= SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS); CHECK_ARGUMENT(fscratches + fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS); CHECK_ARGUMENT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE); - - types = (arg_types >> SLJIT_DEF_SHIFT); - arg_count = 0; - while (types != 0 && arg_count < 3) { - curr_type = (types & SLJIT_DEF_MASK); - CHECK_ARGUMENT(curr_type == SLJIT_ARG_TYPE_SW || curr_type == SLJIT_ARG_TYPE_UW); - arg_count++; - types >>= SLJIT_DEF_SHIFT; - } - CHECK_ARGUMENT(arg_count <= saveds && types == 0); + CHECK_ARGUMENT((arg_types & SLJIT_ARG_FULL_MASK) < SLJIT_ARG_TYPE_F64); + CHECK_ARGUMENT(function_check_arguments(arg_types, scratches, saveds, fscratches)); compiler->last_flags = 0; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " set_context options:%s args[", (options & SLJIT_F64_ALIGNMENT) ? "f64_align" : ""); + fprintf(compiler->verbose, " set_context ret[%s", call_arg_names[arg_types & SLJIT_ARG_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; - while (arg_types) { - fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_DEF_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; - if (arg_types) - fprintf(compiler->verbose, ","); + arg_types >>= SLJIT_ARG_SHIFT; + if (arg_types) { + fprintf(compiler->verbose, "], args["); + do { + fprintf(compiler->verbose, "%s%s", call_arg_names[arg_types & SLJIT_ARG_MASK], + (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) ? "_r" : ""); + arg_types >>= SLJIT_ARG_SHIFT; + if (arg_types) + fprintf(compiler->verbose, ","); + } while (arg_types); } - fprintf(compiler->verbose, "] scratches:%d saveds:%d fscratches:%d fsaveds:%d local_size:%d\n", + fprintf(compiler->verbose, "],%s scratches:%d, saveds:%d, fscratches:%d, fsaveds:%d, local_size:%d\n", + (options & SLJIT_ENTER_CDECL) ? " enter:cdecl," : "", scratches, saveds, fscratches, fsaveds, local_size); } #endif CHECK_RETURN_OK; } +static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_return_void(struct sljit_compiler *compiler) +{ + if (SLJIT_UNLIKELY(compiler->skip_checks)) { + compiler->skip_checks = 0; + CHECK_RETURN_OK; + } + +#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + CHECK_ARGUMENT(compiler->last_return == SLJIT_ARG_TYPE_VOID); +#endif + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) + if (SLJIT_UNLIKELY(!!compiler->verbose)) { + fprintf(compiler->verbose, " return_void\n"); + } +#endif + CHECK_RETURN_OK; +} + static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) CHECK_ARGUMENT(compiler->scratches >= 0); - if (op != SLJIT_UNUSED) { - CHECK_ARGUMENT(op >= SLJIT_MOV && op <= SLJIT_MOV_P); - FUNCTION_CHECK_SRC(src, srcw); + + switch (compiler->last_return) { + case SLJIT_ARG_TYPE_W: + CHECK_ARGUMENT(op >= SLJIT_MOV && op <= SLJIT_MOV_S32); + break; + case SLJIT_ARG_TYPE_32: + CHECK_ARGUMENT(op == SLJIT_MOV32 || (op >= SLJIT_MOV32_U8 && op <= SLJIT_MOV32_S16)); + break; + case SLJIT_ARG_TYPE_P: + CHECK_ARGUMENT(op == SLJIT_MOV_P); + break; + default: + /* Context not initialized, void, etc. */ + CHECK_ARGUMENT(0); + break; } - else - CHECK_ARGUMENT(src == 0 && srcw == 0); + FUNCTION_CHECK_SRC(src, srcw); compiler->last_flags = 0; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - if (op == SLJIT_UNUSED) - fprintf(compiler->verbose, " return\n"); - else { - fprintf(compiler->verbose, " return%s ", op1_names[op - SLJIT_OP1_BASE]); - sljit_verbose_param(compiler, src, srcw); - fprintf(compiler->verbose, "\n"); - } + fprintf(compiler->verbose, " return%s%s ", !(op & SLJIT_32) ? "" : "32", + op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE]); + sljit_verbose_param(compiler, src, srcw); + fprintf(compiler->verbose, "\n"); } #endif CHECK_RETURN_OK; @@ -1160,7 +1217,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_return(struct sljit_compi static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); compiler->last_flags = 0; #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) @@ -1177,7 +1234,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op0(struct sljit_compiler { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) CHECK_ARGUMENT((op >= SLJIT_BREAKPOINT && op <= SLJIT_LMUL_SW) - || ((op & ~SLJIT_I32_OP) >= SLJIT_DIVMOD_UW && (op & ~SLJIT_I32_OP) <= SLJIT_DIV_SW) + || ((op & ~SLJIT_32) >= SLJIT_DIVMOD_UW && (op & ~SLJIT_32) <= SLJIT_DIV_SW) || (op >= SLJIT_ENDBR && op <= SLJIT_SKIP_FRAMES_BEFORE_RETURN)); CHECK_ARGUMENT(GET_OPCODE(op) < SLJIT_LMUL_UW || GET_OPCODE(op) >= SLJIT_ENDBR || compiler->scratches >= 2); if ((GET_OPCODE(op) >= SLJIT_LMUL_UW && GET_OPCODE(op) <= SLJIT_DIV_SW) || op == SLJIT_SKIP_FRAMES_BEFORE_RETURN) @@ -1188,7 +1245,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op0(struct sljit_compiler { fprintf(compiler->verbose, " %s", op0_names[GET_OPCODE(op) - SLJIT_OP0_BASE]); if (GET_OPCODE(op) >= SLJIT_DIVMOD_UW && GET_OPCODE(op) <= SLJIT_DIV_SW) { - fprintf(compiler->verbose, (op & SLJIT_I32_OP) ? "32" : "w"); + fprintf(compiler->verbose, (op & SLJIT_32) ? "32" : "w"); } fprintf(compiler->verbose, "\n"); } @@ -1210,43 +1267,39 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op1(struct sljit_compiler switch (GET_OPCODE(op)) { case SLJIT_NOT: - /* Only SLJIT_I32_OP and SLJIT_SET_Z are allowed. */ + /* Only SLJIT_32 and SLJIT_SET_Z are allowed. */ CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)); break; - case SLJIT_NEG: - CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK) - || GET_FLAG_TYPE(op) == SLJIT_OVERFLOW); - break; case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_P: /* Nothing allowed */ - CHECK_ARGUMENT(!(op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK))); + CHECK_ARGUMENT(!(op & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK))); break; default: - /* Only SLJIT_I32_OP is allowed. */ + /* Only SLJIT_32 is allowed. */ CHECK_ARGUMENT(!(op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK))); break; } - FUNCTION_CHECK_DST(dst, dstw, HAS_FLAGS(op)); + FUNCTION_CHECK_DST(dst, dstw); FUNCTION_CHECK_SRC(src, srcw); if (GET_OPCODE(op) >= SLJIT_NOT) { CHECK_ARGUMENT(src != SLJIT_IMM); - compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_32 | SLJIT_SET_Z)); } #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { if (GET_OPCODE(op) <= SLJIT_MOV_P) { - fprintf(compiler->verbose, " mov%s%s ", !(op & SLJIT_I32_OP) ? "" : "32", - (op != SLJIT_MOV32) ? op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE] : ""); + fprintf(compiler->verbose, " mov%s%s ", !(op & SLJIT_32) ? "" : "32", + op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE]); } else { - fprintf(compiler->verbose, " %s%s%s%s%s ", op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE], !(op & SLJIT_I32_OP) ? "" : "32", + fprintf(compiler->verbose, " %s%s%s%s%s ", op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE], !(op & SLJIT_32) ? "" : "32", !(op & SLJIT_SET_Z) ? "" : ".z", !(op & VARIABLE_FLAG_MASK) ? "" : ".", !(op & VARIABLE_FLAG_MASK) ? "" : jump_names[GET_FLAG_TYPE(op)]); } @@ -1260,7 +1313,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op1(struct sljit_compiler CHECK_RETURN_OK; } -static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, +static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 unset, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) @@ -1302,24 +1355,31 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK) || GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)); CHECK_ARGUMENT((compiler->last_flags & 0xff) == GET_FLAG_TYPE(SLJIT_SET_CARRY)); - CHECK_ARGUMENT((op & SLJIT_I32_OP) == (compiler->last_flags & SLJIT_I32_OP)); + CHECK_ARGUMENT((op & SLJIT_32) == (compiler->last_flags & SLJIT_32)); break; default: SLJIT_UNREACHABLE(); break; } - FUNCTION_CHECK_DST(dst, dstw, HAS_FLAGS(op)); + if (unset) { + CHECK_ARGUMENT(HAS_FLAGS(op)); + } else { + FUNCTION_CHECK_DST(dst, dstw); + } FUNCTION_CHECK_SRC(src1, src1w); FUNCTION_CHECK_SRC(src2, src2w); - compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_32 | SLJIT_SET_Z)); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " %s%s%s%s%s ", op2_names[GET_OPCODE(op) - SLJIT_OP2_BASE], !(op & SLJIT_I32_OP) ? "" : "32", + fprintf(compiler->verbose, " %s%s%s%s%s ", op2_names[GET_OPCODE(op) - SLJIT_OP2_BASE], !(op & SLJIT_32) ? "" : "32", !(op & SLJIT_SET_Z) ? "" : ".z", !(op & VARIABLE_FLAG_MASK) ? "" : ".", !(op & VARIABLE_FLAG_MASK) ? "" : jump_names[GET_FLAG_TYPE(op)]); - sljit_verbose_param(compiler, dst, dstw); + if (unset) + fprintf(compiler->verbose, "unset"); + else + sljit_verbose_param(compiler, dst, dstw); fprintf(compiler->verbose, ", "); sljit_verbose_param(compiler, src1, src1w); fprintf(compiler->verbose, ", "); @@ -1376,10 +1436,10 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_get_float_register_index(sljit } static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) - int i; + sljit_u32 i; #endif SLJIT_UNUSED_ARG(compiler); @@ -1431,10 +1491,10 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1(struct sljit_compile if (SLJIT_UNLIKELY(!!compiler->verbose)) { if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) fprintf(compiler->verbose, " %s%s ", fop1_names[SLJIT_CONV_F64_FROM_F32 - SLJIT_FOP1_BASE], - (op & SLJIT_F32_OP) ? ".f32.from.f64" : ".f64.from.f32"); + (op & SLJIT_32) ? ".f32.from.f64" : ".f64.from.f32"); else fprintf(compiler->verbose, " %s%s ", fop1_names[GET_OPCODE(op) - SLJIT_FOP1_BASE], - (op & SLJIT_F32_OP) ? ".f32" : ".f64"); + (op & SLJIT_32) ? ".f32" : ".f64"); sljit_verbose_fparam(compiler, dst, dstw); fprintf(compiler->verbose, ", "); @@ -1450,7 +1510,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1_cmp(struct sljit_com sljit_s32 src2, sljit_sw src2w) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_32 | SLJIT_SET_Z)); #endif if (SLJIT_UNLIKELY(compiler->skip_checks)) { @@ -1469,7 +1529,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1_cmp(struct sljit_com #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " %s%s", fop1_names[SLJIT_CMP_F64 - SLJIT_FOP1_BASE], (op & SLJIT_F32_OP) ? ".f32" : ".f64"); + fprintf(compiler->verbose, " %s%s", fop1_names[SLJIT_CMP_F64 - SLJIT_FOP1_BASE], (op & SLJIT_32) ? ".f32" : ".f64"); if (op & VARIABLE_FLAG_MASK) { fprintf(compiler->verbose, ".%s_f", jump_names[GET_FLAG_TYPE(op)]); } @@ -1497,13 +1557,13 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1_conv_sw_from_f64(str CHECK_ARGUMENT(GET_OPCODE(op) >= SLJIT_CONV_SW_FROM_F64 && GET_OPCODE(op) <= SLJIT_CONV_S32_FROM_F64); CHECK_ARGUMENT(!(op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK))); FUNCTION_FCHECK(src, srcw); - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " %s%s.from%s ", fop1_names[GET_OPCODE(op) - SLJIT_FOP1_BASE], (GET_OPCODE(op) == SLJIT_CONV_S32_FROM_F64) ? ".s32" : ".sw", - (op & SLJIT_F32_OP) ? ".f32" : ".f64"); + (op & SLJIT_32) ? ".f32" : ".f64"); sljit_verbose_param(compiler, dst, dstw); fprintf(compiler->verbose, ", "); sljit_verbose_fparam(compiler, src, srcw); @@ -1532,7 +1592,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop1_conv_f64_from_sw(str #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " %s%s.from%s ", fop1_names[GET_OPCODE(op) - SLJIT_FOP1_BASE], - (op & SLJIT_F32_OP) ? ".f32" : ".f64", + (op & SLJIT_32) ? ".f32" : ".f64", (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32) ? ".s32" : ".sw"); sljit_verbose_fparam(compiler, dst, dstw); fprintf(compiler->verbose, ", "); @@ -1558,7 +1618,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fop2(struct sljit_compile #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " %s%s ", fop2_names[GET_OPCODE(op) - SLJIT_FOP2_BASE], (op & SLJIT_F32_OP) ? ".f32" : ".f64"); + fprintf(compiler->verbose, " %s%s ", fop2_names[GET_OPCODE(op) - SLJIT_FOP2_BASE], (op & SLJIT_32) ? ".f32" : ".f64"); sljit_verbose_fparam(compiler, dst, dstw); fprintf(compiler->verbose, ", "); sljit_verbose_fparam(compiler, src1, src1w); @@ -1598,15 +1658,17 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_jump(struct sljit_compile } #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_I32_OP))); - CHECK_ARGUMENT((type & 0xff) != GET_FLAG_TYPE(SLJIT_SET_CARRY) && (type & 0xff) != (GET_FLAG_TYPE(SLJIT_SET_CARRY) + 1)); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL && (type & 0xff) <= SLJIT_FAST_CALL); - CHECK_ARGUMENT((type & 0xff) < SLJIT_JUMP || !(type & SLJIT_I32_OP)); + CHECK_ARGUMENT((type & 0xff) < SLJIT_JUMP || !(type & SLJIT_32)); if ((type & 0xff) < SLJIT_JUMP) { if ((type & 0xff) <= SLJIT_NOT_ZERO) CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); - else + else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) { + CHECK_ARGUMENT((type & 0xff) == SLJIT_CARRY || (type & 0xff) == SLJIT_NOT_CARRY); + compiler->last_flags = 0; + } else CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff) || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)); } @@ -1623,49 +1685,27 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_call(struct sljit_compile sljit_s32 arg_types) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - sljit_s32 i, types, curr_type, scratches, fscratches; - - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_CALL_RETURN))); CHECK_ARGUMENT((type & 0xff) == SLJIT_CALL || (type & 0xff) == SLJIT_CALL_CDECL); + CHECK_ARGUMENT(function_check_arguments(arg_types, compiler->scratches, -1, compiler->fscratches)); - types = arg_types; - scratches = 0; - fscratches = 0; - for (i = 0; i < 5; i++) { - curr_type = (types & SLJIT_DEF_MASK); - CHECK_ARGUMENT(curr_type <= SLJIT_ARG_TYPE_F64); - if (i > 0) { - if (curr_type == 0) { - break; - } - if (curr_type >= SLJIT_ARG_TYPE_F32) - fscratches++; - else - scratches++; - } else { - if (curr_type >= SLJIT_ARG_TYPE_F32) { - CHECK_ARGUMENT(compiler->fscratches > 0); - } else if (curr_type >= SLJIT_ARG_TYPE_SW) { - CHECK_ARGUMENT(compiler->scratches > 0); - } - } - types >>= SLJIT_DEF_SHIFT; + if (type & SLJIT_CALL_RETURN) { + CHECK_ARGUMENT((arg_types & SLJIT_ARG_MASK) == compiler->last_return); } - CHECK_ARGUMENT(compiler->scratches >= scratches); - CHECK_ARGUMENT(compiler->fscratches >= fscratches); - CHECK_ARGUMENT(types == 0); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { - fprintf(compiler->verbose, " %s%s ret[%s", jump_names[type & 0xff], - !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", call_arg_names[arg_types & SLJIT_DEF_MASK]); + fprintf(compiler->verbose, " %s%s%s ret[%s", jump_names[type & 0xff], + !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", + !(type & SLJIT_CALL_RETURN) ? "" : ".ret", + call_arg_names[arg_types & SLJIT_ARG_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; if (arg_types) { fprintf(compiler->verbose, "], args["); do { - fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_DEF_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; + fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_ARG_MASK]); + arg_types >>= SLJIT_ARG_SHIFT; if (arg_types) fprintf(compiler->verbose, ","); } while (arg_types); @@ -1681,7 +1721,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmp(struct sljit_compiler sljit_s32 src2, sljit_sw src2w) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_I32_OP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL && (type & 0xff) <= SLJIT_SIG_LESS_EQUAL); FUNCTION_CHECK_SRC(src1, src1w); FUNCTION_CHECK_SRC(src2, src2w); @@ -1690,7 +1730,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmp(struct sljit_compiler #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " cmp%s %s%s, ", !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", - jump_names[type & 0xff], (type & SLJIT_I32_OP) ? "32" : ""); + jump_names[type & 0xff], (type & SLJIT_32) ? "32" : ""); sljit_verbose_param(compiler, src1, src1w); fprintf(compiler->verbose, ", "); sljit_verbose_param(compiler, src2, src2w); @@ -1706,7 +1746,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fcmp(struct sljit_compile { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) CHECK_ARGUMENT(sljit_has_cpu_feature(SLJIT_HAS_FPU)); - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_F32_OP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL_F64 && (type & 0xff) <= SLJIT_ORDERED_F64); FUNCTION_FCHECK(src1, src1w); FUNCTION_FCHECK(src2, src2w); @@ -1715,7 +1755,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fcmp(struct sljit_compile #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " fcmp%s %s%s, ", !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", - jump_names[type & 0xff], (type & SLJIT_F32_OP) ? ".f32" : ".f64"); + jump_names[type & 0xff], (type & SLJIT_32) ? ".f32" : ".f64"); sljit_verbose_fparam(compiler, src1, src1w); fprintf(compiler->verbose, ", "); sljit_verbose_fparam(compiler, src2, src2w); @@ -1752,49 +1792,27 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_icall(struct sljit_compil sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - sljit_s32 i, types, curr_type, scratches, fscratches; - - CHECK_ARGUMENT(type == SLJIT_CALL || type == SLJIT_CALL_CDECL); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_CALL_RETURN))); + CHECK_ARGUMENT((type & 0xff) == SLJIT_CALL || (type & 0xff) == SLJIT_CALL_CDECL); + CHECK_ARGUMENT(function_check_arguments(arg_types, compiler->scratches, -1, compiler->fscratches)); FUNCTION_CHECK_SRC(src, srcw); - types = arg_types; - scratches = 0; - fscratches = 0; - for (i = 0; i < 5; i++) { - curr_type = (types & SLJIT_DEF_MASK); - CHECK_ARGUMENT(curr_type <= SLJIT_ARG_TYPE_F64); - if (i > 0) { - if (curr_type == 0) { - break; - } - if (curr_type >= SLJIT_ARG_TYPE_F32) - fscratches++; - else - scratches++; - } else { - if (curr_type >= SLJIT_ARG_TYPE_F32) { - CHECK_ARGUMENT(compiler->fscratches > 0); - } else if (curr_type >= SLJIT_ARG_TYPE_SW) { - CHECK_ARGUMENT(compiler->scratches > 0); - } - } - types >>= SLJIT_DEF_SHIFT; + if (type & SLJIT_CALL_RETURN) { + CHECK_ARGUMENT((arg_types & SLJIT_ARG_MASK) == compiler->last_return); } - CHECK_ARGUMENT(compiler->scratches >= scratches); - CHECK_ARGUMENT(compiler->fscratches >= fscratches); - CHECK_ARGUMENT(types == 0); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " i%s%s ret[%s", jump_names[type & 0xff], - !(type & SLJIT_REWRITABLE_JUMP) ? "" : ".r", call_arg_names[arg_types & SLJIT_DEF_MASK]); + !(type & SLJIT_CALL_RETURN) ? "" : ".ret", + call_arg_names[arg_types & SLJIT_ARG_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; if (arg_types) { fprintf(compiler->verbose, "], args["); do { - fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_DEF_MASK]); - arg_types >>= SLJIT_DEF_SHIFT; + fprintf(compiler->verbose, "%s", call_arg_names[arg_types & SLJIT_ARG_MASK]); + arg_types >>= SLJIT_ARG_SHIFT; if (arg_types) fprintf(compiler->verbose, ","); } while (arg_types); @@ -1812,9 +1830,8 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_flags(struct sljit_com sljit_s32 type) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_I32_OP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL && (type & 0xff) <= SLJIT_ORDERED_F64); - CHECK_ARGUMENT((type & 0xff) != GET_FLAG_TYPE(SLJIT_SET_CARRY) && (type & 0xff) != (GET_FLAG_TYPE(SLJIT_SET_CARRY) + 1)); CHECK_ARGUMENT(op == SLJIT_MOV || op == SLJIT_MOV32 || (GET_OPCODE(op) >= SLJIT_AND && GET_OPCODE(op) <= SLJIT_XOR)); CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)); @@ -1823,19 +1840,20 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_flags(struct sljit_com CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff) + || ((type & 0xff) == SLJIT_NOT_CARRY && (compiler->last_flags & 0xff) == SLJIT_CARRY) || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)); - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); if (GET_OPCODE(op) >= SLJIT_ADD) - compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_I32_OP | SLJIT_SET_Z)); + compiler->last_flags = GET_FLAG_TYPE(op) | (op & (SLJIT_32 | SLJIT_SET_Z)); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " flags%s %s%s, ", !(op & SLJIT_SET_Z) ? "" : ".z", GET_OPCODE(op) < SLJIT_OP2_BASE ? "mov" : op2_names[GET_OPCODE(op) - SLJIT_OP2_BASE], - GET_OPCODE(op) < SLJIT_OP2_BASE ? op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE] : ((op & SLJIT_I32_OP) ? "32" : "")); + GET_OPCODE(op) < SLJIT_OP2_BASE ? op1_names[GET_OPCODE(op) - SLJIT_OP1_BASE] : ((op & SLJIT_32) ? "32" : "")); sljit_verbose_param(compiler, dst, dstw); fprintf(compiler->verbose, ", %s%s\n", jump_names[type & 0xff], JUMP_POSTFIX(type)); } @@ -1848,11 +1866,11 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmov(struct sljit_compile sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_I32_OP))); + CHECK_ARGUMENT(!(type & ~(0xff | SLJIT_32))); CHECK_ARGUMENT((type & 0xff) >= SLJIT_EQUAL && (type & 0xff) <= SLJIT_ORDERED_F64); CHECK_ARGUMENT(compiler->scratches != -1 && compiler->saveds != -1); - CHECK_ARGUMENT(FUNCTION_CHECK_IS_REG(dst_reg & ~SLJIT_I32_OP)); + CHECK_ARGUMENT(FUNCTION_CHECK_IS_REG(dst_reg & ~SLJIT_32)); if (src != SLJIT_IMM) { CHECK_ARGUMENT(FUNCTION_CHECK_IS_REG(src)); CHECK_ARGUMENT(srcw == 0); @@ -1867,9 +1885,9 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmov(struct sljit_compile #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { fprintf(compiler->verbose, " cmov%s %s%s, ", - !(dst_reg & SLJIT_I32_OP) ? "" : "32", + !(dst_reg & SLJIT_32) ? "" : "32", jump_names[type & 0xff], JUMP_POSTFIX(type)); - sljit_verbose_reg(compiler, dst_reg & ~SLJIT_I32_OP); + sljit_verbose_reg(compiler, dst_reg & ~SLJIT_32); fprintf(compiler->verbose, ", "); sljit_verbose_param(compiler, src, srcw); fprintf(compiler->verbose, "\n"); @@ -1884,15 +1902,15 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_mem(struct sljit_compiler { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) CHECK_ARGUMENT((type & 0xff) >= SLJIT_MOV && (type & 0xff) <= SLJIT_MOV_P); - CHECK_ARGUMENT(!(type & SLJIT_I32_OP) || ((type & 0xff) != SLJIT_MOV && (type & 0xff) != SLJIT_MOV_U32 && (type & 0xff) != SLJIT_MOV_P)); + CHECK_ARGUMENT(!(type & SLJIT_32) || ((type & 0xff) != SLJIT_MOV && (type & 0xff) != SLJIT_MOV_U32 && (type & 0xff) != SLJIT_MOV_P)); CHECK_ARGUMENT((type & SLJIT_MEM_PRE) || (type & SLJIT_MEM_POST)); CHECK_ARGUMENT((type & (SLJIT_MEM_PRE | SLJIT_MEM_POST)) != (SLJIT_MEM_PRE | SLJIT_MEM_POST)); - CHECK_ARGUMENT((type & ~(0xff | SLJIT_I32_OP | SLJIT_MEM_STORE | SLJIT_MEM_SUPP | SLJIT_MEM_PRE | SLJIT_MEM_POST)) == 0); + CHECK_ARGUMENT((type & ~(0xff | SLJIT_32 | SLJIT_MEM_STORE | SLJIT_MEM_SUPP | SLJIT_MEM_PRE | SLJIT_MEM_POST)) == 0); FUNCTION_CHECK_SRC_MEM(mem, memw); CHECK_ARGUMENT(FUNCTION_CHECK_IS_REG(reg)); - CHECK_ARGUMENT((mem & REG_MASK) != SLJIT_UNUSED && (mem & REG_MASK) != reg); + CHECK_ARGUMENT((mem & REG_MASK) != 0 && (mem & REG_MASK) != reg); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (!(type & SLJIT_MEM_SUPP) && SLJIT_UNLIKELY(!!compiler->verbose)) { @@ -1900,7 +1918,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_mem(struct sljit_compiler fprintf(compiler->verbose, " //"); fprintf(compiler->verbose, " mem%s.%s%s%s ", - !(type & SLJIT_I32_OP) ? "" : "32", + !(type & SLJIT_32) ? "" : "32", (type & SLJIT_MEM_STORE) ? "st" : "ld", op1_names[(type & 0xff) - SLJIT_OP1_BASE], (type & SLJIT_MEM_PRE) ? ".pre" : ".post"); @@ -1921,7 +1939,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fmem(struct sljit_compile CHECK_ARGUMENT((type & 0xff) == SLJIT_MOV_F64); CHECK_ARGUMENT((type & SLJIT_MEM_PRE) || (type & SLJIT_MEM_POST)); CHECK_ARGUMENT((type & (SLJIT_MEM_PRE | SLJIT_MEM_POST)) != (SLJIT_MEM_PRE | SLJIT_MEM_POST)); - CHECK_ARGUMENT((type & ~(0xff | SLJIT_I32_OP | SLJIT_MEM_STORE | SLJIT_MEM_SUPP | SLJIT_MEM_PRE | SLJIT_MEM_POST)) == 0); + CHECK_ARGUMENT((type & ~(0xff | SLJIT_32 | SLJIT_MEM_STORE | SLJIT_MEM_SUPP | SLJIT_MEM_PRE | SLJIT_MEM_POST)) == 0); FUNCTION_CHECK_SRC_MEM(mem, memw); CHECK_ARGUMENT(FUNCTION_CHECK_IS_FREG(freg)); @@ -1933,7 +1951,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_fmem(struct sljit_compile fprintf(compiler->verbose, " fmem.%s%s%s ", (type & SLJIT_MEM_STORE) ? "st" : "ld", - !(type & SLJIT_I32_OP) ? ".f64" : ".f32", + !(type & SLJIT_32) ? ".f64" : ".f32", (type & SLJIT_MEM_PRE) ? ".pre" : ".post"); sljit_verbose_freg(compiler, freg); fprintf(compiler->verbose, ", "); @@ -1950,7 +1968,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_get_local_base(struct sljit_co SLJIT_UNUSED_ARG(offset); #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { @@ -1967,7 +1985,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_const(struct sljit_compil SLJIT_UNUSED_ARG(init_value); #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { @@ -1982,7 +2000,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_const(struct sljit_compil static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_put_label(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw) { #if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - FUNCTION_CHECK_DST(dst, dstw, 0); + FUNCTION_CHECK_DST(dst, dstw); #endif #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) if (SLJIT_UNLIKELY(!!compiler->verbose)) { @@ -2023,10 +2041,6 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_put_label(struct sljit_co static SLJIT_INLINE sljit_s32 emit_mov_before_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { - /* Return if don't need to do anything. */ - if (op == SLJIT_UNUSED) - return SLJIT_SUCCESS; - #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE) /* At the moment the pointer size is always equal to sljit_sw. May be changed in the future. */ if (src == SLJIT_RETURN_REG && (op == SLJIT_MOV || op == SLJIT_MOV_P)) @@ -2043,6 +2057,24 @@ static SLJIT_INLINE sljit_s32 emit_mov_before_return(struct sljit_compiler *comp return sljit_emit_op1(compiler, op, SLJIT_RETURN_REG, 0, src, srcw); } +#if !(defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return(compiler, op, src, srcw)); + + FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + +#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) \ + || (defined SLJIT_VERBOSE && SLJIT_VERBOSE) + compiler->skip_checks = 1; +#endif + return sljit_emit_return_void(compiler); +} + +#endif + #if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \ || (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) \ || (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) \ @@ -2054,7 +2086,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_cmov_generic(struct sljit_compiler *com { struct sljit_label *label; struct sljit_jump *jump; - sljit_s32 op = (dst_reg & SLJIT_I32_OP) ? SLJIT_MOV32 : SLJIT_MOV; + sljit_s32 op = (dst_reg & SLJIT_32) ? SLJIT_MOV32 : SLJIT_MOV; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2067,7 +2099,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_cmov_generic(struct sljit_compiler *com || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - FAIL_IF(sljit_emit_op1(compiler, op, dst_reg & ~SLJIT_I32_OP, 0, src, srcw)); + FAIL_IF(sljit_emit_op1(compiler, op, dst_reg & ~SLJIT_32, 0, src, srcw)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2183,7 +2215,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler break; } - type = condition | (type & (SLJIT_I32_OP | SLJIT_REWRITABLE_JUMP)); + type = condition | (type & (SLJIT_32 | SLJIT_REWRITABLE_JUMP)); tmp_src = src1; src1 = src2; src2 = tmp_src; @@ -2201,13 +2233,13 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - PTR_FAIL_IF(sljit_emit_op2(compiler, SLJIT_SUB | flags | (type & SLJIT_I32_OP), - SLJIT_UNUSED, 0, src1, src1w, src2, src2w)); + PTR_FAIL_IF(sljit_emit_op2u(compiler, + SLJIT_SUB | flags | (type & SLJIT_32), src1, src1w, src2, src2w)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - return sljit_emit_jump(compiler, condition | (type & (SLJIT_REWRITABLE_JUMP | SLJIT_I32_OP))); + return sljit_emit_jump(compiler, condition | (type & (SLJIT_REWRITABLE_JUMP | SLJIT_32))); } #endif @@ -2223,7 +2255,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compile || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - sljit_emit_fop1(compiler, SLJIT_CMP_F64 | ((type & 0xff) << VARIABLE_FLAG_SHIFT) | (type & SLJIT_I32_OP), src1, src1w, src2, src2w); + sljit_emit_fop1(compiler, SLJIT_CMP_F64 | ((type & 0xff) << VARIABLE_FLAG_SHIFT) | (type & SLJIT_32), src1, src1w, src2, src2w); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2404,6 +2436,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp return SLJIT_ERR_UNSUPPORTED; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + SLJIT_UNUSED_ARG(compiler); + SLJIT_UNREACHABLE(); + return SLJIT_ERR_UNSUPPORTED; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw) { SLJIT_UNUSED_ARG(compiler); @@ -2452,6 +2491,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_ERR_UNSUPPORTED; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + SLJIT_UNUSED_ARG(compiler); + SLJIT_UNUSED_ARG(op); + SLJIT_UNUSED_ARG(src1); + SLJIT_UNUSED_ARG(src1w); + SLJIT_UNUSED_ARG(src2); + SLJIT_UNUSED_ARG(src2w); + SLJIT_UNREACHABLE(); + return SLJIT_ERR_UNSUPPORTED; +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -2470,7 +2523,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { SLJIT_UNUSED_ARG(compiler); SLJIT_UNUSED_ARG(instruction); diff --git a/src/3rdparty/pcre2/src/sljit/sljitLir.h b/src/3rdparty/pcre2/src/sljit/sljitLir.h index 0eb62fc2..11626581 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitLir.h +++ b/src/3rdparty/pcre2/src/sljit/sljitLir.h @@ -163,13 +163,6 @@ extern "C" { is not available at all. */ -/* When SLJIT_UNUSED is specified as the destination of sljit_emit_op1 - or sljit_emit_op2 operations the result is discarded. Some status - flags must be set when the destination is SLJIT_UNUSED, because the - operation would have no effect otherwise. Other SLJIT operations do - not support SLJIT_UNUSED as a destination operand. */ -#define SLJIT_UNUSED 0 - /* Scratch registers. */ #define SLJIT_R0 1 #define SLJIT_R1 2 @@ -231,9 +224,6 @@ extern "C" { value. The FR and FS register sets are overlap in the same way as R and S register sets. See above. */ -/* Note: SLJIT_UNUSED as destination is not valid for floating point - operations, since they cannot be used for setting flags. */ - /* Floating point scratch registers. */ #define SLJIT_FR0 1 #define SLJIT_FR1 2 @@ -263,39 +253,38 @@ extern "C" { /* Argument type definitions */ /* --------------------------------------------------------------------- */ -/* Argument type definitions. - Used by SLJIT_[DEF_]ARGx and SLJIT_[DEF]_RET macros. */ - -#define SLJIT_ARG_TYPE_VOID 0 -#define SLJIT_ARG_TYPE_SW 1 -#define SLJIT_ARG_TYPE_UW 2 -#define SLJIT_ARG_TYPE_S32 3 -#define SLJIT_ARG_TYPE_U32 4 -#define SLJIT_ARG_TYPE_F32 5 -#define SLJIT_ARG_TYPE_F64 6 - /* The following argument type definitions are used by sljit_emit_enter, sljit_set_context, sljit_emit_call, and sljit_emit_icall functions. - The following return type definitions are used by sljit_emit_call - and sljit_emit_icall functions. - When a function is called, the first integer argument must be placed - in SLJIT_R0, the second in SLJIT_R1, and so on. Similarly the first - floating point argument must be placed in SLJIT_FR0, the second in - SLJIT_FR1, and so on. + As for sljit_emit_call and sljit_emit_icall, the first integer argument + must be placed into SLJIT_R0, the second one into SLJIT_R1, and so on. + Similarly the first floating point argument must be placed into SLJIT_FR0, + the second one into SLJIT_FR1, and so on. + + As for sljit_emit_enter, the integer arguments can be stored in scratch + or saved registers. The first integer argument without _R postfix is + stored in SLJIT_S0, the next one in SLJIT_S1, and so on. The integer + arguments with _R postfix are placed into scratch registers. The index + of the scratch register is the count of the previous integer arguments + starting from SLJIT_R0. The floating point arguments are always placed + into SLJIT_FR0, SLJIT_FR1, and so on. + + Note: if a function is called by sljit_emit_call/sljit_emit_icall and + an argument is stored in a scratch register by sljit_emit_enter, + that argument uses the same scratch register index for both + integer and floating point arguments. Example function definition: - sljit_f32 SLJIT_FUNC example_c_callback(sljit_sw arg_a, + sljit_f32 SLJIT_FUNC example_c_callback(void *arg_a, sljit_f64 arg_b, sljit_u32 arg_c, sljit_f32 arg_d); Argument type definition: - SLJIT_DEF_RET(SLJIT_ARG_TYPE_F32) - | SLJIT_DEF_ARG1(SLJIT_ARG_TYPE_SW) | SLJIT_DEF_ARG2(SLJIT_ARG_TYPE_F64) - | SLJIT_DEF_ARG3(SLJIT_ARG_TYPE_U32) | SLJIT_DEF_ARG2(SLJIT_ARG_TYPE_F32) + SLJIT_ARG_RETURN(SLJIT_ARG_TYPE_F32) + | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_P, 1) | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_F64, 2) + | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_32, 3) | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_F32, 4) Short form of argument type definition: - SLJIT_RET(F32) | SLJIT_ARG1(SW) | SLJIT_ARG2(F64) - | SLJIT_ARG3(S32) | SLJIT_ARG4(F32) + SLJIT_ARGS4(32, P, F64, 32, F32) Argument passing: arg_a must be placed in SLJIT_R0 @@ -303,34 +292,73 @@ extern "C" { arg_b must be placed in SLJIT_FR0 arg_d must be placed in SLJIT_FR1 -Note: - The SLJIT_ARG_TYPE_VOID type is only supported by - SLJIT_DEF_RET, and SLJIT_ARG_TYPE_VOID is also the - default value when SLJIT_DEF_RET is not specified. */ -#define SLJIT_DEF_SHIFT 4 -#define SLJIT_DEF_RET(type) (type) -#define SLJIT_DEF_ARG1(type) ((type) << SLJIT_DEF_SHIFT) -#define SLJIT_DEF_ARG2(type) ((type) << (2 * SLJIT_DEF_SHIFT)) -#define SLJIT_DEF_ARG3(type) ((type) << (3 * SLJIT_DEF_SHIFT)) -#define SLJIT_DEF_ARG4(type) ((type) << (4 * SLJIT_DEF_SHIFT)) + Examples for argument processing by sljit_emit_enter: + SLJIT_ARGS4(VOID, P, 32_R, F32, W) + Arguments are placed into: SLJIT_S0, SLJIT_R1, SLJIT_FR0, SLJIT_S1 -/* Short form of the macros above. + SLJIT_ARGS4(VOID, W, W_R, W, W_R) + Arguments are placed into: SLJIT_S0, SLJIT_R1, SLJIT_S1, SLJIT_R3 - For example the following definition: - SLJIT_DEF_RET(SLJIT_ARG_TYPE_SW) | SLJIT_DEF_ARG1(SLJIT_ARG_TYPE_F32) + SLJIT_ARGS4(VOID, F64, W, F32, W_R) + Arguments are placed into: SLJIT_FR0, SLJIT_S0, SLJIT_FR1, SLJIT_R1 + + Note: it is recommended to pass the scratch arguments first + followed by the saved arguments: + + SLJIT_ARGS4(VOID, W_R, W_R, W, W) + Arguments are placed into: SLJIT_R0, SLJIT_R1, SLJIT_S0, SLJIT_S1 +*/ + +/* The following flag is only allowed for the integer arguments of + sljit_emit_enter. When the flag is set, the integer argument is + stored in a scratch register instead of a saved register. */ +#define SLJIT_ARG_TYPE_SCRATCH_REG 0x8 + +/* Void result, can only be used by SLJIT_ARG_RETURN. */ +#define SLJIT_ARG_TYPE_VOID 0 +/* Machine word sized integer argument or result. */ +#define SLJIT_ARG_TYPE_W 1 +#define SLJIT_ARG_TYPE_W_R (SLJIT_ARG_TYPE_W | SLJIT_ARG_TYPE_SCRATCH_REG) +/* 32 bit integer argument or result. */ +#define SLJIT_ARG_TYPE_32 2 +#define SLJIT_ARG_TYPE_32_R (SLJIT_ARG_TYPE_32 | SLJIT_ARG_TYPE_SCRATCH_REG) +/* Pointer sized integer argument or result. */ +#define SLJIT_ARG_TYPE_P 3 +#define SLJIT_ARG_TYPE_P_R (SLJIT_ARG_TYPE_P | SLJIT_ARG_TYPE_SCRATCH_REG) +/* 64 bit floating point argument or result. */ +#define SLJIT_ARG_TYPE_F64 4 +/* 32 bit floating point argument or result. */ +#define SLJIT_ARG_TYPE_F32 5 + +#define SLJIT_ARG_SHIFT 4 +#define SLJIT_ARG_RETURN(type) (type) +#define SLJIT_ARG_VALUE(type, idx) ((type) << ((idx) * SLJIT_ARG_SHIFT)) + +/* Simplified argument list definitions. + + The following definition: + SLJIT_ARG_RETURN(SLJIT_ARG_TYPE_W) | SLJIT_ARG_VALUE(SLJIT_ARG_TYPE_F32, 1) can be shortened to: - SLJIT_RET(SW) | SLJIT_ARG1(F32) + SLJIT_ARGS1(W, F32) +*/ -Note: - The VOID type is only supported by SLJIT_RET, and - VOID is also the default value when SLJIT_RET is - not specified. */ -#define SLJIT_RET(type) SLJIT_DEF_RET(SLJIT_ARG_TYPE_ ## type) -#define SLJIT_ARG1(type) SLJIT_DEF_ARG1(SLJIT_ARG_TYPE_ ## type) -#define SLJIT_ARG2(type) SLJIT_DEF_ARG2(SLJIT_ARG_TYPE_ ## type) -#define SLJIT_ARG3(type) SLJIT_DEF_ARG3(SLJIT_ARG_TYPE_ ## type) -#define SLJIT_ARG4(type) SLJIT_DEF_ARG4(SLJIT_ARG_TYPE_ ## type) +#define SLJIT_ARG_TO_TYPE(type) SLJIT_ARG_TYPE_ ## type + +#define SLJIT_ARGS0(ret) \ + SLJIT_ARG_RETURN(SLJIT_ARG_TO_TYPE(ret)) + +#define SLJIT_ARGS1(ret, arg1) \ + (SLJIT_ARGS0(ret) | SLJIT_ARG_VALUE(SLJIT_ARG_TO_TYPE(arg1), 1)) + +#define SLJIT_ARGS2(ret, arg1, arg2) \ + (SLJIT_ARGS1(ret, arg1) | SLJIT_ARG_VALUE(SLJIT_ARG_TO_TYPE(arg2), 2)) + +#define SLJIT_ARGS3(ret, arg1, arg2, arg3) \ + (SLJIT_ARGS2(ret, arg1, arg2) | SLJIT_ARG_VALUE(SLJIT_ARG_TO_TYPE(arg3), 3)) + +#define SLJIT_ARGS4(ret, arg1, arg2, arg3, arg4) \ + (SLJIT_ARGS3(ret, arg1, arg2, arg3) | SLJIT_ARG_VALUE(SLJIT_ARG_TO_TYPE(arg4), 4)) /* --------------------------------------------------------------------- */ /* Main structures and functions */ @@ -408,7 +436,7 @@ struct sljit_compiler { /* Code size. */ sljit_uw size; /* Relative offset of the executable mapping from the writable mapping. */ - sljit_uw executable_offset; + sljit_sw executable_offset; /* Executable size for statistical purposes. */ sljit_uw executable_size; @@ -417,17 +445,13 @@ struct sljit_compiler { #endif #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - sljit_s32 args; + sljit_s32 args_size; sljit_s32 locals_offset; - sljit_s32 saveds_offset; - sljit_s32 stack_tmp_size; + sljit_s32 scratches_offset; #endif #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) sljit_s32 mode32; -#ifdef _WIN64 - sljit_s32 locals_offset; -#endif #endif #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) @@ -444,10 +468,14 @@ struct sljit_compiler { #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) || (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) /* Temporary fields. */ sljit_uw shift_imm; +#endif /* SLJIT_CONFIG_ARM_V5 || SLJIT_CONFIG_ARM_V7 */ + +#if (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) && (defined __SOFTFP__) + sljit_uw args_size; #endif #if (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) - sljit_sw imm; + sljit_u32 imm; #endif #if (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) @@ -456,6 +484,10 @@ struct sljit_compiler { sljit_sw cache_argw; #endif +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + sljit_uw args_size; +#endif + #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) sljit_s32 delay_slot; sljit_s32 cache_arg; @@ -476,7 +508,9 @@ struct sljit_compiler { /* Flags specified by the last arithmetic instruction. It contains the type of the variable flag. */ sljit_s32 last_flags; - /* Local size passed to the functions. */ + /* Return value type set by entry functions. */ + sljit_s32 last_return; + /* Local size passed to entry functions. */ sljit_s32 logical_local_size; #endif @@ -615,38 +649,43 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) available options are listed before sljit_emit_enter. The function argument list is the combination of SLJIT_ARGx - (SLJIT_DEF_ARG1) macros. Currently maximum 3 SW / UW - (SLJIT_ARG_TYPE_SW / LJIT_ARG_TYPE_UW) arguments are supported. - The first argument goes to SLJIT_S0, the second goes to SLJIT_S1 - and so on. The register set used by the function must be declared - as well. The number of scratch and saved registers used by the - function must be passed to sljit_emit_enter. Only R registers - between R0 and "scratches" argument can be used later. E.g. if - "scratches" is set to 2, the scratch register set will be limited - to SLJIT_R0 and SLJIT_R1. The S registers and the floating point - registers ("fscratches" and "fsaveds") are specified in a similar - manner. The sljit_emit_enter is also capable of allocating a stack - space for local variables. The "local_size" argument contains the - size in bytes of this local area and its staring address is stored + (SLJIT_DEF_ARG1) macros. Currently maximum 4 arguments are + supported. The first integer argument is loaded into SLJIT_S0, + the second one is loaded into SLJIT_S1, and so on. Similarly, + the first floating point argument is loaded into SLJIT_FR0, + the second one is loaded into SLJIT_FR1, and so on. Furthermore + the register set used by the function must be declared as well. + The number of scratch and saved registers used by the function + must be passed to sljit_emit_enter. Only R registers between R0 + and "scratches" argument can be used later. E.g. if "scratches" + is set to 2, the scratch register set will be limited to SLJIT_R0 + and SLJIT_R1. The S registers and the floating point registers + ("fscratches" and "fsaveds") are specified in a similar manner. + The sljit_emit_enter is also capable of allocating a stack space + for local variables. The "local_size" argument contains the size + in bytes of this local area and its staring address is stored in SLJIT_SP. The memory area between SLJIT_SP (inclusive) and SLJIT_SP + local_size (exclusive) can be modified freely until the function returns. The stack space is not initialized. Note: the following conditions must met: 0 <= scratches <= SLJIT_NUMBER_OF_REGISTERS - 0 <= saveds <= SLJIT_NUMBER_OF_REGISTERS + 0 <= saveds <= SLJIT_NUMBER_OF_SAVED_REGISTERS scratches + saveds <= SLJIT_NUMBER_OF_REGISTERS 0 <= fscratches <= SLJIT_NUMBER_OF_FLOAT_REGISTERS - 0 <= fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS + 0 <= fsaveds <= SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS fscratches + fsaveds <= SLJIT_NUMBER_OF_FLOAT_REGISTERS + Note: the compiler can use saved registers as scratch registers, + but the opposite is not supported + Note: every call of sljit_emit_enter and sljit_set_context overwrites the previous context. */ -/* The absolute address returned by sljit_get_local_base with -offset 0 is aligned to sljit_f64. Otherwise it is aligned to sljit_sw. */ -#define SLJIT_F64_ALIGNMENT 0x00000001 +/* The compiled function uses cdecl calling + * convention instead of SLJIT_FUNC. */ +#define SLJIT_ENTER_CDECL 0x00000001 /* The local_size must be >= 0 and <= SLJIT_MAX_LOCAL_SIZE. */ #define SLJIT_MAX_LOCAL_SIZE 65536 @@ -657,7 +696,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi /* The machine code has a context (which contains the local stack space size, number of used registers, etc.) which initialized by sljit_emit_enter. Several - functions (like sljit_emit_return) requres this context to be able to generate + functions (such as sljit_emit_return) requres this context to be able to generate the appropriate code. However, some code fragments (like inline cache) may have no normal entry point so their context is unknown for the compiler. Their context can be provided to the compiler by the sljit_set_context function. @@ -669,11 +708,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size); -/* Return from machine code. The op argument can be SLJIT_UNUSED which means the - function does not return with anything or any opcode between SLJIT_MOV and - SLJIT_MOV_P (see sljit_emit_op1). As for src and srcw they must be 0 if op - is SLJIT_UNUSED, otherwise see below the description about source and - destination arguments. */ +/* Return from machine code. The sljit_emit_return_void function does not return with + any value. The sljit_emit_return function returns with a single value which stores + the result of a data move instruction. The instruction is specified by the op + argument, and must be between SLJIT_MOV and SLJIT_MOV_P (see sljit_emit_op1). */ + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler); SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw); @@ -766,7 +806,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * #define SLJIT_MEM2(r1, r2) (SLJIT_MEM | (r1) | ((r2) << 8)) #define SLJIT_IMM 0x40 -/* Set 32 bit operation mode (I) on 64 bit CPUs. This option is ignored on +/* Sets 32 bit operation mode on 64 bit CPUs. This option is ignored on 32 bit CPUs. When this option is set for an arithmetic operation, only the lower 32 bit of the input registers are used, and the CPU status flags are set according to the 32 bit result. Although the higher 32 bit @@ -774,12 +814,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * be defined by the CPU architecture (e.g. MIPS). To satisfy these CPU requirements all source registers must be the result of those operations where this option was also set. Memory loads read 32 bit values rather - than 64 bit ones. In other words 32 bit and 64 bit operations cannot - be mixed. The only exception is SLJIT_MOV32 and SLJIT_MOVU32 whose source - register can hold any 32 or 64 bit value, and it is converted to a 32 bit - compatible format first. This conversion is free (no instructions are - emitted) on most CPUs. A 32 bit value can also be converted to a 64 bit - value by SLJIT_MOV_S32 (sign extension) or SLJIT_MOV_U32 (zero extension). + than 64 bit ones. In other words 32 bit and 64 bit operations cannot be + mixed. The only exception is SLJIT_MOV32 whose source register can hold + any 32 or 64 bit value, and it is converted to a 32 bit compatible format + first. This conversion is free (no instructions are emitted) on most CPUs. + A 32 bit value can also be converted to a 64 bit value by SLJIT_MOV_S32 + (sign extension) or SLJIT_MOV_U32 (zero extension). + + As for floating-point operations, this option sets 32 bit single + precision mode. Similar to the integer operations, all register arguments + must be the result of those operations where this option was also set. Note: memory addressing always uses 64 bit values on 64 bit systems so the result of a 32 bit operation must not be used with SLJIT_MEMx @@ -788,22 +832,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * This option is part of the instruction name, so there is no need to manually set it. E.g: - SLJIT_ADD32 == (SLJIT_ADD | SLJIT_I32_OP) */ -#define SLJIT_I32_OP 0x100 - -/* Set F32 (single) precision mode for floating-point computation. This - option is similar to SLJIT_I32_OP, it just applies to floating point - registers. When this option is passed, the CPU performs 32 bit floating - point operations, rather than 64 bit one. Similar to SLJIT_I32_OP, all - register arguments must be the result of those operations where this - option was also set. - - This option is part of the instruction name, so there is no need to - manually set it. E.g: - - SLJIT_MOV_F32 = (SLJIT_MOV_F64 | SLJIT_F32_OP) - */ -#define SLJIT_F32_OP SLJIT_I32_OP + SLJIT_ADD32 == (SLJIT_ADD | SLJIT_32) */ +#define SLJIT_32 0x100 /* Many CPUs (x86, ARM, PPC) have status flags which can be set according to the result of an operation. Other CPUs (MIPS) do not have status @@ -887,7 +917,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * The result is placed into SLJIT_R0 and the remainder into SLJIT_R1. Note: if SLJIT_R1 is 0, the behaviour is undefined. */ #define SLJIT_DIVMOD_UW (SLJIT_OP0_BASE + 4) -#define SLJIT_DIVMOD_U32 (SLJIT_DIVMOD_UW | SLJIT_I32_OP) +#define SLJIT_DIVMOD_U32 (SLJIT_DIVMOD_UW | SLJIT_32) /* Flags: - (may destroy flags) Signed divide of the value in SLJIT_R0 by the value in SLJIT_R1. The result is placed into SLJIT_R0 and the remainder into SLJIT_R1. @@ -895,13 +925,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * Note: if SLJIT_R1 is -1 and SLJIT_R0 is integer min (0x800..00), the behaviour is undefined. */ #define SLJIT_DIVMOD_SW (SLJIT_OP0_BASE + 5) -#define SLJIT_DIVMOD_S32 (SLJIT_DIVMOD_SW | SLJIT_I32_OP) +#define SLJIT_DIVMOD_S32 (SLJIT_DIVMOD_SW | SLJIT_32) /* Flags: - (may destroy flags) Unsigned divide of the value in SLJIT_R0 by the value in SLJIT_R1. The result is placed into SLJIT_R0. SLJIT_R1 preserves its value. Note: if SLJIT_R1 is 0, the behaviour is undefined. */ #define SLJIT_DIV_UW (SLJIT_OP0_BASE + 6) -#define SLJIT_DIV_U32 (SLJIT_DIV_UW | SLJIT_I32_OP) +#define SLJIT_DIV_U32 (SLJIT_DIV_UW | SLJIT_32) /* Flags: - (may destroy flags) Signed divide of the value in SLJIT_R0 by the value in SLJIT_R1. The result is placed into SLJIT_R0. SLJIT_R1 preserves its value. @@ -909,7 +939,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * Note: if SLJIT_R1 is -1 and SLJIT_R0 is integer min (0x800..00), the behaviour is undefined. */ #define SLJIT_DIV_SW (SLJIT_OP0_BASE + 7) -#define SLJIT_DIV_S32 (SLJIT_DIV_SW | SLJIT_I32_OP) +#define SLJIT_DIV_S32 (SLJIT_DIV_SW | SLJIT_32) /* Flags: - (does not modify flags) ENDBR32 instruction for x86-32 and ENDBR64 instruction for x86-64 when Intel Control-flow Enforcement Technology (CET) is enabled. @@ -941,16 +971,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #define SLJIT_MOV (SLJIT_OP1_BASE + 0) /* Flags: - (does not modify flags) */ #define SLJIT_MOV_U8 (SLJIT_OP1_BASE + 1) -#define SLJIT_MOV32_U8 (SLJIT_MOV_U8 | SLJIT_I32_OP) +#define SLJIT_MOV32_U8 (SLJIT_MOV_U8 | SLJIT_32) /* Flags: - (does not modify flags) */ #define SLJIT_MOV_S8 (SLJIT_OP1_BASE + 2) -#define SLJIT_MOV32_S8 (SLJIT_MOV_S8 | SLJIT_I32_OP) +#define SLJIT_MOV32_S8 (SLJIT_MOV_S8 | SLJIT_32) /* Flags: - (does not modify flags) */ #define SLJIT_MOV_U16 (SLJIT_OP1_BASE + 3) -#define SLJIT_MOV32_U16 (SLJIT_MOV_U16 | SLJIT_I32_OP) +#define SLJIT_MOV32_U16 (SLJIT_MOV_U16 | SLJIT_32) /* Flags: - (does not modify flags) */ #define SLJIT_MOV_S16 (SLJIT_OP1_BASE + 4) -#define SLJIT_MOV32_S16 (SLJIT_MOV_S16 | SLJIT_I32_OP) +#define SLJIT_MOV32_S16 (SLJIT_MOV_S16 | SLJIT_32) /* Flags: - (does not modify flags) Note: no SLJIT_MOV32_U32 form, since it is the same as SLJIT_MOV32 */ #define SLJIT_MOV_U32 (SLJIT_OP1_BASE + 5) @@ -958,25 +988,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile Note: no SLJIT_MOV32_S32 form, since it is the same as SLJIT_MOV32 */ #define SLJIT_MOV_S32 (SLJIT_OP1_BASE + 6) /* Flags: - (does not modify flags) */ -#define SLJIT_MOV32 (SLJIT_MOV_S32 | SLJIT_I32_OP) +#define SLJIT_MOV32 (SLJIT_OP1_BASE + 7) /* Flags: - (does not modify flags) Note: load a pointer sized data, useful on x32 (a 32 bit mode on x86-64 where all x64 features are available, e.g. 16 register) or similar compiling modes */ -#define SLJIT_MOV_P (SLJIT_OP1_BASE + 7) +#define SLJIT_MOV_P (SLJIT_OP1_BASE + 8) /* Flags: Z Note: immediate source argument is not supported */ -#define SLJIT_NOT (SLJIT_OP1_BASE + 8) -#define SLJIT_NOT32 (SLJIT_NOT | SLJIT_I32_OP) -/* Flags: Z | OVERFLOW - Note: immediate source argument is not supported */ -#define SLJIT_NEG (SLJIT_OP1_BASE + 9) -#define SLJIT_NEG32 (SLJIT_NEG | SLJIT_I32_OP) +#define SLJIT_NOT (SLJIT_OP1_BASE + 9) +#define SLJIT_NOT32 (SLJIT_NOT | SLJIT_32) /* Count leading zeroes Flags: - (may destroy flags) Note: immediate source argument is not supported */ #define SLJIT_CLZ (SLJIT_OP1_BASE + 10) -#define SLJIT_CLZ32 (SLJIT_CLZ | SLJIT_I32_OP) +#define SLJIT_CLZ32 (SLJIT_CLZ | SLJIT_32) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, @@ -987,58 +1013,64 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile /* Flags: Z | OVERFLOW | CARRY */ #define SLJIT_ADD (SLJIT_OP2_BASE + 0) -#define SLJIT_ADD32 (SLJIT_ADD | SLJIT_I32_OP) +#define SLJIT_ADD32 (SLJIT_ADD | SLJIT_32) /* Flags: CARRY */ #define SLJIT_ADDC (SLJIT_OP2_BASE + 1) -#define SLJIT_ADDC32 (SLJIT_ADDC | SLJIT_I32_OP) +#define SLJIT_ADDC32 (SLJIT_ADDC | SLJIT_32) /* Flags: Z | LESS | GREATER_EQUAL | GREATER | LESS_EQUAL SIG_LESS | SIG_GREATER_EQUAL | SIG_GREATER SIG_LESS_EQUAL | CARRY */ #define SLJIT_SUB (SLJIT_OP2_BASE + 2) -#define SLJIT_SUB32 (SLJIT_SUB | SLJIT_I32_OP) +#define SLJIT_SUB32 (SLJIT_SUB | SLJIT_32) /* Flags: CARRY */ #define SLJIT_SUBC (SLJIT_OP2_BASE + 3) -#define SLJIT_SUBC32 (SLJIT_SUBC | SLJIT_I32_OP) +#define SLJIT_SUBC32 (SLJIT_SUBC | SLJIT_32) /* Note: integer mul Flags: OVERFLOW */ #define SLJIT_MUL (SLJIT_OP2_BASE + 4) -#define SLJIT_MUL32 (SLJIT_MUL | SLJIT_I32_OP) +#define SLJIT_MUL32 (SLJIT_MUL | SLJIT_32) /* Flags: Z */ #define SLJIT_AND (SLJIT_OP2_BASE + 5) -#define SLJIT_AND32 (SLJIT_AND | SLJIT_I32_OP) +#define SLJIT_AND32 (SLJIT_AND | SLJIT_32) /* Flags: Z */ #define SLJIT_OR (SLJIT_OP2_BASE + 6) -#define SLJIT_OR32 (SLJIT_OR | SLJIT_I32_OP) +#define SLJIT_OR32 (SLJIT_OR | SLJIT_32) /* Flags: Z */ #define SLJIT_XOR (SLJIT_OP2_BASE + 7) -#define SLJIT_XOR32 (SLJIT_XOR | SLJIT_I32_OP) +#define SLJIT_XOR32 (SLJIT_XOR | SLJIT_32) /* Flags: Z Let bit_length be the length of the shift operation: 32 or 64. If src2 is immediate, src2w is masked by (bit_length - 1). Otherwise, if the content of src2 is outside the range from 0 to bit_length - 1, the result is undefined. */ #define SLJIT_SHL (SLJIT_OP2_BASE + 8) -#define SLJIT_SHL32 (SLJIT_SHL | SLJIT_I32_OP) +#define SLJIT_SHL32 (SLJIT_SHL | SLJIT_32) /* Flags: Z Let bit_length be the length of the shift operation: 32 or 64. If src2 is immediate, src2w is masked by (bit_length - 1). Otherwise, if the content of src2 is outside the range from 0 to bit_length - 1, the result is undefined. */ #define SLJIT_LSHR (SLJIT_OP2_BASE + 9) -#define SLJIT_LSHR32 (SLJIT_LSHR | SLJIT_I32_OP) +#define SLJIT_LSHR32 (SLJIT_LSHR | SLJIT_32) /* Flags: Z Let bit_length be the length of the shift operation: 32 or 64. If src2 is immediate, src2w is masked by (bit_length - 1). Otherwise, if the content of src2 is outside the range from 0 to bit_length - 1, the result is undefined. */ #define SLJIT_ASHR (SLJIT_OP2_BASE + 10) -#define SLJIT_ASHR32 (SLJIT_ASHR | SLJIT_I32_OP) +#define SLJIT_ASHR32 (SLJIT_ASHR | SLJIT_32) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w); +/* The sljit_emit_op2u function is the same as sljit_emit_op2 except the result is discarded. */ + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w); + /* Starting index of opcodes for sljit_emit_op2. */ #define SLJIT_OP_SRC_BASE 128 @@ -1082,35 +1114,35 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *comp /* Flags: - (does not modify flags) */ #define SLJIT_MOV_F64 (SLJIT_FOP1_BASE + 0) -#define SLJIT_MOV_F32 (SLJIT_MOV_F64 | SLJIT_F32_OP) +#define SLJIT_MOV_F32 (SLJIT_MOV_F64 | SLJIT_32) /* Convert opcodes: CONV[DST_TYPE].FROM[SRC_TYPE] SRC/DST TYPE can be: D - double, S - single, W - signed word, I - signed int Rounding mode when the destination is W or I: round towards zero. */ -/* Flags: - (does not modify flags) */ +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_F64_FROM_F32 (SLJIT_FOP1_BASE + 1) -#define SLJIT_CONV_F32_FROM_F64 (SLJIT_CONV_F64_FROM_F32 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CONV_F32_FROM_F64 (SLJIT_CONV_F64_FROM_F32 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_SW_FROM_F64 (SLJIT_FOP1_BASE + 2) -#define SLJIT_CONV_SW_FROM_F32 (SLJIT_CONV_SW_FROM_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CONV_SW_FROM_F32 (SLJIT_CONV_SW_FROM_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_S32_FROM_F64 (SLJIT_FOP1_BASE + 3) -#define SLJIT_CONV_S32_FROM_F32 (SLJIT_CONV_S32_FROM_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CONV_S32_FROM_F32 (SLJIT_CONV_S32_FROM_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_F64_FROM_SW (SLJIT_FOP1_BASE + 4) -#define SLJIT_CONV_F32_FROM_SW (SLJIT_CONV_F64_FROM_SW | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CONV_F32_FROM_SW (SLJIT_CONV_F64_FROM_SW | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_CONV_F64_FROM_S32 (SLJIT_FOP1_BASE + 5) -#define SLJIT_CONV_F32_FROM_S32 (SLJIT_CONV_F64_FROM_S32 | SLJIT_F32_OP) +#define SLJIT_CONV_F32_FROM_S32 (SLJIT_CONV_F64_FROM_S32 | SLJIT_32) /* Note: dst is the left and src is the right operand for SLJIT_CMPD. Flags: EQUAL_F | LESS_F | GREATER_EQUAL_F | GREATER_F | LESS_EQUAL_F */ #define SLJIT_CMP_F64 (SLJIT_FOP1_BASE + 6) -#define SLJIT_CMP_F32 (SLJIT_CMP_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_CMP_F32 (SLJIT_CMP_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_NEG_F64 (SLJIT_FOP1_BASE + 7) -#define SLJIT_NEG_F32 (SLJIT_NEG_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_NEG_F32 (SLJIT_NEG_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_ABS_F64 (SLJIT_FOP1_BASE + 8) -#define SLJIT_ABS_F32 (SLJIT_ABS_F64 | SLJIT_F32_OP) +#define SLJIT_ABS_F32 (SLJIT_ABS_F64 | SLJIT_32) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, @@ -1119,18 +1151,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil /* Starting index of opcodes for sljit_emit_fop2. */ #define SLJIT_FOP2_BASE 192 -/* Flags: - (does not modify flags) */ +/* Flags: - (may destroy flags) */ #define SLJIT_ADD_F64 (SLJIT_FOP2_BASE + 0) -#define SLJIT_ADD_F32 (SLJIT_ADD_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_ADD_F32 (SLJIT_ADD_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_SUB_F64 (SLJIT_FOP2_BASE + 1) -#define SLJIT_SUB_F32 (SLJIT_SUB_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_SUB_F32 (SLJIT_SUB_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_MUL_F64 (SLJIT_FOP2_BASE + 2) -#define SLJIT_MUL_F32 (SLJIT_MUL_F64 | SLJIT_F32_OP) -/* Flags: - (does not modify flags) */ +#define SLJIT_MUL_F32 (SLJIT_MUL_F64 | SLJIT_32) +/* Flags: - (may destroy flags) */ #define SLJIT_DIV_F64 (SLJIT_FOP2_BASE + 3) -#define SLJIT_DIV_F32 (SLJIT_DIV_F64 | SLJIT_F32_OP) +#define SLJIT_DIV_F32 (SLJIT_DIV_F64 | SLJIT_32) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, @@ -1170,33 +1202,35 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi #define SLJIT_SET_OVERFLOW SLJIT_SET(SLJIT_OVERFLOW) #define SLJIT_NOT_OVERFLOW 11 -/* There is no SLJIT_CARRY or SLJIT_NOT_CARRY. */ -#define SLJIT_SET_CARRY SLJIT_SET(12) +/* Unlike other flags, sljit_emit_jump may destroy this flag. */ +#define SLJIT_CARRY 12 +#define SLJIT_SET_CARRY SLJIT_SET(SLJIT_CARRY) +#define SLJIT_NOT_CARRY 13 /* Floating point comparison types. */ #define SLJIT_EQUAL_F64 14 -#define SLJIT_EQUAL_F32 (SLJIT_EQUAL_F64 | SLJIT_F32_OP) +#define SLJIT_EQUAL_F32 (SLJIT_EQUAL_F64 | SLJIT_32) #define SLJIT_SET_EQUAL_F SLJIT_SET(SLJIT_EQUAL_F64) #define SLJIT_NOT_EQUAL_F64 15 -#define SLJIT_NOT_EQUAL_F32 (SLJIT_NOT_EQUAL_F64 | SLJIT_F32_OP) +#define SLJIT_NOT_EQUAL_F32 (SLJIT_NOT_EQUAL_F64 | SLJIT_32) #define SLJIT_SET_NOT_EQUAL_F SLJIT_SET(SLJIT_NOT_EQUAL_F64) #define SLJIT_LESS_F64 16 -#define SLJIT_LESS_F32 (SLJIT_LESS_F64 | SLJIT_F32_OP) +#define SLJIT_LESS_F32 (SLJIT_LESS_F64 | SLJIT_32) #define SLJIT_SET_LESS_F SLJIT_SET(SLJIT_LESS_F64) #define SLJIT_GREATER_EQUAL_F64 17 -#define SLJIT_GREATER_EQUAL_F32 (SLJIT_GREATER_EQUAL_F64 | SLJIT_F32_OP) +#define SLJIT_GREATER_EQUAL_F32 (SLJIT_GREATER_EQUAL_F64 | SLJIT_32) #define SLJIT_SET_GREATER_EQUAL_F SLJIT_SET(SLJIT_GREATER_EQUAL_F64) #define SLJIT_GREATER_F64 18 -#define SLJIT_GREATER_F32 (SLJIT_GREATER_F64 | SLJIT_F32_OP) +#define SLJIT_GREATER_F32 (SLJIT_GREATER_F64 | SLJIT_32) #define SLJIT_SET_GREATER_F SLJIT_SET(SLJIT_GREATER_F64) #define SLJIT_LESS_EQUAL_F64 19 -#define SLJIT_LESS_EQUAL_F32 (SLJIT_LESS_EQUAL_F64 | SLJIT_F32_OP) +#define SLJIT_LESS_EQUAL_F32 (SLJIT_LESS_EQUAL_F64 | SLJIT_32) #define SLJIT_SET_LESS_EQUAL_F SLJIT_SET(SLJIT_LESS_EQUAL_F64) #define SLJIT_UNORDERED_F64 20 -#define SLJIT_UNORDERED_F32 (SLJIT_UNORDERED_F64 | SLJIT_F32_OP) +#define SLJIT_UNORDERED_F32 (SLJIT_UNORDERED_F64 | SLJIT_32) #define SLJIT_SET_UNORDERED_F SLJIT_SET(SLJIT_UNORDERED_F64) #define SLJIT_ORDERED_F64 21 -#define SLJIT_ORDERED_F32 (SLJIT_ORDERED_F64 | SLJIT_F32_OP) +#define SLJIT_ORDERED_F32 (SLJIT_ORDERED_F64 | SLJIT_32) #define SLJIT_SET_ORDERED_F SLJIT_SET(SLJIT_ORDERED_F64) /* Unconditional jump types. */ @@ -1211,6 +1245,15 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi /* The target can be changed during runtime (see: sljit_set_jump_addr). */ #define SLJIT_REWRITABLE_JUMP 0x1000 +/* When this flag is passed, the execution of the current function ends and + the called function returns to the caller of the current function. The + stack usage is reduced before the call, but it is not necessarily reduced + to zero. In the latter case the compiler needs to allocate space for some + arguments and the return register must be kept as well. + + This feature is highly experimental and not supported on SPARC platform + at the moment. */ +#define SLJIT_CALL_RETURN 0x2000 /* Emit a jump instruction. The destination is not set, only the type of the jump. type must be between SLJIT_EQUAL and SLJIT_FAST_CALL @@ -1221,15 +1264,14 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile /* Emit a C compiler (ABI) compatible function call. type must be SLJIT_CALL or SLJIT_CALL_CDECL - type can be combined (or'ed) with SLJIT_REWRITABLE_JUMP + type can be combined (or'ed) with SLJIT_REWRITABLE_JUMP and SLJIT_CALL_RETURN arg_types is the combination of SLJIT_RET / SLJIT_ARGx (SLJIT_DEF_RET / SLJIT_DEF_ARGx) macros Flags: destroy all flags. */ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types); /* Basic arithmetic comparison. In most architectures it is implemented as - an SLJIT_SUB operation (with SLJIT_UNUSED destination and setting - appropriate flags) followed by a sljit_emit_jump. However some + an compare operation followed by a sljit_emit_jump. However some architectures (i.e: ARM64 or MIPS) may employ special optimizations here. It is suggested to use this comparison form when appropriate. type must be between SLJIT_EQUAL and SLJIT_I_SIG_LESS_EQUAL @@ -1271,6 +1313,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi Direct form: set src to SLJIT_IMM() and srcw to the address Indirect form: any other valid addressing mode type must be SLJIT_CALL or SLJIT_CALL_CDECL + type can be combined (or'ed) with SLJIT_CALL_RETURN arg_types is the combination of SLJIT_RET / SLJIT_ARGx (SLJIT_DEF_RET / SLJIT_DEF_ARGx) macros Flags: destroy all flags. */ @@ -1298,7 +1341,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co type must be between SLJIT_EQUAL and SLJIT_ORDERED_F64 dst_reg must be a valid register and it can be combined - with SLJIT_I32_OP to perform a 32 bit arithmetic operation + with SLJIT_32 to perform a 32 bit arithmetic operation src must be register or immediate (SLJIT_IMM) Flags: - (does not modify flags) */ @@ -1454,26 +1497,29 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_st #if !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) -/* Get the entry address of a given function. */ -#define SLJIT_FUNC_OFFSET(func_name) ((sljit_sw)func_name) +/* Get the entry address of a given function (signed, unsigned result). */ +#define SLJIT_FUNC_ADDR(func_name) ((sljit_sw)func_name) +#define SLJIT_FUNC_UADDR(func_name) ((sljit_uw)func_name) #else /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */ /* All JIT related code should be placed in the same context (library, binary, etc.). */ -#define SLJIT_FUNC_OFFSET(func_name) (*(sljit_sw*)(void*)func_name) +/* Get the entry address of a given function (signed, unsigned result). */ +#define SLJIT_FUNC_ADDR(func_name) (*(sljit_sw*)(void*)func_name) +#define SLJIT_FUNC_UADDR(func_name) (*(sljit_uw*)(void*)func_name) /* For powerpc64, the function pointers point to a context descriptor. */ struct sljit_function_context { - sljit_sw addr; - sljit_sw r2; - sljit_sw r11; + sljit_uw addr; + sljit_uw r2; + sljit_uw r11; }; /* Fill the context arguments using the addr and the function. If func_ptr is NULL, it will not be set to the address of context If addr is NULL, the function address also comes from the func pointer. */ -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_sw addr, void* func); +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func); #endif /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */ @@ -1516,17 +1562,19 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) Otherwise: size must be 4 and instruction argument must be 4 byte aligned. */ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size); + void *instruction, sljit_u32 size); /* Flags were set by a 32 bit operation. */ -#define SLJIT_CURRENT_FLAGS_I32_OP SLJIT_I32_OP +#define SLJIT_CURRENT_FLAGS_32 SLJIT_32 -/* Flags were set by an ADD, ADDC, SUB, SUBC, or NEG operation. */ -#define SLJIT_CURRENT_FLAGS_ADD_SUB 0x01 +/* Flags were set by an ADD or ADDC operations. */ +#define SLJIT_CURRENT_FLAGS_ADD 0x01 +/* Flags were set by a SUB, SUBC, or NEG operation. */ +#define SLJIT_CURRENT_FLAGS_SUB 0x02 -/* Flags were set by a SUB with unused destination. - Must be combined with SLJIT_CURRENT_FLAGS_ADD_SUB. */ -#define SLJIT_CURRENT_FLAGS_COMPARE 0x02 +/* Flags were set by sljit_emit_op2u with SLJIT_SUB opcode. + Must be combined with SLJIT_CURRENT_FLAGS_SUB. */ +#define SLJIT_CURRENT_FLAGS_COMPARE 0x04 /* Define the currently available CPU status flags. It is usually used after an sljit_emit_label or sljit_emit_op_custom operations to define which CPU diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_32.c index 74cf55fc..7b87f590 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_32.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_32.c @@ -65,12 +65,17 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 5] = { }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 0, 1, 2, 3, 4, 5, 6, 7 + 0, 0, 1, 2, 3, 4, 5, 15, 14, 13, 12, 11, 10, 9, 8, 6, 7 }; -#define RM(rm) (reg_map[rm]) -#define RD(rd) (reg_map[rd] << 12) -#define RN(rn) (reg_map[rn] << 16) +#define RM(rm) ((sljit_uw)reg_map[rm]) +#define RM8(rm) ((sljit_uw)reg_map[rm] << 8) +#define RD(rd) ((sljit_uw)reg_map[rd] << 12) +#define RN(rn) ((sljit_uw)reg_map[rn] << 16) + +#define VM(rm) ((sljit_uw)freg_map[rm]) +#define VD(rd) ((sljit_uw)freg_map[rd] << 12) +#define VN(rn) ((sljit_uw)freg_map[rn] << 16) /* --------------------------------------------------------------------- */ /* Instrucion forms */ @@ -107,6 +112,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SBC 0xe0c00000 #define SMULL 0xe0c00090 #define SUB 0xe0400000 +#define TST 0xe1000000 #define UMULL 0xe0800090 #define VABS_F32 0xeeb00ac0 #define VADD_F32 0xee300a00 @@ -115,12 +121,15 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define VCVT_F64_F32 0xeeb70ac0 #define VCVT_S32_F32 0xeebd0ac0 #define VDIV_F32 0xee800a00 +#define VLDR_F32 0xed100a00 #define VMOV_F32 0xeeb00a40 #define VMOV 0xee000a10 #define VMOV2 0xec400a10 #define VMRS 0xeef1fa10 #define VMUL_F32 0xee200a00 #define VNEG_F32 0xeeb10a40 +#define VPOP 0xecbd0b00 +#define VPUSH 0xed2d0b00 #define VSTR_F32 0xed000a00 #define VSUB_F32 0xee300a40 @@ -204,7 +213,7 @@ static sljit_s32 push_inst_with_literal(struct sljit_compiler *compiler, sljit_u cpool_unique_ptr = compiler->cpool_unique; do { if ((*cpool_ptr == literal) && !(*cpool_unique_ptr)) { - cpool_index = cpool_ptr - compiler->cpool; + cpool_index = (sljit_uw)(cpool_ptr - compiler->cpool); break; } cpool_ptr++; @@ -293,7 +302,7 @@ static sljit_uw patch_pc_relative_loads(sljit_uw *last_pc_patch, sljit_uw *code_ while (last_pc_patch < code_ptr) { /* Data transfer instruction with Rn == r15. */ if ((*last_pc_patch & 0x0c0f0000) == 0x040f0000) { - diff = const_pool - last_pc_patch; + diff = (sljit_uw)(const_pool - last_pc_patch); ind = (*last_pc_patch) & 0xfff; /* Must be a load instruction with immediate offset. */ @@ -308,12 +317,12 @@ static sljit_uw patch_pc_relative_loads(sljit_uw *last_pc_patch, sljit_uw *code_ SLJIT_ASSERT(diff >= 1); if (diff >= 2 || ind > 0) { - diff = (diff + ind - 2) << 2; + diff = (diff + (sljit_uw)ind - 2) << 2; SLJIT_ASSERT(diff <= 0xfff); - *last_pc_patch = (*last_pc_patch & ~0xfff) | diff; + *last_pc_patch = (*last_pc_patch & ~(sljit_uw)0xfff) | diff; } else - *last_pc_patch = (*last_pc_patch & ~(0xfff | (1 << 23))) | 0x004; + *last_pc_patch = (*last_pc_patch & ~(sljit_uw)(0xfff | (1 << 23))) | 0x004; } last_pc_patch++; } @@ -329,24 +338,24 @@ struct future_patch { static sljit_s32 resolve_const_pool_index(struct sljit_compiler *compiler, struct future_patch **first_patch, sljit_uw cpool_current_index, sljit_uw *cpool_start_address, sljit_uw *buf_ptr) { - sljit_s32 value; + sljit_u32 value; struct future_patch *curr_patch, *prev_patch; SLJIT_UNUSED_ARG(compiler); /* Using the values generated by patch_pc_relative_loads. */ if (!*first_patch) - value = (sljit_s32)cpool_start_address[cpool_current_index]; + value = cpool_start_address[cpool_current_index]; else { curr_patch = *first_patch; prev_patch = NULL; while (1) { if (!curr_patch) { - value = (sljit_s32)cpool_start_address[cpool_current_index]; + value = cpool_start_address[cpool_current_index]; break; } if ((sljit_uw)curr_patch->index == cpool_current_index) { - value = curr_patch->value; + value = (sljit_uw)curr_patch->value; if (prev_patch) prev_patch->next = curr_patch->next; else @@ -359,8 +368,8 @@ static sljit_s32 resolve_const_pool_index(struct sljit_compiler *compiler, struc } } - if (value >= 0) { - if ((sljit_uw)value > cpool_current_index) { + if ((sljit_sw)value >= 0) { + if (value > cpool_current_index) { curr_patch = (struct future_patch*)SLJIT_MALLOC(sizeof(struct future_patch), compiler->allocator_data); if (!curr_patch) { while (*first_patch) { @@ -371,8 +380,8 @@ static sljit_s32 resolve_const_pool_index(struct sljit_compiler *compiler, struc return SLJIT_ERR_ALLOC_FAILED; } curr_patch->next = *first_patch; - curr_patch->index = value; - curr_patch->value = cpool_start_address[value]; + curr_patch->index = (sljit_sw)value; + curr_patch->value = (sljit_sw)cpool_start_address[value]; *first_patch = curr_patch; } cpool_start_address[value] = *buf_ptr; @@ -395,8 +404,8 @@ static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_uw inst) static SLJIT_INLINE sljit_s32 emit_imm(struct sljit_compiler *compiler, sljit_s32 reg, sljit_sw imm) { - FAIL_IF(push_inst(compiler, MOVW | RD(reg) | ((imm << 4) & 0xf0000) | (imm & 0xfff))); - return push_inst(compiler, MOVT | RD(reg) | ((imm >> 12) & 0xf0000) | ((imm >> 16) & 0xfff)); + FAIL_IF(push_inst(compiler, MOVW | RD(reg) | ((imm << 4) & 0xf0000) | ((sljit_u32)imm & 0xfff))); + return push_inst(compiler, MOVT | RD(reg) | ((imm >> 12) & 0xf0000) | (((sljit_u32)imm >> 16) & 0xfff)); } #endif @@ -554,8 +563,9 @@ static SLJIT_INLINE void inline_set_jump_addr(sljit_uw jump_ptr, sljit_sw execut } static sljit_uw get_imm(sljit_uw imm); +static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, sljit_uw imm); -static SLJIT_INLINE void inline_set_const(sljit_uw addr, sljit_sw executable_offset, sljit_sw new_constant, sljit_s32 flush_cache) +static SLJIT_INLINE void inline_set_const(sljit_uw addr, sljit_sw executable_offset, sljit_uw new_constant, sljit_s32 flush_cache) { #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) sljit_uw *ptr = (sljit_uw*)addr; @@ -658,7 +668,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil sljit_uw word_count; sljit_uw next_addr; sljit_sw executable_offset; - sljit_sw addr; + sljit_uw addr; #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) sljit_uw cpool_size; sljit_uw cpool_skip_alignment; @@ -737,7 +747,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { /* Points after the current instruction. */ label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; next_addr = compute_next_addr(label, jump, const_, put_label); @@ -770,7 +780,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { /* code_ptr can be affected above. */ label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr + 1, executable_offset); - label->size = (code_ptr + 1) - code; + label->size = (sljit_uw)((code_ptr + 1) - code); label = label->next; } if (const_ && const_->addr == word_count) { @@ -799,8 +809,8 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil cpool_current_index = patch_pc_relative_loads(last_pc_patch, code_ptr, cpool_start_address, cpool_size); if (cpool_current_index > 0) { /* Unconditional branch. */ - *code_ptr = B | (((cpool_start_address - code_ptr) + cpool_current_index - 2) & ~PUSH_POOL); - code_ptr = cpool_start_address + cpool_current_index; + *code_ptr = B | (((sljit_uw)(cpool_start_address - code_ptr) + cpool_current_index - 2) & ~PUSH_POOL); + code_ptr = (sljit_uw*)(cpool_start_address + cpool_current_index); } cpool_skip_alignment = CONST_POOL_ALIGNMENT - 1; cpool_current_index = 0; @@ -822,7 +832,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil cpool_start_address = ALIGN_INSTRUCTION(code_ptr); cpool_current_index = patch_pc_relative_loads(last_pc_patch, code_ptr, cpool_start_address, compiler->cpool_fill); if (cpool_current_index > 0) - code_ptr = cpool_start_address + cpool_current_index; + code_ptr = (sljit_uw*)(cpool_start_address + cpool_current_index); buf_ptr = compiler->cpool; buf_end = buf_ptr + compiler->cpool_fill; @@ -845,15 +855,15 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil buf_ptr = (sljit_uw *)jump->addr; if (jump->flags & PATCH_B) { - addr = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr + 2, executable_offset); + addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr + 2, executable_offset); if (!(jump->flags & JUMP_ADDR)) { SLJIT_ASSERT(jump->flags & JUMP_LABEL); - SLJIT_ASSERT(((sljit_sw)jump->u.label->addr - addr) <= 0x01ffffff && ((sljit_sw)jump->u.label->addr - addr) >= -0x02000000); - *buf_ptr |= (((sljit_sw)jump->u.label->addr - addr) >> 2) & 0x00ffffff; + SLJIT_ASSERT((sljit_sw)(jump->u.label->addr - addr) <= 0x01ffffff && (sljit_sw)(jump->u.label->addr - addr) >= -0x02000000); + *buf_ptr |= ((jump->u.label->addr - addr) >> 2) & 0x00ffffff; } else { - SLJIT_ASSERT(((sljit_sw)jump->u.target - addr) <= 0x01ffffff && ((sljit_sw)jump->u.target - addr) >= -0x02000000); - *buf_ptr |= (((sljit_sw)jump->u.target - addr) >> 2) & 0x00ffffff; + SLJIT_ASSERT((sljit_sw)(jump->u.target - addr) <= 0x01ffffff && (sljit_sw)(jump->u.target - addr) >= -0x02000000); + *buf_ptr |= ((jump->u.target - addr) >> 2) & 0x00ffffff; } } else if (jump->flags & SLJIT_REWRITABLE_JUMP) { @@ -923,7 +933,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_uw); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_uw); code = (sljit_uw *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_uw *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -972,6 +982,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define ALLOW_IMM 0x10 #define ALLOW_INV_IMM 0x20 #define ALLOW_ANY_IMM (ALLOW_IMM | ALLOW_INV_IMM) +#define ALLOW_NEG_IMM 0x40 /* s/l - store/load (1 bit) u/s - signed/unsigned (1 bit) @@ -999,7 +1010,7 @@ static const sljit_uw data_transfer_insts[16] = { }; #define EMIT_DATA_TRANSFER(type, add, target_reg, base_reg, arg) \ - (data_transfer_insts[(type) & 0xf] | ((add) << 23) | RD(target_reg) | RN(base_reg) | (arg)) + (data_transfer_insts[(type) & 0xf] | ((add) << 23) | RD(target_reg) | RN(base_reg) | (sljit_uw)(arg)) /* Normal ldr/str instruction. Type2: ldrsb, ldrh, ldrsh */ @@ -1008,101 +1019,10 @@ static const sljit_uw data_transfer_insts[16] = { #define TYPE2_TRANSFER_IMM(imm) \ (((imm) & 0xf) | (((imm) & 0xf0) << 4) | (1 << 22)) -static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 inp_flags, - sljit_s32 dst, sljit_sw dstw, - sljit_s32 src1, sljit_sw src1w, - sljit_s32 src2, sljit_sw src2w); +#define EMIT_FPU_OPERATION(opcode, mode, dst, src1, src2) \ + ((sljit_uw)(opcode) | (sljit_uw)(mode) | VD(dst) | VM(src1) | VN(src2)) -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, - sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, - sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) -{ - sljit_s32 args, size, i, tmp; - sljit_uw push; - - CHECK_ERROR(); - CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); - set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - - /* Push saved registers, temporary registers - stmdb sp!, {..., lr} */ - push = PUSH | (1 << 14); - - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) - push |= 1 << reg_map[i]; - - for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) - push |= 1 << reg_map[i]; - - FAIL_IF(push_inst(compiler, push)); - - /* Stack must be aligned to 8 bytes: */ - size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - local_size = ((size + local_size + 7) & ~7) - size; - compiler->local_size = local_size; - if (local_size > 0) - FAIL_IF(emit_op(compiler, SLJIT_SUB, ALLOW_IMM, SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size)); - - args = get_arg_count(arg_types); - - if (args >= 1) - FAIL_IF(push_inst(compiler, MOV | RD(SLJIT_S0) | RM(SLJIT_R0))); - if (args >= 2) - FAIL_IF(push_inst(compiler, MOV | RD(SLJIT_S1) | RM(SLJIT_R1))); - if (args >= 3) - FAIL_IF(push_inst(compiler, MOV | RD(SLJIT_S2) | RM(SLJIT_R2))); - - return SLJIT_SUCCESS; -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, - sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, - sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) -{ - sljit_s32 size; - - CHECK_ERROR(); - CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); - set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - - size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - compiler->local_size = ((size + local_size + 7) & ~7) - size; - return SLJIT_SUCCESS; -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) -{ - sljit_s32 i, tmp; - sljit_uw pop; - - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); - - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); - - if (compiler->local_size > 0) - FAIL_IF(emit_op(compiler, SLJIT_ADD, ALLOW_IMM, SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, compiler->local_size)); - - /* Push saved registers, temporary registers - ldmia sp!, {..., pc} */ - pop = POP | (1 << 15); - - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) - pop |= 1 << reg_map[i]; - - for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) - pop |= 1 << reg_map[i]; - - return push_inst(compiler, pop); -} - -/* --------------------------------------------------------------------- */ -/* Operators */ -/* --------------------------------------------------------------------- */ - -/* flags: */ +/* Flags for emit_op: */ /* Arguments are swapped. */ #define ARGS_SWAPPED 0x01 /* Inverted immediate. */ @@ -1119,6 +1039,308 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp SRC2_IMM must be (1 << 25) as it is also the value of I bit (can be used for optimization). */ #define SRC2_IMM (1 << 25) +static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 inp_flags, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w); + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, + sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) +{ + sljit_uw imm, offset; + sljit_s32 i, tmp, size, word_arg_count, saved_arg_count; +#ifdef __SOFTFP__ + sljit_u32 float_arg_count; +#else + sljit_u32 old_offset, f32_offset; + sljit_u32 remap[3]; + sljit_u32 *remap_ptr = remap; +#endif + + CHECK_ERROR(); + CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); + set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + + imm = 0; + + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) + imm |= (sljit_uw)1 << reg_map[i]; + + for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) + imm |= (sljit_uw)1 << reg_map[i]; + + SLJIT_ASSERT(reg_map[TMP_REG2] == 14); + + /* Push saved and temporary registers + multiple registers: stmdb sp!, {..., lr} + single register: str reg, [sp, #-4]! */ + if (imm != 0) + FAIL_IF(push_inst(compiler, PUSH | (1 << 14) | imm)); + else + FAIL_IF(push_inst(compiler, 0xe52d0004 | RD(TMP_REG2))); + + /* Stack must be aligned to 8 bytes: */ + size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); + + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((size & SSIZE_OF(sw)) != 0) { + FAIL_IF(push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | sizeof(sljit_sw))); + size += SSIZE_OF(sw); + } + + if (fsaveds + fscratches >= SLJIT_NUMBER_OF_FLOAT_REGISTERS) { + FAIL_IF(push_inst(compiler, VPUSH | VD(SLJIT_FS0) | ((sljit_uw)SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS << 1))); + } else { + if (fsaveds > 0) + FAIL_IF(push_inst(compiler, VPUSH | VD(SLJIT_FS0) | ((sljit_uw)fsaveds << 1))); + if (fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) + FAIL_IF(push_inst(compiler, VPUSH | VD(fscratches) | ((sljit_uw)(fscratches - (SLJIT_FIRST_SAVED_FLOAT_REG - 1)) << 1))); + } + } + + local_size = ((size + local_size + 0x7) & ~0x7) - size; + compiler->local_size = local_size; + + arg_types >>= SLJIT_ARG_SHIFT; + word_arg_count = 0; + saved_arg_count = 0; +#ifdef __SOFTFP__ + SLJIT_COMPILE_ASSERT(SLJIT_FR0 == 1, float_register_index_start); + + offset = 0; + float_arg_count = 0; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) + offset += sizeof(sljit_sw); + + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst(compiler, VMOV2 | (offset << 10) | ((offset + sizeof(sljit_sw)) << 14) | float_arg_count)); + else + FAIL_IF(push_inst(compiler, VLDR_F32 | 0x800100 | RN(SLJIT_SP) + | (float_arg_count << 12) | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + float_arg_count++; + offset += sizeof(sljit_f64) - sizeof(sljit_sw); + break; + case SLJIT_ARG_TYPE_F32: + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst(compiler, VMOV | (float_arg_count << 16) | (offset << 10))); + else + FAIL_IF(push_inst(compiler, VLDR_F32 | 0x800000 | RN(SLJIT_SP) + | (float_arg_count << 12) | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + float_arg_count++; + break; + default: + word_arg_count++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (word_arg_count - 1 != (sljit_s32)(offset >> 2)) + tmp = word_arg_count; + else + break; + + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst(compiler, MOV | RD(tmp) | (offset >> 2))); + else + FAIL_IF(push_inst(compiler, data_transfer_insts[WORD_SIZE | LOAD_DATA] | 0x800000 + | RN(SLJIT_SP) | RD(tmp) | (offset + (sljit_uw)size - 4 * sizeof(sljit_sw)))); + break; + } + + offset += sizeof(sljit_sw); + arg_types >>= SLJIT_ARG_SHIFT; + } + + compiler->args_size = offset; +#else + offset = SLJIT_FR0; + old_offset = SLJIT_FR0; + f32_offset = 0; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset != old_offset) + *remap_ptr++ = EMIT_FPU_OPERATION(VMOV_F32, SLJIT_32, offset, old_offset, 0); + old_offset++; + offset++; + break; + case SLJIT_ARG_TYPE_F32: + if (f32_offset != 0) { + *remap_ptr++ = EMIT_FPU_OPERATION(VMOV_F32, 0x20, offset, f32_offset, 0); + f32_offset = 0; + } else { + if (offset != old_offset) + *remap_ptr++ = EMIT_FPU_OPERATION(VMOV_F32, 0, offset, old_offset, 0); + f32_offset = old_offset; + old_offset++; + } + offset++; + break; + default: + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, MOV | RD(SLJIT_S0 - saved_arg_count) | RM(SLJIT_R0 + word_arg_count))); + saved_arg_count++; + } + + word_arg_count++; + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } + + SLJIT_ASSERT((sljit_uw)(remap_ptr - remap) <= sizeof(remap)); + + while (remap_ptr > remap) + FAIL_IF(push_inst(compiler, *(--remap_ptr))); +#endif + + if (local_size > 0) + FAIL_IF(emit_op(compiler, SLJIT_SUB, ALLOW_IMM, SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size)); + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, + sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) +{ + sljit_s32 size; + + CHECK_ERROR(); + CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); + set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + + size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); + + if ((size & SSIZE_OF(sw)) != 0 && (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG)) + size += SSIZE_OF(sw); + + compiler->local_size = ((size + local_size + 0x7) & ~0x7) - size; + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_add_sp(struct sljit_compiler *compiler, sljit_uw imm) +{ + sljit_uw imm2 = get_imm(imm); + + if (imm2 == 0) { + FAIL_IF(load_immediate(compiler, TMP_REG2, imm)); + imm2 = RM(TMP_REG2); + } + + return push_inst(compiler, ADD | RD(SLJIT_SP) | RN(SLJIT_SP) | imm2); +} + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 frame_size) +{ + sljit_s32 local_size, fscratches, fsaveds, i, tmp; + sljit_s32 lr_dst = TMP_PC; + sljit_uw reg_list; + + SLJIT_ASSERT(reg_map[TMP_REG2] == 14); + + local_size = compiler->local_size; + fscratches = compiler->fscratches; + fsaveds = compiler->fsaveds; + + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if (local_size > 0) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)local_size)); + + if (fsaveds + fscratches >= SLJIT_NUMBER_OF_FLOAT_REGISTERS) { + FAIL_IF(push_inst(compiler, VPOP | VD(SLJIT_FS0) | ((sljit_uw)SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS << 1))); + } else { + if (fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) + FAIL_IF(push_inst(compiler, VPOP | VD(fscratches) | ((sljit_uw)(fscratches - (SLJIT_FIRST_SAVED_FLOAT_REG - 1)) << 1))); + if (fsaveds > 0) + FAIL_IF(push_inst(compiler, VPOP | VD(SLJIT_FS0) | ((sljit_uw)fsaveds << 1))); + } + + local_size = GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1) & 0x7; + } + + if (frame_size < 0) { + lr_dst = TMP_REG2; + frame_size = 0; + } else if (frame_size > 0) + lr_dst = 0; + + reg_list = 0; + if (lr_dst != 0) + reg_list |= (sljit_uw)1 << reg_map[lr_dst]; + + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0; i > tmp; i--) + reg_list |= (sljit_uw)1 << reg_map[i]; + + for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) + reg_list |= (sljit_uw)1 << reg_map[i]; + + if (lr_dst == 0 && (reg_list & (reg_list - 1)) == 0) { + /* The local_size does not include the saved registers. */ + local_size += SSIZE_OF(sw); + + if (reg_list != 0) + local_size += SSIZE_OF(sw); + + if (frame_size > local_size) + FAIL_IF(push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 25) | (sljit_uw)(frame_size - local_size))); + else if (frame_size < local_size) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)(local_size - frame_size))); + + if (reg_list == 0) + return SLJIT_SUCCESS; + + if (compiler->saveds > 0) { + SLJIT_ASSERT(reg_list == ((sljit_uw)1 << reg_map[SLJIT_S0])); + lr_dst = SLJIT_S0; + } else { + SLJIT_ASSERT(reg_list == ((sljit_uw)1 << reg_map[SLJIT_FIRST_SAVED_REG])); + lr_dst = SLJIT_FIRST_SAVED_REG; + } + + return push_inst(compiler, data_transfer_insts[WORD_SIZE | LOAD_DATA] | 0x800000 + | RN(SLJIT_SP) | RD(lr_dst) | (sljit_uw)(frame_size - 2 * SSIZE_OF(sw))); + } + + if (local_size > 0) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)local_size)); + + /* Pop saved and temporary registers + multiple registers: ldmia sp!, {...} + single register: ldr reg, [sp], #4 */ + if ((reg_list & (reg_list - 1)) == 0) { + SLJIT_ASSERT(lr_dst != 0); + SLJIT_ASSERT(reg_list == (sljit_uw)1 << reg_map[lr_dst]); + + return push_inst(compiler, 0xe49d0004 | RD(lr_dst)); + } + + FAIL_IF(push_inst(compiler, POP | reg_list)); + if (frame_size > 0) + return push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 25) | ((sljit_uw)frame_size - sizeof(sljit_sw))); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + return emit_stack_frame_release(compiler, 0); +} + +/* --------------------------------------------------------------------- */ +/* Operators */ +/* --------------------------------------------------------------------- */ + #define EMIT_SHIFT_INS_AND_RETURN(opcode) \ SLJIT_ASSERT(!(flags & INV_IMM) && !(src2 & SRC2_IMM)); \ if (compiler->shift_imm != 0x20) { \ @@ -1130,11 +1352,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp RD(dst) | (compiler->shift_imm << 7) | (opcode << 5) | RM(src2)); \ return push_inst(compiler, MOV | (flags & SET_FLAGS) | RD(dst) | RM(src2)); \ } \ - return push_inst(compiler, MOV | (flags & SET_FLAGS) | RD(dst) | \ - (reg_map[(flags & ARGS_SWAPPED) ? src1 : src2] << 8) | (opcode << 5) | 0x10 | RM((flags & ARGS_SWAPPED) ? src2 : src1)); + return push_inst(compiler, MOV | (flags & SET_FLAGS) | RD(dst) \ + | RM8((flags & ARGS_SWAPPED) ? src1 : src2) | (sljit_uw)(opcode << 5) \ + | 0x10 | RM((flags & ARGS_SWAPPED) ? src2 : src1)); static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, - sljit_s32 dst, sljit_s32 src1, sljit_s32 src2) + sljit_uw dst, sljit_uw src1, sljit_uw src2) { switch (GET_OPCODE(op)) { case SLJIT_MOV: @@ -1184,9 +1407,9 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return SLJIT_SUCCESS; case SLJIT_NOT: - if (src2 & SRC2_IMM) { + if (src2 & SRC2_IMM) return push_inst(compiler, ((flags & INV_IMM) ? MOV : MVN) | (flags & SET_FLAGS) | RD(dst) | src2); - } + return push_inst(compiler, MVN | (flags & SET_FLAGS) | RD(dst) | RM(src2)); case SLJIT_CLZ: @@ -1197,9 +1420,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_ADD: SLJIT_ASSERT(!(flags & INV_IMM)); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED)) + if ((flags & (UNUSED_RETURN | ARGS_SWAPPED)) == UNUSED_RETURN) return push_inst(compiler, CMN | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); return push_inst(compiler, ADD | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); @@ -1209,10 +1431,10 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_SUB: SLJIT_ASSERT(!(flags & INV_IMM)); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED)) + if ((flags & (UNUSED_RETURN | ARGS_SWAPPED)) == UNUSED_RETURN) return push_inst(compiler, CMP | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); + return push_inst(compiler, (!(flags & ARGS_SWAPPED) ? SUB : RSB) | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); @@ -1227,14 +1449,16 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl compiler->status_flags_state = 0; if (!HAS_FLAGS(op)) - return push_inst(compiler, MUL | (reg_map[dst] << 16) | (reg_map[src2] << 8) | reg_map[src1]); + return push_inst(compiler, MUL | RN(dst) | RM8(src2) | RM(src1)); - FAIL_IF(push_inst(compiler, SMULL | (reg_map[TMP_REG1] << 16) | (reg_map[dst] << 12) | (reg_map[src2] << 8) | reg_map[src1])); + FAIL_IF(push_inst(compiler, SMULL | RN(TMP_REG1) | RD(dst) | RM8(src2) | RM(src1))); /* cmp TMP_REG1, dst asr #31. */ return push_inst(compiler, CMP | SET_FLAGS | RN(TMP_REG1) | RM(dst) | 0xfc0); case SLJIT_AND: + if ((flags & (UNUSED_RETURN | INV_IMM)) == UNUSED_RETURN) + return push_inst(compiler, TST | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); return push_inst(compiler, (!(flags & INV_IMM) ? AND : BIC) | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2))); @@ -1266,7 +1490,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl Returns with 0 if not possible. */ static sljit_uw get_imm(sljit_uw imm) { - sljit_s32 rol; + sljit_u32 rol; if (imm <= 0xff) return SRC2_IMM | imm; @@ -1307,7 +1531,7 @@ static sljit_s32 generate_int(struct sljit_compiler *compiler, sljit_s32 reg, sl sljit_uw mask; sljit_uw imm1; sljit_uw imm2; - sljit_s32 rol; + sljit_uw rol; /* Step1: Search a zero byte (8 continous zero bit). */ mask = 0xff000000; @@ -1418,7 +1642,7 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, sljit_uw tmp; #if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) - if (!(imm & ~0xffff)) + if (!(imm & ~(sljit_uw)0xffff)) return push_inst(compiler, MOVW | RD(reg) | ((imm << 4) & 0xf0000) | (imm & 0xfff)); #endif @@ -1455,13 +1679,13 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit SLJIT_ASSERT (arg & SLJIT_MEM); SLJIT_ASSERT((arg & REG_MASK) != tmp_reg); - if ((arg & REG_MASK) == SLJIT_UNUSED) { + if (!(arg & REG_MASK)) { if (is_type1_transfer) { - FAIL_IF(load_immediate(compiler, tmp_reg, argw & ~0xfff)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw & ~(sljit_uw)0xfff)); argw &= 0xfff; } else { - FAIL_IF(load_immediate(compiler, tmp_reg, argw & ~0xff)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw & ~(sljit_uw)0xff)); argw &= 0xff; } @@ -1475,20 +1699,20 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit argw &= 0x3; if (argw != 0 && !is_type1_transfer) { - FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg) | RM(offset_reg) | (argw << 7))); + FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg) | RM(offset_reg) | ((sljit_uw)argw << 7))); return push_inst(compiler, EMIT_DATA_TRANSFER(flags, 1, reg, tmp_reg, TYPE2_TRANSFER_IMM(0))); } /* Bit 25: RM is offset. */ return push_inst(compiler, EMIT_DATA_TRANSFER(flags, 1, reg, arg, - RM(offset_reg) | (is_type1_transfer ? (1 << 25) : 0) | (argw << 7))); + RM(offset_reg) | (is_type1_transfer ? (1 << 25) : 0) | ((sljit_uw)argw << 7))); } arg &= REG_MASK; if (is_type1_transfer) { if (argw > 0xfff) { - imm = get_imm(argw & ~0xfff); + imm = get_imm((sljit_uw)argw & ~(sljit_uw)0xfff); if (imm) { FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg) | imm)); argw = argw & 0xfff; @@ -1496,7 +1720,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } } else if (argw < -0xfff) { - imm = get_imm(-argw & ~0xfff); + imm = get_imm((sljit_uw)-argw & ~(sljit_uw)0xfff); if (imm) { FAIL_IF(push_inst(compiler, SUB | RD(tmp_reg) | RN(arg) | imm)); argw = -(-argw & 0xfff); @@ -1512,7 +1736,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } else { if (argw > 0xff) { - imm = get_imm(argw & ~0xff); + imm = get_imm((sljit_uw)argw & ~(sljit_uw)0xff); if (imm) { FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg) | imm)); argw = argw & 0xff; @@ -1520,7 +1744,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } } else if (argw < -0xff) { - imm = get_imm(-argw & ~0xff); + imm = get_imm((sljit_uw)-argw & ~(sljit_uw)0xff); if (imm) { FAIL_IF(push_inst(compiler, SUB | RD(tmp_reg) | RN(arg) | imm)); argw = -(-argw & 0xff); @@ -1537,7 +1761,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } } - FAIL_IF(load_immediate(compiler, tmp_reg, argw)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw)); return push_inst(compiler, EMIT_DATA_TRANSFER(flags, 1, reg, arg, RM(tmp_reg) | (is_type1_transfer ? (1 << 25) : 0))); } @@ -1554,50 +1778,62 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 /* We prefers register and simple consts. */ sljit_s32 dst_reg; sljit_s32 src1_reg; - sljit_s32 src2_reg; + sljit_s32 src2_reg = 0; sljit_s32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + sljit_s32 neg_op = 0; - /* Destination check. */ - if (SLJIT_UNLIKELY(dst == SLJIT_UNUSED)) + if (dst == TMP_REG2) flags |= UNUSED_RETURN; SLJIT_ASSERT(!(inp_flags & ALLOW_INV_IMM) || (inp_flags & ALLOW_IMM)); - src2_reg = 0; + if (inp_flags & ALLOW_NEG_IMM) { + switch (GET_OPCODE(op)) { + case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + neg_op = SLJIT_SUB; + break; + case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + neg_op = SLJIT_SUBC; + break; + case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + neg_op = SLJIT_ADD; + break; + case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + neg_op = SLJIT_ADDC; + break; + } + } do { if (!(inp_flags & ALLOW_IMM)) break; if (src2 & SLJIT_IMM) { - src2_reg = get_imm(src2w); + src2_reg = (sljit_s32)get_imm((sljit_uw)src2w); if (src2_reg) break; if (inp_flags & ALLOW_INV_IMM) { - src2_reg = get_imm(~src2w); + src2_reg = (sljit_s32)get_imm(~(sljit_uw)src2w); if (src2_reg) { flags |= INV_IMM; break; } } - if (GET_OPCODE(op) == SLJIT_ADD) { - src2_reg = get_imm(-src2w); + if (neg_op != 0) { + src2_reg = (sljit_s32)get_imm((sljit_uw)-src2w); if (src2_reg) { - op = SLJIT_SUB | GET_ALL_FLAGS(op); - break; - } - } - if (GET_OPCODE(op) == SLJIT_SUB) { - src2_reg = get_imm(-src2w); - if (src2_reg) { - op = SLJIT_ADD | GET_ALL_FLAGS(op); + op = neg_op | GET_ALL_FLAGS(op); break; } } } if (src1 & SLJIT_IMM) { - src2_reg = get_imm(src1w); + src2_reg = (sljit_s32)get_imm((sljit_uw)src1w); if (src2_reg) { flags |= ARGS_SWAPPED; src1 = src2; @@ -1605,7 +1841,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 break; } if (inp_flags & ALLOW_INV_IMM) { - src2_reg = get_imm(~src1w); + src2_reg = (sljit_s32)get_imm(~(sljit_uw)src1w); if (src2_reg) { flags |= ARGS_SWAPPED | INV_IMM; src1 = src2; @@ -1613,13 +1849,13 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 break; } } - if (GET_OPCODE(op) == SLJIT_ADD) { - src2_reg = get_imm(-src1w); + if (neg_op >= SLJIT_SUB) { + /* Note: additive operation (commutative). */ + src2_reg = (sljit_s32)get_imm((sljit_uw)-src1w); if (src2_reg) { - /* Note: add is commutative operation. */ src1 = src2; src1w = src2w; - op = SLJIT_SUB | GET_ALL_FLAGS(op); + op = neg_op | GET_ALL_FLAGS(op); break; } } @@ -1634,12 +1870,12 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 src1_reg = TMP_REG1; } else { - FAIL_IF(load_immediate(compiler, TMP_REG1, src1w)); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)src1w)); src1_reg = TMP_REG1; } /* Destination. */ - dst_reg = SLOW_IS_REG(dst) ? dst : TMP_REG2; + dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG2; if (op <= SLJIT_MOV_P) { if (dst & SLJIT_MEM) { @@ -1663,10 +1899,10 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 else if (src2 & SLJIT_MEM) FAIL_IF(emit_op_mem(compiler, inp_flags | LOAD_DATA, src2_reg, src2, src2w, TMP_REG2)); else - FAIL_IF(load_immediate(compiler, src2_reg, src2w)); + FAIL_IF(load_immediate(compiler, src2_reg, (sljit_uw)src2w)); } - FAIL_IF(emit_single_op(compiler, op, flags, dst_reg, src1_reg, src2_reg)); + FAIL_IF(emit_single_op(compiler, op, flags, (sljit_uw)dst_reg, (sljit_uw)src1_reg, (sljit_uw)src2_reg)); if (!(dst & SLJIT_MEM)) return SLJIT_SUCCESS; @@ -1691,7 +1927,7 @@ extern int __aeabi_idivmod(int numerator, int denominator); SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { - sljit_sw saved_reg_list[3]; + sljit_uw saved_reg_list[3]; sljit_sw saved_reg_count; CHECK_ERROR(); @@ -1708,10 +1944,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile case SLJIT_LMUL_UW: case SLJIT_LMUL_SW: return push_inst(compiler, (op == SLJIT_LMUL_UW ? UMULL : SMULL) - | (reg_map[SLJIT_R1] << 16) - | (reg_map[SLJIT_R0] << 12) - | (reg_map[SLJIT_R0] << 8) - | reg_map[SLJIT_R1]); + | RN(SLJIT_R1) | RD(SLJIT_R0) | RM8(SLJIT_R0) | RM(SLJIT_R1)); case SLJIT_DIVMOD_UW: case SLJIT_DIVMOD_SW: case SLJIT_DIV_UW: @@ -1742,7 +1975,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile #if defined(__GNUC__) FAIL_IF(sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM, - ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_OFFSET(__aeabi_uidivmod) : SLJIT_FUNC_OFFSET(__aeabi_idivmod)))); + ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_ADDR(__aeabi_uidivmod) : SLJIT_FUNC_ADDR(__aeabi_idivmod)))); #else #error "Software divmod functions are needed" #endif @@ -1756,7 +1989,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile SLJIT_ASSERT(saved_reg_list[1] < 8); FAIL_IF(push_inst(compiler, 0xe59d0004 | (saved_reg_list[1] << 12) /* ldr rX, [sp, #4] */)); } - return push_inst(compiler, 0xe49d0000 | (saved_reg_count >= 3 ? 16 : 8) + return push_inst(compiler, 0xe49d0000 | (sljit_uw)(saved_reg_count >= 3 ? 16 : 8) | (saved_reg_list[0] << 12) /* ldr rX, [sp], #8/16 */); } return SLJIT_SUCCESS; @@ -1781,6 +2014,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: return emit_op(compiler, SLJIT_MOV, ALLOW_ANY_IMM, dst, dstw, TMP_REG1, 0, src, srcw); @@ -1799,13 +2033,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_NOT: return emit_op(compiler, op, ALLOW_ANY_IMM, dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_NEG: -#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ - || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - compiler->skip_checks = 1; -#endif - return sljit_emit_op2(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), dst, dstw, SLJIT_IMM, 0, src, srcw); - case SLJIT_CLZ: return emit_op(compiler, op, 0, dst, dstw, TMP_REG1, 0, src, srcw); } @@ -1819,19 +2046,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src2, sljit_sw src2w) { CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - switch (GET_OPCODE(op)) { case SLJIT_ADD: case SLJIT_ADDC: case SLJIT_SUB: case SLJIT_SUBC: + return emit_op(compiler, op, ALLOW_IMM | ALLOW_NEG_IMM, dst, dstw, src1, src1w, src2, src2w); + case SLJIT_OR: case SLJIT_XOR: return emit_op(compiler, op, ALLOW_IMM, dst, dstw, src1, src1w, src2, src2w); @@ -1858,6 +2084,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -1905,8 +2145,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { + SLJIT_UNUSED_ARG(size); CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1917,23 +2158,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ - #define FPU_LOAD (1 << 20) #define EMIT_FPU_DATA_TRANSFER(inst, add, base, freg, offs) \ - ((inst) | ((add) << 23) | (reg_map[base] << 16) | (freg_map[freg] << 12) | (offs)) -#define EMIT_FPU_OPERATION(opcode, mode, dst, src1, src2) \ - ((opcode) | (mode) | (freg_map[dst] << 12) | freg_map[src1] | (freg_map[src2] << 16)) + ((inst) | (sljit_uw)((add) << 23) | RN(base) | VD(freg) | (sljit_uw)(offs)) static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) { sljit_uw imm; - sljit_sw inst = VSTR_F32 | (flags & (SLJIT_F32_OP | FPU_LOAD)); + sljit_uw inst = VSTR_F32 | (flags & (SLJIT_32 | FPU_LOAD)); SLJIT_ASSERT(arg & SLJIT_MEM); arg &= ~SLJIT_MEM; if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { - FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | ((argw & 0x3) << 7))); + FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (((sljit_uw)argw & 0x3) << 7))); arg = TMP_REG2; argw = 0; } @@ -1945,12 +2183,12 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, if (!(-argw & ~0x3fc)) return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 0, arg & REG_MASK, reg, (-argw) >> 2)); - imm = get_imm(argw & ~0x3fc); + imm = get_imm((sljit_uw)argw & ~(sljit_uw)0x3fc); if (imm) { FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | imm)); return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG2, reg, (argw & 0x3fc) >> 2)); } - imm = get_imm(-argw & ~0x3fc); + imm = get_imm((sljit_uw)-argw & ~(sljit_uw)0x3fc); if (imm) { argw = -argw; FAIL_IF(push_inst(compiler, SUB | RD(TMP_REG2) | RN(arg & REG_MASK) | imm)); @@ -1959,11 +2197,11 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, } if (arg) { - FAIL_IF(load_immediate(compiler, TMP_REG2, argw)); + FAIL_IF(load_immediate(compiler, TMP_REG2, (sljit_uw)argw)); FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG2) | RN(arg & REG_MASK) | RM(TMP_REG2))); } else - FAIL_IF(load_immediate(compiler, TMP_REG2, argw)); + FAIL_IF(load_immediate(compiler, TMP_REG2, (sljit_uw)argw)); return push_inst(compiler, EMIT_FPU_DATA_TRANSFER(inst, 1, TMP_REG2, reg, 0)); } @@ -1972,17 +2210,17 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src, srcw)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src, srcw)); src = TMP_FREG1; } - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_S32_F32, op & SLJIT_F32_OP, TMP_FREG1, src, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_S32_F32, op & SLJIT_32, TMP_FREG1, src, 0))); if (FAST_IS_REG(dst)) - return push_inst(compiler, VMOV | (1 << 20) | RD(dst) | (freg_map[TMP_FREG1] << 16)); + return push_inst(compiler, VMOV | (1 << 20) | RD(dst) | VN(TMP_FREG1)); /* Store the integer value from a VFP register. */ return emit_fop_mem(compiler, 0, TMP_FREG1, dst, dstw); @@ -1994,23 +2232,23 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp { sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (FAST_IS_REG(src)) - FAIL_IF(push_inst(compiler, VMOV | RD(src) | (freg_map[TMP_FREG1] << 16))); + FAIL_IF(push_inst(compiler, VMOV | RD(src) | VN(TMP_FREG1))); else if (src & SLJIT_MEM) { /* Load the integer value into a VFP register. */ FAIL_IF(emit_fop_mem(compiler, FPU_LOAD, TMP_FREG1, src, srcw)); } else { - FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); - FAIL_IF(push_inst(compiler, VMOV | RD(TMP_REG1) | (freg_map[TMP_FREG1] << 16))); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)srcw)); + FAIL_IF(push_inst(compiler, VMOV | RD(TMP_REG1) | VN(TMP_FREG1))); } - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_F32_S32, op & SLJIT_F32_OP, dst_r, TMP_FREG1, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_F32_S32, op & SLJIT_32, dst_r, TMP_FREG1, 0))); if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), TMP_FREG1, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), TMP_FREG1, dst, dstw); return SLJIT_SUCCESS; } @@ -2018,19 +2256,19 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src1 & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src1, src1w)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w)); src1 = TMP_FREG1; } if (src2 & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG2, src2, src2w)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG2, src2, src2w)); src2 = TMP_FREG2; } - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCMP_F32, op & SLJIT_F32_OP, src1, src2, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCMP_F32, op & SLJIT_32, src1, src2, 0))); return push_inst(compiler, VMRS); } @@ -2042,16 +2280,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil CHECK_ERROR(); - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (GET_OPCODE(op) != SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, dst_r, src, srcw)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, dst_r, src, srcw)); src = dst_r; } @@ -2059,25 +2297,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil case SLJIT_MOV_F64: if (src != dst_r) { if (dst_r != TMP_FREG1) - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, op & SLJIT_F32_OP, dst_r, src, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, op & SLJIT_32, dst_r, src, 0))); else dst_r = src; } break; case SLJIT_NEG_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VNEG_F32, op & SLJIT_F32_OP, dst_r, src, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VNEG_F32, op & SLJIT_32, dst_r, src, 0))); break; case SLJIT_ABS_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VABS_F32, op & SLJIT_F32_OP, dst_r, src, 0))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VABS_F32, op & SLJIT_32, dst_r, src, 0))); break; case SLJIT_CONV_F64_FROM_F32: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_F64_F32, op & SLJIT_F32_OP, dst_r, src, 0))); - op ^= SLJIT_F32_OP; + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VCVT_F64_F32, op & SLJIT_32, dst_r, src, 0))); + op ^= SLJIT_32; break; } if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), dst_r, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), dst_r, dst, dstw); return SLJIT_SUCCESS; } @@ -2094,40 +2332,40 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (src2 & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG2, src2, src2w)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG2, src2, src2w)); src2 = TMP_FREG2; } if (src1 & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src1, src1w)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w)); src1 = TMP_FREG1; } switch (GET_OPCODE(op)) { case SLJIT_ADD_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VADD_F32, op & SLJIT_F32_OP, dst_r, src2, src1))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VADD_F32, op & SLJIT_32, dst_r, src2, src1))); break; case SLJIT_SUB_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VSUB_F32, op & SLJIT_F32_OP, dst_r, src2, src1))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VSUB_F32, op & SLJIT_32, dst_r, src2, src1))); break; case SLJIT_MUL_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMUL_F32, op & SLJIT_F32_OP, dst_r, src2, src1))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMUL_F32, op & SLJIT_32, dst_r, src2, src1))); break; case SLJIT_DIV_F64: - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VDIV_F32, op & SLJIT_F32_OP, dst_r, src2, src1))); + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VDIV_F32, op & SLJIT_32, dst_r, src2, src1))); break; } if (dst_r == TMP_FREG1) - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP), TMP_FREG1, dst, dstw)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32), TMP_FREG1, dst, dstw)); return SLJIT_SUCCESS; } @@ -2169,10 +2407,20 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) case SLJIT_NOT_EQUAL_F64: return 0x10000000; + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x20000000; + /* fallthrough */ + case SLJIT_LESS: case SLJIT_LESS_F64: return 0x30000000; + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x30000000; + /* fallthrough */ + case SLJIT_GREATER_EQUAL: case SLJIT_GREATER_EQUAL_F64: return 0x20000000; @@ -2198,15 +2446,17 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) return 0xd0000000; case SLJIT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x10000000; + /* fallthrough */ case SLJIT_UNORDERED_F64: return 0x60000000; case SLJIT_NOT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x00000000; + /* fallthrough */ case SLJIT_ORDERED_F64: return 0x70000000; @@ -2277,111 +2527,124 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile #ifdef __SOFTFP__ -static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src) +static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src, sljit_u32 *extra_space) { - sljit_s32 stack_offset = 0; - sljit_s32 arg_count = 0; - sljit_s32 word_arg_offset = 0; - sljit_s32 float_arg_count = 0; + sljit_u32 is_tail_call = *extra_space & SLJIT_CALL_RETURN; + sljit_u32 offset = 0; + sljit_u32 word_arg_offset = 0; + sljit_u32 src_offset = 4 * sizeof(sljit_sw); + sljit_u32 float_arg_count = 0; sljit_s32 types = 0; - sljit_s32 src_offset = 4 * sizeof(sljit_sw); sljit_u8 offsets[4]; + sljit_u8 *offset_ptr = offsets; if (src && FAST_IS_REG(*src)) - src_offset = reg_map[*src] * sizeof(sljit_sw); + src_offset = (sljit_uw)reg_map[*src] * sizeof(sljit_sw); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_f32); - arg_count++; + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) + offset += sizeof(sljit_sw); + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_f64); float_arg_count++; break; - case SLJIT_ARG_TYPE_F64: - if (stack_offset & 0x7) - stack_offset += sizeof(sljit_sw); - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_f64); - arg_count++; + case SLJIT_ARG_TYPE_F32: + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_f32); float_arg_count++; break; default: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_sw); - arg_count++; + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_sw); word_arg_offset += sizeof(sljit_sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } - if (stack_offset > 16) - FAIL_IF(push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | (((stack_offset - 16) + 0x7) & ~0x7))); + if (offset > 4 * sizeof(sljit_sw) && (!is_tail_call || offset > compiler->args_size)) { + /* Keep lr register on the stack. */ + if (is_tail_call) + offset += sizeof(sljit_sw); + + offset = ((offset - 4 * sizeof(sljit_sw)) + 0x7) & ~(sljit_uw)0x7; + + *extra_space = offset; + + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, (sljit_s32)offset)); + else + FAIL_IF(push_inst(compiler, SUB | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | offset)); + } else { + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, -1)); + *extra_space = 0; + } /* Process arguments in reversed direction. */ while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - arg_count--; - float_arg_count--; - stack_offset = offsets[arg_count]; - - if (stack_offset < 16) { - if (src_offset == stack_offset) { - FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG1) | (src_offset >> 2))); - *src = TMP_REG1; - } - FAIL_IF(push_inst(compiler, VMOV | 0x100000 | (float_arg_count << 16) | (stack_offset << 10))); - } else - FAIL_IF(push_inst(compiler, VSTR_F32 | 0x800000 | RN(SLJIT_SP) | (float_arg_count << 12) | ((stack_offset - 16) >> 2))); - break; + switch (types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: - arg_count--; float_arg_count--; - stack_offset = offsets[arg_count]; + offset = *(--offset_ptr); - SLJIT_ASSERT((stack_offset & 0x7) == 0); + SLJIT_ASSERT((offset & 0x7) == 0); - if (stack_offset < 16) { - if (src_offset == stack_offset || src_offset == stack_offset + sizeof(sljit_sw)) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset || src_offset == offset + sizeof(sljit_sw)) { FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG1) | (src_offset >> 2))); *src = TMP_REG1; } - FAIL_IF(push_inst(compiler, VMOV2 | 0x100000 | (stack_offset << 10) | ((stack_offset + sizeof(sljit_sw)) << 14) | float_arg_count)); + FAIL_IF(push_inst(compiler, VMOV2 | 0x100000 | (offset << 10) | ((offset + sizeof(sljit_sw)) << 14) | float_arg_count)); } else - FAIL_IF(push_inst(compiler, VSTR_F32 | 0x800100 | RN(SLJIT_SP) | (float_arg_count << 12) | ((stack_offset - 16) >> 2))); + FAIL_IF(push_inst(compiler, VSTR_F32 | 0x800100 | RN(SLJIT_SP) + | (float_arg_count << 12) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count--; + offset = *(--offset_ptr); + + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset) { + FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG1) | (src_offset >> 2))); + *src = TMP_REG1; + } + FAIL_IF(push_inst(compiler, VMOV | 0x100000 | (float_arg_count << 16) | (offset << 10))); + } else + FAIL_IF(push_inst(compiler, VSTR_F32 | 0x800000 | RN(SLJIT_SP) + | (float_arg_count << 12) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); break; default: - arg_count--; word_arg_offset -= sizeof(sljit_sw); - stack_offset = offsets[arg_count]; + offset = *(--offset_ptr); - SLJIT_ASSERT(stack_offset >= word_arg_offset); + SLJIT_ASSERT(offset >= word_arg_offset); - if (stack_offset != word_arg_offset) { - if (stack_offset < 16) { - if (src_offset == stack_offset) { + if (offset != word_arg_offset) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset) { FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG1) | (src_offset >> 2))); *src = TMP_REG1; } else if (src_offset == word_arg_offset) { - *src = 1 + (stack_offset >> 2); - src_offset = stack_offset; + *src = (sljit_s32)(SLJIT_R0 + (offset >> 2)); + src_offset = offset; } - FAIL_IF(push_inst(compiler, MOV | (stack_offset << 10) | (word_arg_offset >> 2))); + FAIL_IF(push_inst(compiler, MOV | (offset << 10) | (word_arg_offset >> 2))); } else - FAIL_IF(push_inst(compiler, data_transfer_insts[WORD_SIZE] | 0x800000 | RN(SLJIT_SP) | (word_arg_offset << 10) | (stack_offset - 16))); + FAIL_IF(push_inst(compiler, data_transfer_insts[WORD_SIZE] | 0x800000 | RN(SLJIT_SP) | (word_arg_offset << 10) | (offset - 4 * sizeof(sljit_sw)))); } break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -2389,83 +2652,51 @@ static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit static sljit_s32 softfloat_post_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) { - sljit_s32 stack_size = 0; - - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32) - FAIL_IF(push_inst(compiler, VMOV | (0 << 16) | (0 << 12))); - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F64) + if ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F64) FAIL_IF(push_inst(compiler, VMOV2 | (1 << 16) | (0 << 12) | 0)); + if ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F32) + FAIL_IF(push_inst(compiler, VMOV | (0 << 16) | (0 << 12))); - arg_types >>= SLJIT_DEF_SHIFT; - - while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - stack_size += sizeof(sljit_f32); - break; - case SLJIT_ARG_TYPE_F64: - if (stack_size & 0x7) - stack_size += sizeof(sljit_sw); - stack_size += sizeof(sljit_f64); - break; - default: - stack_size += sizeof(sljit_sw); - break; - } - - arg_types >>= SLJIT_DEF_SHIFT; - } - - if (stack_size <= 16) - return SLJIT_SUCCESS; - - return push_inst(compiler, ADD | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | (((stack_size - 16) + 0x7) & ~0x7)); + return SLJIT_SUCCESS; } #else /* !__SOFTFP__ */ static sljit_s32 hardfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) { - sljit_u32 remap = 0; - sljit_u32 offset = 0; - sljit_u32 new_offset, mask; + sljit_u32 offset = SLJIT_FR0; + sljit_u32 new_offset = SLJIT_FR0; + sljit_u32 f32_offset = 0; /* Remove return value. */ - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32) { - new_offset = 0; - mask = 1; - - while (remap & mask) { - new_offset++; - mask <<= 1; - } - remap |= mask; - + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: if (offset != new_offset) FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, - 0, (new_offset >> 1) + 1, (offset >> 1) + 1, 0) | ((new_offset & 0x1) ? 0x400000 : 0))); + SLJIT_32, new_offset, offset, 0))); - offset += 2; - } - else if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F64) { - new_offset = 0; - mask = 3; - - while (remap & mask) { - new_offset += 2; - mask <<= 2; + new_offset++; + offset++; + break; + case SLJIT_ARG_TYPE_F32: + if (f32_offset != 0) { + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, + 0x400000, f32_offset, offset, 0))); + f32_offset = 0; + } else { + if (offset != new_offset) + FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, + 0, new_offset, offset, 0))); + f32_offset = new_offset; + new_offset++; } - remap |= mask; - - if (offset != new_offset) - FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, SLJIT_F32_OP, (new_offset >> 1) + 1, (offset >> 1) + 1, 0))); - - offset += 2; + offset++; + break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -2480,13 +2711,18 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile { #ifdef __SOFTFP__ struct sljit_jump *jump; + sljit_u32 extra_space = (sljit_u32)type; #endif CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); #ifdef __SOFTFP__ - PTR_FAIL_IF(softfloat_call_with_args(compiler, arg_types, NULL)); + PTR_FAIL_IF(softfloat_call_with_args(compiler, arg_types, NULL, &extra_space)); + SLJIT_ASSERT((extra_space & 0x7) == 0); + + if ((type & SLJIT_CALL_RETURN) && extra_space == 0) + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2496,9 +2732,28 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile jump = sljit_emit_jump(compiler, type); PTR_FAIL_IF(jump == NULL); + if (extra_space > 0) { + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(push_inst(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, + TMP_REG2, SLJIT_SP, extra_space - sizeof(sljit_sw)))); + + PTR_FAIL_IF(push_inst(compiler, ADD | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | extra_space)); + + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(push_inst(compiler, BX | RM(TMP_REG2))); + return jump; + } + } + + SLJIT_ASSERT(!(type & SLJIT_CALL_RETURN)); PTR_FAIL_IF(softfloat_post_call_with_args(compiler, arg_types)); return jump; #else /* !__SOFTFP__ */ + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler, -1)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + PTR_FAIL_IF(hardfloat_call_with_args(compiler, arg_types)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -2535,7 +2790,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_BL : 0)); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) if (type >= SLJIT_FAST_CALL) @@ -2555,16 +2810,29 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { +#ifdef __SOFTFP__ + sljit_u32 extra_space = (sljit_u32)type; +#endif + CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); -#ifdef __SOFTFP__ if (src & SLJIT_MEM) { FAIL_IF(emit_op_mem(compiler, WORD_SIZE | LOAD_DATA, TMP_REG1, src, srcw, TMP_REG1)); src = TMP_REG1; } - FAIL_IF(softfloat_call_with_args(compiler, arg_types, &src)); + if ((type & SLJIT_CALL_RETURN) && (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0)) { + FAIL_IF(push_inst(compiler, MOV | RD(TMP_REG1) | RM(src))); + src = TMP_REG1; + } + +#ifdef __SOFTFP__ + FAIL_IF(softfloat_call_with_args(compiler, arg_types, &src, &extra_space)); + SLJIT_ASSERT((extra_space & 0x7) == 0); + + if ((type & SLJIT_CALL_RETURN) && extra_space == 0) + type = SLJIT_JUMP; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2573,8 +2841,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); + if (extra_space > 0) { + if (type & SLJIT_CALL_RETURN) + FAIL_IF(push_inst(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, + TMP_REG2, SLJIT_SP, extra_space - sizeof(sljit_sw)))); + + FAIL_IF(push_inst(compiler, ADD | RD(SLJIT_SP) | RN(SLJIT_SP) | SRC2_IMM | extra_space)); + + if (type & SLJIT_CALL_RETURN) + return push_inst(compiler, BX | RM(TMP_REG2)); + } + + SLJIT_ASSERT(!(type & SLJIT_CALL_RETURN)); return softfloat_post_call_with_args(compiler, arg_types); #else /* !__SOFTFP__ */ + if (type & SLJIT_CALL_RETURN) { + FAIL_IF(emit_stack_frame_release(compiler, -1)); + type = SLJIT_JUMP; + } + FAIL_IF(hardfloat_call_with_args(compiler, arg_types)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -2636,27 +2921,27 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil CHECK_ERROR(); CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; cc = get_cc(compiler, type & 0xff); if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { - tmp = get_imm(srcw); + tmp = get_imm((sljit_uw)srcw); if (tmp) return push_inst(compiler, ((MOV | RD(dst_reg) | tmp) & ~COND_MASK) | cc); - tmp = get_imm(~srcw); + tmp = get_imm(~(sljit_uw)srcw); if (tmp) return push_inst(compiler, ((MVN | RD(dst_reg) | tmp) & ~COND_MASK) | cc); #if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) - tmp = (sljit_uw) srcw; + tmp = (sljit_uw)srcw; FAIL_IF(push_inst(compiler, (MOVW & ~COND_MASK) | cc | RD(dst_reg) | ((tmp << 4) & 0xf0000) | (tmp & 0xfff))); if (tmp <= 0xffff) return SLJIT_SUCCESS; return push_inst(compiler, (MOVT & ~COND_MASK) | cc | RD(dst_reg) | ((tmp >> 12) & 0xf0000) | ((tmp >> 16) & 0xfff)); #else - FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)srcw)); src = TMP_REG1; #endif } @@ -2680,6 +2965,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: flags = WORD_SIZE; break; @@ -2731,7 +3017,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile if (SLJIT_UNLIKELY(mem & OFFS_REG_MASK)) { memw &= 0x3; - inst = EMIT_DATA_TRANSFER(flags, 1, reg, mem & REG_MASK, RM(OFFS_REG(mem)) | (memw << 7)); + inst = EMIT_DATA_TRANSFER(flags, 1, reg, mem & REG_MASK, RM(OFFS_REG(mem)) | ((sljit_uw)memw << 7)); if (is_type1_transfer) inst |= (1 << 25); @@ -2757,7 +3043,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile else memw = -memw; - return push_inst(compiler, inst | memw); + return push_inst(compiler, inst | (sljit_uw)memw); } if (memw >= 0) @@ -2765,7 +3051,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile else memw = -memw; - return push_inst(compiler, inst | TYPE2_TRANSFER_IMM(memw)); + return push_inst(compiler, inst | TYPE2_TRANSFER_IMM((sljit_uw)memw)); } SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value) @@ -2777,10 +3063,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value)); ADJUST_LOCAL_OFFSET(dst, dstw); - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG2; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) - PTR_FAIL_IF(push_inst_with_unique_literal(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, dst_r, TMP_PC, 0), init_value)); + PTR_FAIL_IF(push_inst_with_unique_literal(compiler, + EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, dst_r, TMP_PC, 0), (sljit_uw)init_value)); compiler->patches++; #else PTR_FAIL_IF(emit_imm(compiler, dst_r, init_value)); @@ -2804,7 +3091,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj CHECK_PTR(check_sljit_emit_put_label(compiler, dst, dstw)); ADJUST_LOCAL_OFFSET(dst, dstw); - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG2; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; #if (defined SLJIT_CONFIG_ARM_V5 && SLJIT_CONFIG_ARM_V5) PTR_FAIL_IF(push_inst_with_unique_literal(compiler, EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1, dst_r, TMP_PC, 0), 0)); @@ -2829,5 +3116,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - inline_set_const(addr, executable_offset, new_constant, 1); + inline_set_const(addr, executable_offset, (sljit_uw)new_constant, 1); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_64.c b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_64.c index 3f0f5fcc..96453b4a 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_64.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_64.c @@ -48,19 +48,20 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 8] = { }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 0, 1, 2, 3, 4, 5, 6, 7 + 0, 0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 15, 14, 13, 12, 11, 10, 9, 8, 30, 31 }; -#define W_OP (1u << 31) -#define RD(rd) (reg_map[rd]) -#define RT(rt) (reg_map[rt]) -#define RN(rn) (reg_map[rn] << 5) -#define RT2(rt2) (reg_map[rt2] << 10) -#define RM(rm) (reg_map[rm] << 16) -#define VD(vd) (freg_map[vd]) -#define VT(vt) (freg_map[vt]) -#define VN(vn) (freg_map[vn] << 5) -#define VM(vm) (freg_map[vm] << 16) +#define W_OP ((sljit_ins)1 << 31) +#define RD(rd) ((sljit_ins)reg_map[rd]) +#define RT(rt) ((sljit_ins)reg_map[rt]) +#define RN(rn) ((sljit_ins)reg_map[rn] << 5) +#define RT2(rt2) ((sljit_ins)reg_map[rt2] << 10) +#define RM(rm) ((sljit_ins)reg_map[rm] << 16) +#define VD(vd) ((sljit_ins)freg_map[vd]) +#define VT(vt) ((sljit_ins)freg_map[vt]) +#define VT2(vt) ((sljit_ins)freg_map[vt] << 10) +#define VN(vn) ((sljit_ins)freg_map[vn] << 5) +#define VM(vm) ((sljit_ins)freg_map[vm] << 16) /* --------------------------------------------------------------------- */ /* Instrucion forms */ @@ -96,8 +97,10 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define FNEG 0x1e614000 #define FSUB 0x1e603800 #define LDRI 0xf9400000 +#define LDRI_F64 0xfd400000 #define LDP 0xa9400000 -#define LDP_PRE 0xa9c00000 +#define LDP_F64 0x6d400000 +#define LDP_POST 0xa8c00000 #define LDR_PRE 0xf8400c00 #define LSLV 0x9ac02000 #define LSRV 0x9ac02400 @@ -117,10 +120,12 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SMADDL 0x9b200000 #define SMULH 0x9b403c00 #define STP 0xa9000000 +#define STP_F64 0x6d000000 #define STP_PRE 0xa9800000 #define STRB 0x38206800 #define STRBI 0x39000000 #define STRI 0xf9000000 +#define STRI_F64 0xfd000000 #define STR_FI 0x3d000000 #define STR_FR 0x3c206800 #define STUR_FI 0x3c000000 @@ -145,10 +150,10 @@ static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins) static SLJIT_INLINE sljit_s32 emit_imm64_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_uw imm) { - FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | ((imm & 0xffff) << 5))); - FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((imm >> 16) & 0xffff) << 5) | (1 << 21))); - FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((imm >> 32) & 0xffff) << 5) | (2 << 21))); - return push_inst(compiler, MOVK | RD(dst) | ((imm >> 48) << 5) | (3 << 21)); + FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | ((sljit_ins)(imm & 0xffff) << 5))); + FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)(imm >> 16) & 0xffff) << 5) | (1 << 21))); + FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)(imm >> 32) & 0xffff) << 5) | (2 << 21))); + return push_inst(compiler, MOVK | RD(dst) | ((sljit_ins)(imm >> 48) << 5) | (3 << 21)); } static SLJIT_INLINE sljit_sw detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset) @@ -171,14 +176,14 @@ static SLJIT_INLINE sljit_sw detect_jump_type(struct sljit_jump *jump, sljit_ins diff = (sljit_sw)target_addr - (sljit_sw)(code_ptr + 4) - executable_offset; if (jump->flags & IS_COND) { - diff += sizeof(sljit_ins); + diff += SSIZE_OF(ins); if (diff <= 0xfffff && diff >= -0x100000) { code_ptr[-5] ^= (jump->flags & IS_CBZ) ? (0x1 << 24) : 0x1; jump->addr -= sizeof(sljit_ins); jump->flags |= PATCH_COND; return 5; } - diff -= sizeof(sljit_ins); + diff -= SSIZE_OF(ins); } if (diff <= 0x7ffffff && diff >= -0x8000000) { @@ -231,8 +236,8 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil sljit_uw word_count; sljit_uw next_addr; sljit_sw executable_offset; - sljit_uw addr; - sljit_s32 dst; + sljit_sw addr; + sljit_u32 dst; struct sljit_label *label; struct sljit_jump *jump; @@ -271,7 +276,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil /* These structures are ordered by their address. */ if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == word_count) { @@ -300,7 +305,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -313,58 +318,58 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil jump = compiler->jumps; while (jump) { do { - addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target; + addr = (sljit_sw)((jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target); buf_ptr = (sljit_ins *)jump->addr; if (jump->flags & PATCH_B) { - addr = (sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; - SLJIT_ASSERT((sljit_sw)addr <= 0x1ffffff && (sljit_sw)addr >= -0x2000000); - buf_ptr[0] = ((jump->flags & IS_BL) ? BL : B) | (addr & 0x3ffffff); + addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; + SLJIT_ASSERT(addr <= 0x1ffffff && addr >= -0x2000000); + buf_ptr[0] = ((jump->flags & IS_BL) ? BL : B) | (sljit_ins)(addr & 0x3ffffff); if (jump->flags & IS_COND) buf_ptr[-1] -= (4 << 5); break; } if (jump->flags & PATCH_COND) { - addr = (sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; - SLJIT_ASSERT((sljit_sw)addr <= 0x3ffff && (sljit_sw)addr >= -0x40000); - buf_ptr[0] = (buf_ptr[0] & ~0xffffe0) | ((addr & 0x7ffff) << 5); + addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; + SLJIT_ASSERT(addr <= 0x3ffff && addr >= -0x40000); + buf_ptr[0] = (buf_ptr[0] & ~(sljit_ins)0xffffe0) | (sljit_ins)((addr & 0x7ffff) << 5); break; } - SLJIT_ASSERT((jump->flags & (PATCH_ABS48 | PATCH_ABS64)) || addr <= 0xffffffffl); - SLJIT_ASSERT((jump->flags & PATCH_ABS64) || addr <= 0xffffffffffffl); + SLJIT_ASSERT((jump->flags & (PATCH_ABS48 | PATCH_ABS64)) || (sljit_uw)addr <= (sljit_uw)0xffffffff); + SLJIT_ASSERT((jump->flags & PATCH_ABS64) || (sljit_uw)addr <= (sljit_uw)0xffffffffffff); dst = buf_ptr[0] & 0x1f; - buf_ptr[0] = MOVZ | dst | ((addr & 0xffff) << 5); - buf_ptr[1] = MOVK | dst | (((addr >> 16) & 0xffff) << 5) | (1 << 21); + buf_ptr[0] = MOVZ | dst | (((sljit_ins)addr & 0xffff) << 5); + buf_ptr[1] = MOVK | dst | (((sljit_ins)(addr >> 16) & 0xffff) << 5) | (1 << 21); if (jump->flags & (PATCH_ABS48 | PATCH_ABS64)) - buf_ptr[2] = MOVK | dst | (((addr >> 32) & 0xffff) << 5) | (2 << 21); + buf_ptr[2] = MOVK | dst | (((sljit_ins)(addr >> 32) & 0xffff) << 5) | (2 << 21); if (jump->flags & PATCH_ABS64) - buf_ptr[3] = MOVK | dst | (((addr >> 48) & 0xffff) << 5) | (3 << 21); + buf_ptr[3] = MOVK | dst | ((sljit_ins)(addr >> 48) << 5) | (3 << 21); } while (0); jump = jump->next; } put_label = compiler->put_labels; while (put_label) { - addr = put_label->label->addr; - buf_ptr = (sljit_ins *)put_label->addr; + addr = (sljit_sw)put_label->label->addr; + buf_ptr = (sljit_ins*)put_label->addr; - buf_ptr[0] |= (addr & 0xffff) << 5; - buf_ptr[1] |= ((addr >> 16) & 0xffff) << 5; + buf_ptr[0] |= ((sljit_ins)addr & 0xffff) << 5; + buf_ptr[1] |= ((sljit_ins)(addr >> 16) & 0xffff) << 5; if (put_label->flags >= 1) - buf_ptr[2] |= ((addr >> 32) & 0xffff) << 5; + buf_ptr[2] |= ((sljit_ins)(addr >> 32) & 0xffff) << 5; if (put_label->flags >= 2) - buf_ptr[3] |= ((addr >> 48) & 0xffff) << 5; + buf_ptr[3] |= (sljit_ins)(addr >> 48) << 5; put_label = put_label->next; } compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_ins); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -426,11 +431,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) value >>= 1; \ } -#define LOGICAL_IMM_CHECK 0x100 +#define LOGICAL_IMM_CHECK (sljit_ins)0x100 -static sljit_ins logical_imm(sljit_sw imm, sljit_s32 len) +static sljit_ins logical_imm(sljit_sw imm, sljit_u32 len) { - sljit_s32 negated, ones, right; + sljit_s32 negated; + sljit_u32 ones, right; sljit_uw mask, uimm; sljit_ins ins; @@ -497,30 +503,30 @@ static sljit_ins logical_imm(sljit_sw imm, sljit_s32 len) static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw simm) { sljit_uw imm = (sljit_uw)simm; - sljit_s32 i, zeros, ones, first; + sljit_u32 i, zeros, ones, first; sljit_ins bitmask; /* Handling simple immediates first. */ if (imm <= 0xffff) - return push_inst(compiler, MOVZ | RD(dst) | (imm << 5)); + return push_inst(compiler, MOVZ | RD(dst) | ((sljit_ins)imm << 5)); if (simm < 0 && simm >= -0x10000) - return push_inst(compiler, MOVN | RD(dst) | ((~imm & 0xffff) << 5)); + return push_inst(compiler, MOVN | RD(dst) | (((sljit_ins)~imm & 0xffff) << 5)); if (imm <= 0xffffffffl) { if ((imm & 0xffff) == 0) - return push_inst(compiler, MOVZ | RD(dst) | ((imm >> 16) << 5) | (1 << 21)); + return push_inst(compiler, MOVZ | RD(dst) | ((sljit_ins)(imm >> 16) << 5) | (1 << 21)); if ((imm & 0xffff0000l) == 0xffff0000) - return push_inst(compiler, (MOVN ^ W_OP) | RD(dst) | ((~imm & 0xffff) << 5)); + return push_inst(compiler, (MOVN ^ W_OP) | RD(dst) | (((sljit_ins)~imm & 0xffff) << 5)); if ((imm & 0xffff) == 0xffff) - return push_inst(compiler, (MOVN ^ W_OP) | RD(dst) | ((~imm & 0xffff0000l) >> (16 - 5)) | (1 << 21)); + return push_inst(compiler, (MOVN ^ W_OP) | RD(dst) | (((sljit_ins)~imm & 0xffff0000u) >> (16 - 5)) | (1 << 21)); bitmask = logical_imm(simm, 16); if (bitmask != 0) return push_inst(compiler, (ORRI ^ W_OP) | RD(dst) | RN(TMP_ZERO) | bitmask); - FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | ((imm & 0xffff) << 5))); - return push_inst(compiler, MOVK | RD(dst) | ((imm & 0xffff0000l) >> (16 - 5)) | (1 << 21)); + FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | (((sljit_ins)imm & 0xffff) << 5))); + return push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)imm & 0xffff0000u) >> (16 - 5)) | (1 << 21)); } bitmask = logical_imm(simm, 32); @@ -529,10 +535,10 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, if (simm < 0 && simm >= -0x100000000l) { if ((imm & 0xffff) == 0xffff) - return push_inst(compiler, MOVN | RD(dst) | ((~imm & 0xffff0000l) >> (16 - 5)) | (1 << 21)); + return push_inst(compiler, MOVN | RD(dst) | (((sljit_ins)~imm & 0xffff0000u) >> (16 - 5)) | (1 << 21)); - FAIL_IF(push_inst(compiler, MOVN | RD(dst) | ((~imm & 0xffff) << 5))); - return push_inst(compiler, MOVK | RD(dst) | ((imm & 0xffff0000l) >> (16 - 5)) | (1 << 21)); + FAIL_IF(push_inst(compiler, MOVN | RD(dst) | (((sljit_ins)~imm & 0xffff) << 5))); + return push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)imm & 0xffff0000u) >> (16 - 5)) | (1 << 21)); } /* A large amount of number can be constructed from ORR and MOVx, but computing them is costly. */ @@ -558,10 +564,10 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, } if (first) { first = 0; - FAIL_IF(push_inst(compiler, MOVN | RD(dst) | ((simm & 0xffff) << 5) | (i << 21))); + FAIL_IF(push_inst(compiler, MOVN | RD(dst) | (((sljit_ins)simm & 0xffff) << 5) | (i << 21))); } else - FAIL_IF(push_inst(compiler, MOVK | RD(dst) | ((~simm & 0xffff) << 5) | (i << 21))); + FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)~simm & 0xffff) << 5) | (i << 21))); simm >>= 16; } return SLJIT_SUCCESS; @@ -574,10 +580,10 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, } if (first) { first = 0; - FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | ((simm & 0xffff) << 5) | (i << 21))); + FAIL_IF(push_inst(compiler, MOVZ | RD(dst) | (((sljit_ins)simm & 0xffff) << 5) | (i << 21))); } else - FAIL_IF(push_inst(compiler, MOVK | RD(dst) | ((simm & 0xffff) << 5) | (i << 21))); + FAIL_IF(push_inst(compiler, MOVK | RD(dst) | (((sljit_ins)simm & 0xffff) << 5) | (i << 21))); simm >>= 16; } return SLJIT_SUCCESS; @@ -619,12 +625,11 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s } if (flags & (ARG1_IMM | ARG2_IMM)) { - reg = (flags & ARG2_IMM) ? arg1 : arg2; + reg = (sljit_s32)((flags & ARG2_IMM) ? arg1 : arg2); imm = (flags & ARG2_IMM) ? arg2 : arg1; switch (op) { case SLJIT_MUL: - case SLJIT_NEG: case SLJIT_CLZ: case SLJIT_ADDC: case SLJIT_SUBC: @@ -639,40 +644,43 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s FAIL_IF(load_immediate(compiler, dst, (flags & INT_OP) ? (~imm & 0xffffffff) : ~imm)); goto set_flags; case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; if (flags & ARG1_IMM) break; imm = -imm; /* Fall through. */ case SLJIT_ADD: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + if (op != SLJIT_SUB) + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + if (imm == 0) { CHECK_FLAGS(1 << 29); return push_inst(compiler, ((op == SLJIT_ADD ? ADDI : SUBI) ^ inv_bits) | RD(dst) | RN(reg)); } if (imm > 0 && imm <= 0xfff) { CHECK_FLAGS(1 << 29); - return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | (imm << 10)); + return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | ((sljit_ins)imm << 10)); } nimm = -imm; if (nimm > 0 && nimm <= 0xfff) { CHECK_FLAGS(1 << 29); - return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | (nimm << 10)); + return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | ((sljit_ins)nimm << 10)); } if (imm > 0 && imm <= 0xffffff && !(imm & 0xfff)) { CHECK_FLAGS(1 << 29); - return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | ((imm >> 12) << 10) | (1 << 22)); + return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | (((sljit_ins)imm >> 12) << 10) | (1 << 22)); } if (nimm > 0 && nimm <= 0xffffff && !(nimm & 0xfff)) { CHECK_FLAGS(1 << 29); - return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | ((nimm >> 12) << 10) | (1 << 22)); + return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | (((sljit_ins)nimm >> 12) << 10) | (1 << 22)); } if (imm > 0 && imm <= 0xffffff && !(flags & SET_FLAGS)) { - FAIL_IF(push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | ((imm >> 12) << 10) | (1 << 22))); - return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(dst) | ((imm & 0xfff) << 10)); + FAIL_IF(push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(reg) | (((sljit_ins)imm >> 12) << 10) | (1 << 22))); + return push_inst(compiler, (ADDI ^ inv_bits) | RD(dst) | RN(dst) | (((sljit_ins)imm & 0xfff) << 10)); } if (nimm > 0 && nimm <= 0xffffff && !(flags & SET_FLAGS)) { - FAIL_IF(push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | ((nimm >> 12) << 10) | (1 << 22))); - return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(dst) | ((nimm & 0xfff) << 10)); + FAIL_IF(push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(reg) | (((sljit_ins)nimm >> 12) << 10) | (1 << 22))); + return push_inst(compiler, (SUBI ^ inv_bits) | RD(dst) | RN(dst) | (((sljit_ins)nimm & 0xfff) << 10)); } break; case SLJIT_AND: @@ -697,11 +705,13 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s break; if (flags & INT_OP) { imm &= 0x1f; - FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | ((-imm & 0x1f) << 16) | ((31 - imm) << 10))); + FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) + | (((sljit_ins)-imm & 0x1f) << 16) | ((31 - (sljit_ins)imm) << 10))); } else { imm &= 0x3f; - FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | (1 << 22) | ((-imm & 0x3f) << 16) | ((63 - imm) << 10))); + FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | (1 << 22) + | (((sljit_ins)-imm & 0x3f) << 16) | ((63 - (sljit_ins)imm) << 10))); } goto set_flags; case SLJIT_LSHR: @@ -712,11 +722,13 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s inv_bits |= 1 << 30; if (flags & INT_OP) { imm &= 0x1f; - FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | (imm << 16) | (31 << 10))); + FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) + | ((sljit_ins)imm << 16) | (31 << 10))); } else { imm &= 0x3f; - FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) | (1 << 22) | (imm << 16) | (63 << 10))); + FAIL_IF(push_inst(compiler, (UBFM ^ inv_bits) | RD(dst) | RN(arg1) + | (1 << 22) | ((sljit_ins)imm << 16) | (63 << 10))); } goto set_flags; default: @@ -766,41 +778,38 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s if (!(flags & INT_OP)) inv_bits |= 1 << 22; return push_inst(compiler, (SBFM ^ inv_bits) | RD(dst) | RN(arg2) | (15 << 10)); + case SLJIT_MOV32: + SLJIT_ASSERT(!(flags & SET_FLAGS) && arg1 == TMP_REG1); + if (dst == arg2) + return SLJIT_SUCCESS; + /* fallthrough */ case SLJIT_MOV_U32: SLJIT_ASSERT(!(flags & SET_FLAGS) && arg1 == TMP_REG1); - if ((flags & INT_OP) && dst == arg2) - return SLJIT_SUCCESS; return push_inst(compiler, (ORR ^ W_OP) | RD(dst) | RN(TMP_ZERO) | RM(arg2)); case SLJIT_MOV_S32: SLJIT_ASSERT(!(flags & SET_FLAGS) && arg1 == TMP_REG1); - if ((flags & INT_OP) && dst == arg2) - return SLJIT_SUCCESS; return push_inst(compiler, SBFM | (1 << 22) | RD(dst) | RN(arg2) | (31 << 10)); case SLJIT_NOT: SLJIT_ASSERT(arg1 == TMP_REG1); FAIL_IF(push_inst(compiler, (ORN ^ inv_bits) | RD(dst) | RN(TMP_ZERO) | RM(arg2))); break; /* Set flags. */ - case SLJIT_NEG: - SLJIT_ASSERT(arg1 == TMP_REG1); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - if (flags & SET_FLAGS) - inv_bits |= 1 << 29; - return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(TMP_ZERO) | RM(arg2)); case SLJIT_CLZ: SLJIT_ASSERT(arg1 == TMP_REG1); return push_inst(compiler, (CLZ ^ inv_bits) | RD(dst) | RN(arg2)); case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; CHECK_FLAGS(1 << 29); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return push_inst(compiler, (ADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; CHECK_FLAGS(1 << 29); return push_inst(compiler, (ADC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; CHECK_FLAGS(1 << 29); - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; CHECK_FLAGS(1 << 29); return push_inst(compiler, (SBC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2)); case SLJIT_MUL: @@ -852,7 +861,7 @@ set_flags: #define INT_SIZE 0x2 #define WORD_SIZE 0x3 -#define MEM_SIZE_SHIFT(flags) ((flags) & 0x3) +#define MEM_SIZE_SHIFT(flags) ((sljit_ins)(flags) & 0x3) static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 tmp_reg) @@ -872,35 +881,34 @@ static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, s return push_inst(compiler, STRB | type | RT(reg) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (argw ? (1 << 12) : 0)); - FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (argw << 10))); + FAIL_IF(push_inst(compiler, ADD | RD(tmp_reg) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | ((sljit_ins)argw << 10))); return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg)); } arg &= REG_MASK; - if (arg == SLJIT_UNUSED) { + if (!arg) { FAIL_IF(load_immediate(compiler, tmp_reg, argw & ~(0xfff << shift))); argw = (argw >> shift) & 0xfff; - return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg) | (argw << 10)); + return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg) | ((sljit_ins)argw << 10)); } if (argw >= 0 && (argw & ((1 << shift) - 1)) == 0) { - if ((argw >> shift) <= 0xfff) { - return push_inst(compiler, STRBI | type | RT(reg) | RN(arg) | (argw << (10 - shift))); - } + if ((argw >> shift) <= 0xfff) + return push_inst(compiler, STRBI | type | RT(reg) | RN(arg) | ((sljit_ins)argw << (10 - shift))); if (argw <= 0xffffff) { - FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(tmp_reg) | RN(arg) | ((argw >> 12) << 10))); + FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(tmp_reg) | RN(arg) | (((sljit_ins)argw >> 12) << 10))); argw = ((argw & 0xfff) >> shift); - return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg) | (argw << 10)); + return push_inst(compiler, STRBI | type | RT(reg) | RN(tmp_reg) | ((sljit_ins)argw << 10)); } } if (argw <= 255 && argw >= -256) - return push_inst(compiler, STURBI | type | RT(reg) | RN(arg) | ((argw & 0x1ff) << 12)); + return push_inst(compiler, STURBI | type | RT(reg) | RN(arg) | (((sljit_ins)argw & 0x1ff) << 12)); FAIL_IF(load_immediate(compiler, tmp_reg, argw)); @@ -915,39 +923,44 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args, i, tmp, offs, prev, saved_regs_size; + sljit_s32 prev, fprev, saved_regs_size, i, tmp; + sljit_s32 word_arg_count = 0; + sljit_ins offs; CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 2); - if (saved_regs_size & 0x8) - saved_regs_size += sizeof(sljit_sw); + saved_regs_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, SSIZE_OF(f64)); - local_size = (local_size + 15) & ~0xf; - compiler->local_size = local_size + saved_regs_size; + local_size = (local_size + saved_regs_size + 0xf) & ~0xf; + compiler->local_size = local_size; - FAIL_IF(push_inst(compiler, STP_PRE | RT(TMP_FP) | RT2(TMP_LR) - | RN(SLJIT_SP) | ((-(saved_regs_size >> 3) & 0x7f) << 15))); + if (local_size <= 512) { + FAIL_IF(push_inst(compiler, STP_PRE | RT(TMP_FP) | RT2(TMP_LR) + | RN(SLJIT_SP) | (sljit_ins)((-(local_size >> 3) & 0x7f) << 15))); + offs = (sljit_ins)(local_size - 2 * SSIZE_OF(sw)) << (15 - 3); + local_size = 0; + } else { + saved_regs_size = ((saved_regs_size - 2 * SSIZE_OF(sw)) + 0xf) & ~0xf; -#ifdef _WIN32 - if (local_size >= 4096) - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); - else if (local_size > 256) - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(SLJIT_SP) | (local_size << 10))); -#endif + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((sljit_ins)saved_regs_size << 10))); + offs = (sljit_ins)(saved_regs_size - 2 * SSIZE_OF(sw)) << (15 - 3); + local_size -= saved_regs_size; + SLJIT_ASSERT(local_size > 0); + } - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; prev = -1; - offs = 2 << 15; - for (i = SLJIT_S0; i >= tmp; i--) { + + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { if (prev == -1) { prev = i; continue; } FAIL_IF(push_inst(compiler, STP | RT(prev) | RT2(i) | RN(SLJIT_SP) | offs)); - offs += 2 << 15; + offs -= (sljit_ins)2 << 15; prev = -1; } @@ -957,84 +970,124 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi continue; } FAIL_IF(push_inst(compiler, STP | RT(prev) | RT2(i) | RN(SLJIT_SP) | offs)); - offs += 2 << 15; + offs -= (sljit_ins)2 << 15; prev = -1; } + fprev = -1; + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + if (fprev == -1) { + fprev = i; + continue; + } + FAIL_IF(push_inst(compiler, STP_F64 | VT(fprev) | VT2(i) | RN(SLJIT_SP) | offs)); + offs -= (sljit_ins)2 << 15; + fprev = -1; + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + if (fprev == -1) { + fprev = i; + continue; + } + FAIL_IF(push_inst(compiler, STP_F64 | VT(fprev) | VT2(i) | RN(SLJIT_SP) | offs)); + offs -= (sljit_ins)2 << 15; + fprev = -1; + } + + if (fprev != -1) + FAIL_IF(push_inst(compiler, STRI_F64 | VT(fprev) | RN(SLJIT_SP) | (offs >> 5) | (1 << 10))); + if (prev != -1) - FAIL_IF(push_inst(compiler, STRI | RT(prev) | RN(SLJIT_SP) | (offs >> 5))); + FAIL_IF(push_inst(compiler, STRI | RT(prev) | RN(SLJIT_SP) | (offs >> 5) | ((fprev == -1) ? (1 << 10) : 0))); - - FAIL_IF(push_inst(compiler, ADDI | RD(TMP_FP) | RN(SLJIT_SP) | (0 << 10))); - - args = get_arg_count(arg_types); - - if (args >= 1) - FAIL_IF(push_inst(compiler, ORR | RD(SLJIT_S0) | RN(TMP_ZERO) | RM(SLJIT_R0))); - if (args >= 2) - FAIL_IF(push_inst(compiler, ORR | RD(SLJIT_S1) | RN(TMP_ZERO) | RM(SLJIT_R1))); - if (args >= 3) - FAIL_IF(push_inst(compiler, ORR | RD(SLJIT_S2) | RN(TMP_ZERO) | RM(SLJIT_R2))); + arg_types >>= SLJIT_ARG_SHIFT; #ifdef _WIN32 - if (local_size >= 4096) { + if (local_size > 4096) + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); +#endif /* _WIN32 */ + + tmp = 0; + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, ORR | RD(SLJIT_S0 - tmp) | RN(TMP_ZERO) | RM(SLJIT_R0 + word_arg_count))); + tmp++; + } + word_arg_count++; + } + arg_types >>= SLJIT_ARG_SHIFT; + } + +#ifdef _WIN32 + if (local_size > 4096) { if (local_size < 4 * 4096) { /* No need for a loop. */ - if (local_size >= 2 * 4096) { - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(TMP_REG1) | (1 << 10) | (1 << 22))); - local_size -= 4096; - } if (local_size >= 2 * 4096) { - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(TMP_REG1) | (1 << 10) | (1 << 22))); - local_size -= 4096; - } + if (local_size >= 3 * 4096) { + FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(SLJIT_SP))); + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); + } - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - local_size -= 4096; + FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(SLJIT_SP))); + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); + } } else { - FAIL_IF(push_inst(compiler, MOVZ | RD(TMP_REG2) | (((local_size >> 12) - 1) << 5))); - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(TMP_REG1) | (1 << 10) | (1 << 22))); - FAIL_IF(push_inst(compiler, SUBI | (1 << 29) | RD(TMP_REG2) | RN(TMP_REG2) | (1 << 10))); + FAIL_IF(push_inst(compiler, MOVZ | RD(TMP_REG1) | ((((sljit_ins)local_size >> 12) - 1) << 5))); + FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(SLJIT_SP))); + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (1 << 10) | (1 << 22))); + FAIL_IF(push_inst(compiler, SUBI | (1 << 29) | RD(TMP_REG1) | RN(TMP_REG1) | (1 << 10))); FAIL_IF(push_inst(compiler, B_CC | ((((sljit_ins) -3) & 0x7ffff) << 5) | 0x1 /* not-equal */)); - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - - local_size &= 0xfff; } - if (local_size > 256) { - FAIL_IF(push_inst(compiler, SUBI | RD(TMP_REG1) | RN(TMP_REG1) | (local_size << 10))); - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - } - else if (local_size > 0) - FAIL_IF(push_inst(compiler, LDR_PRE | RT(TMP_ZERO) | RN(TMP_REG1) | ((-local_size & 0x1ff) << 12))); + local_size &= 0xfff; - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(TMP_REG1) | (0 << 10))); + if (local_size > 0) + FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(SLJIT_SP))); + else + FAIL_IF(push_inst(compiler, STP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); } - else if (local_size > 256) { - FAIL_IF(push_inst(compiler, LDRI | RT(TMP_ZERO) | RN(TMP_REG1))); - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(TMP_REG1) | (0 << 10))); + + if (local_size > 0) { + if (local_size <= 512) + FAIL_IF(push_inst(compiler, STP_PRE | RT(TMP_FP) | RT2(TMP_LR) + | RN(SLJIT_SP) | (sljit_ins)((-(local_size >> 3) & 0x7f) << 15))); + else { + if (local_size >= 4096) + local_size = (1 << (22 - 10)); + + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((sljit_ins)local_size << 10))); + FAIL_IF(push_inst(compiler, STP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); + } } - else if (local_size > 0) - FAIL_IF(push_inst(compiler, LDR_PRE | RT(TMP_ZERO) | RN(SLJIT_SP) | ((-local_size & 0x1ff) << 12))); #else /* !_WIN32 */ /* The local_size does not include saved registers size. */ - if (local_size > 0xfff) { - FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((local_size >> 12) << 10) | (1 << 22))); - local_size &= 0xfff; + if (local_size != 0) { + if (local_size > 0xfff) { + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (((sljit_ins)local_size >> 12) << 10) | (1 << 22))); + local_size &= 0xfff; + } + + if (local_size > 512 || local_size == 0) { + if (local_size != 0) + FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((sljit_ins)local_size << 10))); + + FAIL_IF(push_inst(compiler, STP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); + } else + FAIL_IF(push_inst(compiler, STP_PRE | RT(TMP_FP) | RT2(TMP_LR) + | RN(SLJIT_SP) | (sljit_ins)((-(local_size >> 3) & 0x7f) << 15))); } - if (local_size != 0) - FAIL_IF(push_inst(compiler, SUBI | RD(SLJIT_SP) | RN(SLJIT_SP) | (local_size << 10))); #endif /* _WIN32 */ - return SLJIT_SUCCESS; + return push_inst(compiler, ADDI | RD(TMP_FP) | RN(SLJIT_SP) | (0 << 10)); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, @@ -1048,57 +1101,49 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 2); - if (saved_regs_size & 0x8) - saved_regs_size += sizeof(sljit_sw); + saved_regs_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, SSIZE_OF(f64)); - compiler->local_size = saved_regs_size + ((local_size + 15) & ~0xf); + compiler->local_size = (local_size + saved_regs_size + 0xf) & ~0xf; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) { - sljit_s32 local_size; - sljit_s32 i, tmp, offs, prev, saved_regs_size; + sljit_s32 local_size, prev, fprev, i, tmp; + sljit_ins offs; - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); + local_size = compiler->local_size; - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); - - saved_regs_size = GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 2); - if (saved_regs_size & 0x8) - saved_regs_size += sizeof(sljit_sw); - - local_size = compiler->local_size - saved_regs_size; - - /* Load LR as early as possible. */ - if (local_size == 0) + if (local_size > 512 && local_size <= 512 + 496) { + FAIL_IF(push_inst(compiler, LDP_POST | RT(TMP_FP) | RT2(TMP_LR) + | RN(SLJIT_SP) | ((sljit_ins)(local_size - 512) << (15 - 3)))); + local_size = 512; + } else FAIL_IF(push_inst(compiler, LDP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); - else if (local_size < 63 * sizeof(sljit_sw)) { - FAIL_IF(push_inst(compiler, LDP_PRE | RT(TMP_FP) | RT2(TMP_LR) - | RN(SLJIT_SP) | (local_size << (15 - 3)))); - } - else { + + if (local_size > 512) { + local_size -= 512; if (local_size > 0xfff) { - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((local_size >> 12) << 10) | (1 << 22))); + FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) + | (((sljit_ins)local_size >> 12) << 10) | (1 << 22))); local_size &= 0xfff; } - if (local_size) - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | (local_size << 10))); - FAIL_IF(push_inst(compiler, LDP | RT(TMP_FP) | RT2(TMP_LR) | RN(SLJIT_SP))); + FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | ((sljit_ins)local_size << 10))); + local_size = 512; } - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; + offs = (sljit_ins)(local_size - 2 * SSIZE_OF(sw)) << (15 - 3); prev = -1; - offs = 2 << 15; - for (i = SLJIT_S0; i >= tmp; i--) { + + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0; i > tmp; i--) { if (prev == -1) { prev = i; continue; } FAIL_IF(push_inst(compiler, LDP | RT(prev) | RT2(i) | RN(SLJIT_SP) | offs)); - offs += 2 << 15; + offs -= (sljit_ins)2 << 15; prev = -1; } @@ -1108,15 +1153,50 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp continue; } FAIL_IF(push_inst(compiler, LDP | RT(prev) | RT2(i) | RN(SLJIT_SP) | offs)); - offs += 2 << 15; + offs -= (sljit_ins)2 << 15; prev = -1; } - if (prev != -1) - FAIL_IF(push_inst(compiler, LDRI | RT(prev) | RN(SLJIT_SP) | (offs >> 5))); + fprev = -1; + + tmp = SLJIT_FS0 - compiler->fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + if (fprev == -1) { + fprev = i; + continue; + } + FAIL_IF(push_inst(compiler, LDP_F64 | VT(fprev) | VT2(i) | RN(SLJIT_SP) | offs)); + offs -= (sljit_ins)2 << 15; + fprev = -1; + } + + for (i = compiler->fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + if (fprev == -1) { + fprev = i; + continue; + } + FAIL_IF(push_inst(compiler, LDP_F64 | VT(fprev) | VT2(i) | RN(SLJIT_SP) | offs)); + offs -= (sljit_ins)2 << 15; + fprev = -1; + } + + if (fprev != -1) + FAIL_IF(push_inst(compiler, LDRI_F64 | VT(fprev) | RN(SLJIT_SP) | (offs >> 5) | (1 << 10))); + + if (prev != -1) + FAIL_IF(push_inst(compiler, LDRI | RT(prev) | RN(SLJIT_SP) | (offs >> 5) | ((fprev == -1) ? (1 << 10) : 0))); + + /* This and the next call/jump instruction can be executed parallelly. */ + return push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | (sljit_ins)(local_size << 10)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(emit_stack_frame_release(compiler)); - /* These two can be executed in parallel. */ - FAIL_IF(push_inst(compiler, ADDI | RD(SLJIT_SP) | RN(SLJIT_SP) | (saved_regs_size << 10))); return push_inst(compiler, RET | RN(TMP_LR)); } @@ -1126,7 +1206,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { - sljit_ins inv_bits = (op & SLJIT_I32_OP) ? W_OP : 0; + sljit_ins inv_bits = (op & SLJIT_32) ? W_OP : 0; CHECK_ERROR(); CHECK(check_sljit_emit_op0(compiler, op)); @@ -1171,13 +1251,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; op = GET_OPCODE(op); if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) { /* Both operands are registers. */ if (dst_r != TMP_REG1 && FAST_IS_REG(src)) - return emit_op_imm(compiler, op | ((op_flags & SLJIT_I32_OP) ? INT_OP : 0), dst_r, TMP_REG1, src); + return emit_op_imm(compiler, op | ((op_flags & SLJIT_32) ? INT_OP : 0), dst_r, TMP_REG1, src); switch (op) { case SLJIT_MOV: @@ -1210,6 +1290,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile srcw = (sljit_u32)srcw; break; case SLJIT_MOV_S32: + case SLJIT_MOV32: mem_flags = INT_SIZE | SIGNED; if (src & SLJIT_IMM) srcw = (sljit_s32)srcw; @@ -1235,14 +1316,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile flags = HAS_FLAGS(op_flags) ? SET_FLAGS : 0; mem_flags = WORD_SIZE; - if (op_flags & SLJIT_I32_OP) { + if (op_flags & SLJIT_32) { flags |= INT_OP; mem_flags = INT_SIZE; } - if (dst == SLJIT_UNUSED) - flags |= UNUSED_RETURN; - if (src & SLJIT_MEM) { FAIL_IF(emit_op_mem(compiler, mem_flags, TMP_REG2, src, srcw, TMP_REG2)); src = TMP_REG2; @@ -1263,24 +1341,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 dst_r, flags, mem_flags; CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; flags = HAS_FLAGS(op) ? SET_FLAGS : 0; mem_flags = WORD_SIZE; - if (op & SLJIT_I32_OP) { + if (op & SLJIT_32) { flags |= INT_OP; mem_flags = INT_SIZE; } - if (dst == SLJIT_UNUSED) + if (dst == TMP_REG1) flags |= UNUSED_RETURN; if (src1 & SLJIT_MEM) { @@ -1310,6 +1385,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -1363,8 +1452,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { + SLJIT_UNUSED_ARG(size); CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1391,34 +1481,34 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, return push_inst(compiler, STR_FR | type | VT(reg) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (argw ? (1 << 12) : 0)); - FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG1) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | (argw << 10))); + FAIL_IF(push_inst(compiler, ADD | RD(TMP_REG1) | RN(arg & REG_MASK) | RM(OFFS_REG(arg)) | ((sljit_ins)argw << 10))); return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1)); } arg &= REG_MASK; - if (arg == SLJIT_UNUSED) { + if (!arg) { FAIL_IF(load_immediate(compiler, TMP_REG1, argw & ~(0xfff << shift))); argw = (argw >> shift) & 0xfff; - return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | (argw << 10)); + return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | ((sljit_ins)argw << 10)); } if (argw >= 0 && (argw & ((1 << shift) - 1)) == 0) { if ((argw >> shift) <= 0xfff) - return push_inst(compiler, STR_FI | type | VT(reg) | RN(arg) | (argw << (10 - shift))); + return push_inst(compiler, STR_FI | type | VT(reg) | RN(arg) | ((sljit_ins)argw << (10 - shift))); if (argw <= 0xffffff) { - FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(TMP_REG1) | RN(arg) | ((argw >> 12) << 10))); + FAIL_IF(push_inst(compiler, ADDI | (1 << 22) | RD(TMP_REG1) | RN(arg) | (((sljit_ins)argw >> 12) << 10))); argw = ((argw & 0xfff) >> shift); - return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | (argw << 10)); + return push_inst(compiler, STR_FI | type | VT(reg) | RN(TMP_REG1) | ((sljit_ins)argw << 10)); } } if (argw <= 255 && argw >= -256) - return push_inst(compiler, STUR_FI | type | VT(reg) | RN(arg) | ((argw & 0x1ff) << 12)); + return push_inst(compiler, STUR_FI | type | VT(reg) | RN(arg) | (((sljit_ins)argw & 0x1ff) << 12)); FAIL_IF(load_immediate(compiler, TMP_REG1, argw)); return push_inst(compiler, STR_FR | type | VT(reg) | RN(arg) | RM(TMP_REG1)); @@ -1429,13 +1519,13 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp sljit_s32 src, sljit_sw srcw) { sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; - sljit_ins inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + sljit_ins inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; if (GET_OPCODE(op) == SLJIT_CONV_S32_FROM_F64) inv_bits |= W_OP; if (src & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE, TMP_FREG1, src, srcw); + emit_fop_mem(compiler, (op & SLJIT_32) ? INT_SIZE : WORD_SIZE, TMP_FREG1, src, srcw); src = TMP_FREG1; } @@ -1451,7 +1541,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp sljit_s32 src, sljit_sw srcw) { sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; - sljit_ins inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + sljit_ins inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32) inv_bits |= W_OP; @@ -1471,7 +1561,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp FAIL_IF(push_inst(compiler, (SCVTF ^ inv_bits) | VD(dst_r) | RN(src))); if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, ((op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE) | STORE, TMP_FREG1, dst, dstw); + return emit_fop_mem(compiler, ((op & SLJIT_32) ? INT_SIZE : WORD_SIZE) | STORE, TMP_FREG1, dst, dstw); return SLJIT_SUCCESS; } @@ -1479,8 +1569,8 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - sljit_s32 mem_flags = (op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE; - sljit_ins inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + sljit_s32 mem_flags = (op & SLJIT_32) ? INT_SIZE : WORD_SIZE; + sljit_ins inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; if (src1 & SLJIT_MEM) { emit_fop_mem(compiler, mem_flags, TMP_FREG1, src1, src1w); @@ -1499,7 +1589,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { - sljit_s32 dst_r, mem_flags = (op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE; + sljit_s32 dst_r, mem_flags = (op & SLJIT_32) ? INT_SIZE : WORD_SIZE; sljit_ins inv_bits; CHECK_ERROR(); @@ -1507,7 +1597,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil SLJIT_COMPILE_ASSERT((INT_SIZE ^ 0x1) == WORD_SIZE, must_be_one_bit_difference); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); - inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (src & SLJIT_MEM) { @@ -1531,7 +1621,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil FAIL_IF(push_inst(compiler, (FABS ^ inv_bits) | VD(dst_r) | VN(src))); break; case SLJIT_CONV_F64_FROM_F32: - FAIL_IF(push_inst(compiler, FCVT | ((op & SLJIT_F32_OP) ? (1 << 22) : (1 << 15)) | VD(dst_r) | VN(src))); + FAIL_IF(push_inst(compiler, FCVT | (sljit_ins)((op & SLJIT_32) ? (1 << 22) : (1 << 15)) | VD(dst_r) | VN(src))); break; } @@ -1545,8 +1635,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - sljit_s32 dst_r, mem_flags = (op & SLJIT_F32_OP) ? INT_SIZE : WORD_SIZE; - sljit_ins inv_bits = (op & SLJIT_F32_OP) ? (1 << 22) : 0; + sljit_s32 dst_r, mem_flags = (op & SLJIT_32) ? INT_SIZE : WORD_SIZE; + sljit_ins inv_bits = (op & SLJIT_32) ? (1 << 22) : 0; CHECK_ERROR(); CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); @@ -1605,7 +1695,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * /* Conditional instructions */ /* --------------------------------------------------------------------- */ -static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) +static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { case SLJIT_EQUAL: @@ -1616,10 +1706,20 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) case SLJIT_NOT_EQUAL_F64: return 0x0; + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x3; + /* fallthrough */ + case SLJIT_LESS: case SLJIT_LESS_F64: return 0x2; + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x2; + /* fallthrough */ + case SLJIT_GREATER_EQUAL: case SLJIT_GREATER_EQUAL_F64: return 0x3; @@ -1645,15 +1745,17 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) return 0xc; case SLJIT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x0; + /* fallthrough */ case SLJIT_UNORDERED_F64: return 0x7; case SLJIT_NOT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x1; + /* fallthrough */ case SLJIT_ORDERED_F64: return 0x6; @@ -1709,9 +1811,15 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types) { + SLJIT_UNUSED_ARG(arg_types); CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; @@ -1724,7 +1832,7 @@ static SLJIT_INLINE struct sljit_jump* emit_cmp_to0(struct sljit_compiler *compi sljit_s32 src, sljit_sw srcw) { struct sljit_jump *jump; - sljit_ins inv_bits = (type & SLJIT_I32_OP) ? W_OP : 0; + sljit_ins inv_bits = (type & SLJIT_32) ? W_OP : 0; SLJIT_ASSERT((type & 0xff) == SLJIT_EQUAL || (type & 0xff) == SLJIT_NOT_EQUAL); ADJUST_LOCAL_OFFSET(src, srcw); @@ -1775,7 +1883,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_BL : 0)); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; FAIL_IF(emit_imm64_const(compiler, TMP_REG1, 0)); jump->addr = compiler->size; @@ -1786,8 +1894,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { + SLJIT_UNUSED_ARG(arg_types); CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG1, src, srcw, TMP_REG1)); + src = TMP_REG1; + } + + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0) { + FAIL_IF(push_inst(compiler, ORR | RD(TMP_REG1) | RN(TMP_ZERO) | RM(src))); + src = TMP_REG1; + } + + FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP; + } #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -1825,7 +1950,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co flags = HAS_FLAGS(op) ? SET_FLAGS : 0; mem_flags = WORD_SIZE; - if (op & SLJIT_I32_OP) { + if (op & SLJIT_32) { flags |= INT_OP; mem_flags = INT_SIZE; } @@ -1849,14 +1974,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil sljit_s32 dst_reg, sljit_s32 src, sljit_sw srcw) { - sljit_ins inv_bits = (dst_reg & SLJIT_I32_OP) ? W_OP : 0; + sljit_ins inv_bits = (dst_reg & SLJIT_32) ? W_OP : 0; sljit_ins cc; CHECK_ERROR(); CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { - if (dst_reg & SLJIT_I32_OP) + if (dst_reg & SLJIT_32) srcw = (sljit_s32)srcw; FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); src = TMP_REG1; @@ -1864,7 +1989,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil } cc = get_cc(compiler, type & 0xff); - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; return push_inst(compiler, (CSEL ^ inv_bits) | (cc << 12) | RD(dst_reg) | RN(dst_reg) | RM(src)); } @@ -1891,17 +2016,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile break; case SLJIT_MOV_S8: sign = 1; + /* fallthrough */ case SLJIT_MOV_U8: inst = STURBI | (MEM_SIZE_SHIFT(BYTE_SIZE) << 30) | 0x400; break; case SLJIT_MOV_S16: sign = 1; + /* fallthrough */ case SLJIT_MOV_U16: inst = STURBI | (MEM_SIZE_SHIFT(HALF_SIZE) << 30) | 0x400; break; case SLJIT_MOV_S32: sign = 1; + /* fallthrough */ case SLJIT_MOV_U32: + case SLJIT_MOV32: inst = STURBI | (MEM_SIZE_SHIFT(INT_SIZE) << 30) | 0x400; break; default: @@ -1916,7 +2045,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile if (type & SLJIT_MEM_PRE) inst |= 0x800; - return push_inst(compiler, inst | RT(reg) | RN(mem & REG_MASK) | ((memw & 0x1ff) << 12)); + return push_inst(compiler, inst | RT(reg) | RN(mem & REG_MASK) | (sljit_ins)((memw & 0x1ff) << 12)); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compiler, sljit_s32 type, @@ -1936,7 +2065,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compil inst = STUR_FI | 0x80000400; - if (!(type & SLJIT_F32_OP)) + if (!(type & SLJIT_32)) inst |= 0x40000000; if (!(type & SLJIT_MEM_STORE)) @@ -1945,7 +2074,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compil if (type & SLJIT_MEM_PRE) inst |= 0x800; - return push_inst(compiler, inst | VT(freg) | RN(mem & REG_MASK) | ((memw & 0x1ff) << 12)); + return push_inst(compiler, inst | VT(freg) | RN(mem & REG_MASK) | (sljit_ins)((memw & 0x1ff) << 12)); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_local_base(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw offset) @@ -1955,11 +2084,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_local_base(struct sljit_compiler *c CHECK_ERROR(); CHECK(check_sljit_get_local_base(compiler, dst, dstw, offset)); - - SLJIT_ASSERT (SLJIT_LOCALS_OFFSET_BASE == 0); + ADJUST_LOCAL_OFFSET(SLJIT_MEM1(SLJIT_SP), offset); dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG1; + /* Not all instruction forms support accessing SP register. */ if (offset <= 0xffffff && offset >= -0xffffff) { ins = ADDI; if (offset < 0) { @@ -1968,13 +2097,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_local_base(struct sljit_compiler *c } if (offset <= 0xfff) - FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(SLJIT_SP) | (offset << 10))); + FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(SLJIT_SP) | (sljit_ins)(offset << 10))); else { - FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(SLJIT_SP) | ((offset & 0xfff000) >> (12 - 10)) | (1 << 22))); + FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(SLJIT_SP) | (sljit_ins)((offset & 0xfff000) >> (12 - 10)) | (1 << 22))); offset &= 0xfff; if (offset != 0) - FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(dst_reg) | (offset << 10))); + FAIL_IF(push_inst(compiler, ins | RD(dst_reg) | RN(dst_reg) | (sljit_ins)(offset << 10))); } } else { @@ -2002,7 +2131,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi set_const(const_, compiler); dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; - PTR_FAIL_IF(emit_imm64_const(compiler, dst_r, init_value)); + PTR_FAIL_IF(emit_imm64_const(compiler, dst_r, (sljit_uw)init_value)); if (dst & SLJIT_MEM) PTR_FAIL_IF(emit_op_mem(compiler, WORD_SIZE | STORE, dst_r, dst, dstw, TMP_REG2)); @@ -2034,17 +2163,17 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset) { sljit_ins* inst = (sljit_ins*)addr; - sljit_s32 dst; + sljit_u32 dst; SLJIT_UNUSED_ARG(executable_offset); SLJIT_UPDATE_WX_FLAGS(inst, inst + 4, 0); dst = inst[0] & 0x1f; SLJIT_ASSERT((inst[0] & 0xffe00000) == MOVZ && (inst[1] & 0xffe00000) == (MOVK | (1 << 21))); - inst[0] = MOVZ | dst | ((new_target & 0xffff) << 5); - inst[1] = MOVK | dst | (((new_target >> 16) & 0xffff) << 5) | (1 << 21); - inst[2] = MOVK | dst | (((new_target >> 32) & 0xffff) << 5) | (2 << 21); - inst[3] = MOVK | dst | ((new_target >> 48) << 5) | (3 << 21); + inst[0] = MOVZ | dst | (((sljit_u32)new_target & 0xffff) << 5); + inst[1] = MOVK | dst | (((sljit_u32)(new_target >> 16) & 0xffff) << 5) | (1 << 21); + inst[2] = MOVK | dst | (((sljit_u32)(new_target >> 32) & 0xffff) << 5) | (2 << 21); + inst[3] = MOVK | dst | ((sljit_u32)(new_target >> 48) << 5) | (3 << 21); SLJIT_UPDATE_WX_FLAGS(inst, inst + 4, 1); inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); @@ -2053,5 +2182,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c index e35dbe99..ed21ea7d 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c @@ -50,40 +50,42 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 5] = { }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 0, 1, 2, 3, 4, 5, 6, 7 + 0, 0, 1, 2, 3, 4, 5, 15, 14, 13, 12, 11, 10, 9, 8, 6, 7 }; #define COPY_BITS(src, from, to, bits) \ - ((from >= to ? (src >> (from - to)) : (src << (to - from))) & (((1 << bits) - 1) << to)) + ((from >= to ? ((sljit_ins)(src) >> (from - to)) : ((sljit_ins)(src) << (to - from))) & (((1 << bits) - 1) << to)) + +#define NEGATE(uimm) ((sljit_uw)-(sljit_sw)(uimm)) /* Thumb16 encodings. */ -#define RD3(rd) (reg_map[rd]) -#define RN3(rn) (reg_map[rn] << 3) -#define RM3(rm) (reg_map[rm] << 6) -#define RDN3(rdn) (reg_map[rdn] << 8) -#define IMM3(imm) (imm << 6) -#define IMM8(imm) (imm) +#define RD3(rd) ((sljit_ins)reg_map[rd]) +#define RN3(rn) ((sljit_ins)reg_map[rn] << 3) +#define RM3(rm) ((sljit_ins)reg_map[rm] << 6) +#define RDN3(rdn) ((sljit_ins)reg_map[rdn] << 8) +#define IMM3(imm) ((sljit_ins)imm << 6) +#define IMM8(imm) ((sljit_ins)imm) /* Thumb16 helpers. */ #define SET_REGS44(rd, rn) \ - ((reg_map[rn] << 3) | (reg_map[rd] & 0x7) | ((reg_map[rd] & 0x8) << 4)) + (((sljit_ins)reg_map[rn] << 3) | ((sljit_ins)reg_map[rd] & 0x7) | (((sljit_ins)reg_map[rd] & 0x8) << 4)) #define IS_2_LO_REGS(reg1, reg2) \ (reg_map[reg1] <= 7 && reg_map[reg2] <= 7) #define IS_3_LO_REGS(reg1, reg2, reg3) \ (reg_map[reg1] <= 7 && reg_map[reg2] <= 7 && reg_map[reg3] <= 7) /* Thumb32 encodings. */ -#define RD4(rd) (reg_map[rd] << 8) -#define RN4(rn) (reg_map[rn] << 16) -#define RM4(rm) (reg_map[rm]) -#define RT4(rt) (reg_map[rt] << 12) -#define DD4(dd) (freg_map[dd] << 12) -#define DN4(dn) (freg_map[dn] << 16) -#define DM4(dm) (freg_map[dm]) +#define RD4(rd) ((sljit_ins)reg_map[rd] << 8) +#define RN4(rn) ((sljit_ins)reg_map[rn] << 16) +#define RM4(rm) ((sljit_ins)reg_map[rm]) +#define RT4(rt) ((sljit_ins)reg_map[rt] << 12) +#define DD4(dd) ((sljit_ins)freg_map[dd] << 12) +#define DN4(dn) ((sljit_ins)freg_map[dn] << 16) +#define DM4(dm) ((sljit_ins)freg_map[dm]) #define IMM5(imm) \ - (COPY_BITS(imm, 2, 12, 3) | ((imm & 0x3) << 6)) + (COPY_BITS(imm, 2, 12, 3) | (((sljit_ins)imm & 0x3) << 6)) #define IMM12(imm) \ - (COPY_BITS(imm, 11, 26, 1) | COPY_BITS(imm, 8, 12, 3) | (imm & 0xff)) + (COPY_BITS(imm, 11, 26, 1) | COPY_BITS(imm, 8, 12, 3) | ((sljit_ins)imm & 0xff)) /* --------------------------------------------------------------------- */ /* Instrucion forms */ @@ -100,7 +102,8 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define ADDSI8 0x3000 #define ADD_W 0xeb000000 #define ADDWI 0xf2000000 -#define ADD_SP 0xb000 +#define ADD_SP 0x4485 +#define ADD_SP_I 0xb000 #define ADD_W 0xeb000000 #define ADD_WI 0xf1000000 #define ANDI 0xf0000000 @@ -126,6 +129,8 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define EORS 0x4040 #define EOR_W 0xea800000 #define IT 0xbf00 +#define LDR_SP 0x9800 +#define LDR 0xf8d00000 #define LDRI 0xf8500800 #define LSLS 0x4080 #define LSLSI 0x0000 @@ -168,13 +173,15 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SUBSI8 0x3800 #define SUB_W 0xeba00000 #define SUBWI 0xf2a00000 -#define SUB_SP 0xb080 +#define SUB_SP_I 0xb080 #define SUB_WI 0xf1a00000 #define SXTB 0xb240 #define SXTB_W 0xfa4ff080 #define SXTH 0xb200 #define SXTH_W 0xfa0ff080 #define TST 0x4200 +#define TSTI 0xf0000f00 +#define TST_W 0xea000f00 #define UDIV 0xfbb0f0f0 #define UMULL 0xfba00000 #define UXTB 0xb2c0 @@ -188,12 +195,15 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define VCVT_F64_F32 0xeeb70ac0 #define VCVT_S32_F32 0xeebd0ac0 #define VDIV_F32 0xee800a00 +#define VLDR_F32 0xed100a00 #define VMOV_F32 0xeeb00a40 #define VMOV 0xee000a10 #define VMOV2 0xec400a10 #define VMRS 0xeef1fa10 #define VMUL_F32 0xee200a00 #define VNEG_F32 0xeeb10a40 +#define VPOP 0xecbd0b00 +#define VPUSH 0xed2d0b00 #define VSTR_F32 0xed000a00 #define VSUB_F32 0xee300a40 @@ -204,7 +214,7 @@ static sljit_s32 push_inst16(struct sljit_compiler *compiler, sljit_ins inst) ptr = (sljit_u16*)ensure_buf(compiler, sizeof(sljit_u16)); FAIL_IF(!ptr); - *ptr = inst; + *ptr = (sljit_u16)(inst); compiler->size++; return SLJIT_SUCCESS; } @@ -213,8 +223,8 @@ static sljit_s32 push_inst32(struct sljit_compiler *compiler, sljit_ins inst) { sljit_u16 *ptr = (sljit_u16*)ensure_buf(compiler, sizeof(sljit_ins)); FAIL_IF(!ptr); - *ptr++ = inst >> 16; - *ptr = inst; + *ptr++ = (sljit_u16)(inst >> 16); + *ptr = (sljit_u16)(inst); compiler->size += 2; return SLJIT_SUCCESS; } @@ -229,12 +239,12 @@ static SLJIT_INLINE sljit_s32 emit_imm32_const(struct sljit_compiler *compiler, static SLJIT_INLINE void modify_imm32_const(sljit_u16 *inst, sljit_uw new_imm) { - sljit_s32 dst = inst[1] & 0x0f00; + sljit_ins dst = inst[1] & 0x0f00; SLJIT_ASSERT(((inst[0] & 0xfbf0) == (MOVW >> 16)) && ((inst[2] & 0xfbf0) == (MOVT >> 16)) && dst == (inst[3] & 0x0f00)); - inst[0] = (MOVW >> 16) | COPY_BITS(new_imm, 12, 0, 4) | COPY_BITS(new_imm, 11, 10, 1); - inst[1] = dst | COPY_BITS(new_imm, 8, 12, 3) | (new_imm & 0xff); - inst[2] = (MOVT >> 16) | COPY_BITS(new_imm, 12 + 16, 0, 4) | COPY_BITS(new_imm, 11 + 16, 10, 1); - inst[3] = dst | COPY_BITS(new_imm, 8 + 16, 12, 3) | ((new_imm & 0xff0000) >> 16); + inst[0] = (sljit_u16)((MOVW >> 16) | COPY_BITS(new_imm, 12, 0, 4) | COPY_BITS(new_imm, 11, 10, 1)); + inst[1] = (sljit_u16)(dst | COPY_BITS(new_imm, 8, 12, 3) | (new_imm & 0xff)); + inst[2] = (sljit_u16)((MOVT >> 16) | COPY_BITS(new_imm, 12 + 16, 0, 4) | COPY_BITS(new_imm, 11 + 16, 10, 1)); + inst[3] = (sljit_u16)(dst | COPY_BITS(new_imm, 8 + 16, 12, 3) | ((new_imm & 0xff0000) >> 16)); } static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_u16 *code_ptr, sljit_u16 *code, sljit_sw executable_offset) @@ -318,24 +328,24 @@ static SLJIT_INLINE void set_jump_instruction(struct sljit_jump *jump, sljit_sw case 1: /* Encoding T1 of 'B' instruction */ SLJIT_ASSERT(diff <= 127 && diff >= -128 && (jump->flags & IS_COND)); - jump_inst[0] = 0xd000 | (jump->flags & 0xf00) | (diff & 0xff); + jump_inst[0] = (sljit_u16)(0xd000 | (jump->flags & 0xf00) | ((sljit_ins)diff & 0xff)); return; case 2: /* Encoding T3 of 'B' instruction */ SLJIT_ASSERT(diff <= 524287 && diff >= -524288 && (jump->flags & IS_COND)); - jump_inst[0] = 0xf000 | COPY_BITS(jump->flags, 8, 6, 4) | COPY_BITS(diff, 11, 0, 6) | COPY_BITS(diff, 19, 10, 1); - jump_inst[1] = 0x8000 | COPY_BITS(diff, 17, 13, 1) | COPY_BITS(diff, 18, 11, 1) | (diff & 0x7ff); + jump_inst[0] = (sljit_u16)(0xf000 | COPY_BITS(jump->flags, 8, 6, 4) | COPY_BITS(diff, 11, 0, 6) | COPY_BITS(diff, 19, 10, 1)); + jump_inst[1] = (sljit_u16)(0x8000 | COPY_BITS(diff, 17, 13, 1) | COPY_BITS(diff, 18, 11, 1) | ((sljit_ins)diff & 0x7ff)); return; case 3: SLJIT_ASSERT(jump->flags & IS_COND); - *jump_inst++ = IT | ((jump->flags >> 4) & 0xf0) | 0x8; + *jump_inst++ = (sljit_u16)(IT | ((jump->flags >> 4) & 0xf0) | 0x8); diff--; type = 5; break; case 4: /* Encoding T2 of 'B' instruction */ SLJIT_ASSERT(diff <= 1023 && diff >= -1024 && !(jump->flags & IS_COND)); - jump_inst[0] = 0xe000 | (diff & 0x7ff); + jump_inst[0] = (sljit_u16)(0xe000 | (diff & 0x7ff)); return; } @@ -345,8 +355,8 @@ static SLJIT_INLINE void set_jump_instruction(struct sljit_jump *jump, sljit_sw s = (diff >> 23) & 0x1; j1 = (~(diff >> 22) ^ s) & 0x1; j2 = (~(diff >> 21) ^ s) & 0x1; - jump_inst[0] = 0xf000 | (s << 10) | COPY_BITS(diff, 11, 0, 10); - jump_inst[1] = (j1 << 13) | (j2 << 11) | (diff & 0x7ff); + jump_inst[0] = (sljit_u16)(0xf000 | ((sljit_ins)s << 10) | COPY_BITS(diff, 11, 0, 10)); + jump_inst[1] = (sljit_u16)((j1 << 13) | (j2 << 11) | (diff & 0x7ff)); /* The others have a common form. */ if (type == 5) /* Encoding T4 of 'B' instruction */ @@ -405,7 +415,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil /* These structures are ordered by their address. */ if (label && label->size == half_count) { label->addr = ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset)) | 0x1; - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == half_count) { @@ -433,7 +443,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == half_count) { label->addr = ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset)) | 0x1; - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -457,7 +467,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_u16); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_u16); code = (sljit_u16 *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_u16 *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -592,7 +602,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s } if (flags & (ARG1_IMM | ARG2_IMM)) { - reg = (flags & ARG2_IMM) ? arg1 : arg2; + reg = (sljit_s32)((flags & ARG2_IMM) ? arg1 : arg2); imm = (flags & ARG2_IMM) ? arg2 : arg1; switch (flags & 0xffff) { @@ -610,8 +620,8 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s Although some clever things could be done here, "NOT IMM" does not worth the efforts. */ break; case SLJIT_ADD: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - nimm = -(sljit_sw)imm; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + nimm = NEGATE(imm); if (IS_2_LO_REGS(reg, dst)) { if (imm <= 0x7) return push_inst16(compiler, ADDSI3 | IMM3(imm) | RD3(dst) | RN3(reg)); @@ -633,18 +643,18 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s nimm = get_imm(imm); if (nimm != INVALID_IMM) return push_inst32(compiler, ADD_WI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); - nimm = get_imm(-(sljit_sw)imm); + nimm = get_imm(NEGATE(imm)); if (nimm != INVALID_IMM) return push_inst32(compiler, SUB_WI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); break; case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; imm = get_imm(imm); if (imm != INVALID_IMM) return push_inst32(compiler, ADCI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | imm); break; case SLJIT_SUB: - /* SUB operation can be replaced by ADD because of the negative carry flag. */ - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; if (flags & ARG1_IMM) { if (imm == 0 && IS_2_LO_REGS(reg, dst)) return push_inst16(compiler, RSBSI | RD3(dst) | RN3(reg)); @@ -659,11 +669,12 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s nimm = get_imm(imm); if (nimm != INVALID_IMM) return push_inst32(compiler, CMPI_W | RN4(reg) | nimm); - nimm = get_imm(-(sljit_sw)imm); + nimm = get_imm(NEGATE(imm)); if (nimm != INVALID_IMM) return push_inst32(compiler, CMNI_W | RN4(reg) | nimm); + break; } - nimm = -(sljit_sw)imm; + nimm = NEGATE(imm); if (IS_2_LO_REGS(reg, dst)) { if (imm <= 0x7) return push_inst16(compiler, SUBSI3 | IMM3(imm) | RD3(dst) | RN3(reg)); @@ -685,11 +696,12 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s nimm = get_imm(imm); if (nimm != INVALID_IMM) return push_inst32(compiler, SUB_WI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); - nimm = get_imm(-(sljit_sw)imm); + nimm = get_imm(NEGATE(imm)); if (nimm != INVALID_IMM) return push_inst32(compiler, ADD_WI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); break; case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; if (flags & ARG1_IMM) break; imm = get_imm(imm); @@ -699,8 +711,8 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s case SLJIT_AND: nimm = get_imm(imm); if (nimm != INVALID_IMM) - return push_inst32(compiler, ANDI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); - imm = get_imm(imm); + return push_inst32(compiler, ((flags & UNUSED_RETURN) ? TSTI : ANDI) | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); + imm = get_imm(~imm); if (imm != INVALID_IMM) return push_inst32(compiler, BICI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | imm); break; @@ -708,7 +720,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s nimm = get_imm(imm); if (nimm != INVALID_IMM) return push_inst32(compiler, ORRI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | nimm); - imm = get_imm(imm); + imm = get_imm(~imm); if (imm != INVALID_IMM) return push_inst32(compiler, ORNI | (flags & SET_FLAGS) | RD4(dst) | RN4(reg) | imm); break; @@ -752,12 +764,12 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s if (flags & ARG2_IMM) { imm = arg2; arg2 = (arg1 == TMP_REG1) ? TMP_REG2 : TMP_REG1; - FAIL_IF(load_immediate(compiler, arg2, imm)); + FAIL_IF(load_immediate(compiler, (sljit_s32)arg2, imm)); } else { imm = arg1; arg1 = (arg2 == TMP_REG1) ? TMP_REG2 : TMP_REG1; - FAIL_IF(load_immediate(compiler, arg1, imm)); + FAIL_IF(load_immediate(compiler, (sljit_s32)arg1, imm)); } SLJIT_ASSERT(arg1 != arg2); @@ -768,9 +780,10 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: SLJIT_ASSERT(!(flags & SET_FLAGS) && arg1 == TMP_REG2); - if (dst == arg2) + if (dst == (sljit_s32)arg2) return SLJIT_SUCCESS; return push_inst16(compiler, MOV | SET_REGS44(dst, arg2)); case SLJIT_MOV_U8: @@ -803,18 +816,19 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s FAIL_IF(push_inst32(compiler, CLZ | RN4(arg2) | RD4(dst) | RM4(arg2))); return SLJIT_SUCCESS; case SLJIT_ADD: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; if (IS_3_LO_REGS(dst, arg1, arg2)) return push_inst16(compiler, ADDS | RD3(dst) | RN3(arg1) | RM3(arg2)); - if (dst == arg1 && !(flags & SET_FLAGS)) + if (dst == (sljit_s32)arg1 && !(flags & SET_FLAGS)) return push_inst16(compiler, ADD | SET_REGS44(dst, arg2)); return push_inst32(compiler, ADD_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_ADDC: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, ADCS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, ADC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_SUB: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; if (flags & UNUSED_RETURN) { if (IS_2_LO_REGS(arg1, arg2)) return push_inst16(compiler, CMP | RD3(arg1) | RN3(arg2)); @@ -824,7 +838,8 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s return push_inst16(compiler, SUBS | RD3(dst) | RN3(arg1) | RM3(arg2)); return push_inst32(compiler, SUB_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_SUBC: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, SBCS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, SBC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_MUL: @@ -836,29 +851,29 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s /* cmp TMP_REG2, dst asr #31. */ return push_inst32(compiler, CMP_W | RN4(TMP_REG2) | 0x70e0 | RM4(dst)); case SLJIT_AND: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, ANDS | RD3(dst) | RN3(arg2)); if ((flags & UNUSED_RETURN) && IS_2_LO_REGS(arg1, arg2)) return push_inst16(compiler, TST | RD3(arg1) | RN3(arg2)); - return push_inst32(compiler, AND_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); + return push_inst32(compiler, ((flags & UNUSED_RETURN) ? TST_W : AND_W) | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_OR: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, ORRS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, ORR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_XOR: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, EORS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, EOR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_SHL: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, LSLS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, LSL_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_LSHR: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, LSRS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, LSR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); case SLJIT_ASHR: - if (dst == arg1 && IS_2_LO_REGS(dst, arg2)) + if (dst == (sljit_s32)arg1 && IS_2_LO_REGS(dst, arg2)) return push_inst16(compiler, ASRS | RD3(dst) | RN3(arg2)); return push_inst32(compiler, ASR_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2)); } @@ -951,20 +966,22 @@ static const sljit_ins sljit_mem32[13] = { /* Helper function. Dst should be reg + value, using at most 1 instruction, flags does not set. */ static sljit_s32 emit_set_delta(struct sljit_compiler *compiler, sljit_s32 dst, sljit_s32 reg, sljit_sw value) { + sljit_uw imm; + if (value >= 0) { if (value <= 0xfff) return push_inst32(compiler, ADDWI | RD4(dst) | RN4(reg) | IMM12(value)); - value = get_imm(value); - if (value != INVALID_IMM) - return push_inst32(compiler, ADD_WI | RD4(dst) | RN4(reg) | value); + imm = get_imm((sljit_uw)value); + if (imm != INVALID_IMM) + return push_inst32(compiler, ADD_WI | RD4(dst) | RN4(reg) | imm); } else { value = -value; if (value <= 0xfff) return push_inst32(compiler, SUBWI | RD4(dst) | RN4(reg) | IMM12(value)); - value = get_imm(value); - if (value != INVALID_IMM) - return push_inst32(compiler, SUB_WI | RD4(dst) | RN4(reg) | value); + imm = get_imm((sljit_uw)value); + if (imm != INVALID_IMM) + return push_inst32(compiler, SUB_WI | RD4(dst) | RN4(reg) | imm); } return SLJIT_ERR_UNSUPPORTED; } @@ -980,13 +997,13 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit arg &= ~SLJIT_MEM; if (SLJIT_UNLIKELY(!(arg & REG_MASK))) { - tmp = get_imm(argw & ~0xfff); + tmp = get_imm((sljit_uw)argw & ~(sljit_uw)0xfff); if (tmp != INVALID_IMM) { FAIL_IF(push_inst32(compiler, MOV_WI | RD4(tmp_reg) | tmp)); return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM12 | RT4(reg) | RN4(tmp_reg) | (argw & 0xfff)); } - FAIL_IF(load_immediate(compiler, tmp_reg, argw)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw)); if (IS_2_LO_REGS(reg, tmp_reg) && sljit_mem16_imm5[flags]) return push_inst16(compiler, sljit_mem16_imm5[flags] | RD3(reg) | RN3(tmp_reg)); return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM12 | RT4(reg) | RN4(tmp_reg)); @@ -999,11 +1016,11 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit if (!argw && IS_3_LO_REGS(reg, arg, other_r)) return push_inst16(compiler, sljit_mem16[flags] | RD3(reg) | RN3(arg) | RM3(other_r)); - return push_inst32(compiler, sljit_mem32[flags] | RT4(reg) | RN4(arg) | RM4(other_r) | (argw << 4)); + return push_inst32(compiler, sljit_mem32[flags] | RT4(reg) | RN4(arg) | RM4(other_r) | ((sljit_ins)argw << 4)); } if (argw > 0xfff) { - tmp = get_imm(argw & ~0xfff); + tmp = get_imm((sljit_uw)argw & ~(sljit_uw)0xfff); if (tmp != INVALID_IMM) { push_inst32(compiler, ADD_WI | RD4(tmp_reg) | RN4(arg) | tmp); arg = tmp_reg; @@ -1011,7 +1028,7 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } } else if (argw < -0xff) { - tmp = get_imm(-argw & ~0xff); + tmp = get_imm((sljit_uw)-argw & ~(sljit_uw)0xff); if (tmp != INVALID_IMM) { push_inst32(compiler, SUB_WI | RD4(tmp_reg) | RN4(arg) | tmp); arg = tmp_reg; @@ -1037,21 +1054,21 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit } if (tmp < 3) - return push_inst16(compiler, sljit_mem16_imm5[flags] | RD3(reg) | RN3(arg) | (argw << (6 - tmp))); + return push_inst16(compiler, sljit_mem16_imm5[flags] | RD3(reg) | RN3(arg) | ((sljit_ins)argw << (6 - tmp))); } else if (SLJIT_UNLIKELY(arg == SLJIT_SP) && IS_WORD_SIZE(flags) && OFFSET_CHECK(0xff, 2) && reg_map[reg] <= 7) { /* SP based immediate. */ - return push_inst16(compiler, STR_SP | ((flags & STORE) ? 0 : 0x800) | RDN3(reg) | (argw >> 2)); + return push_inst16(compiler, STR_SP | (sljit_ins)((flags & STORE) ? 0 : 0x800) | RDN3(reg) | ((sljit_ins)argw >> 2)); } if (argw >= 0 && argw <= 0xfff) - return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM12 | RT4(reg) | RN4(arg) | argw); + return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM12 | RT4(reg) | RN4(arg) | (sljit_ins)argw); else if (argw < 0 && argw >= -0xff) - return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM8 | RT4(reg) | RN4(arg) | -argw); + return push_inst32(compiler, sljit_mem32[flags] | MEM_IMM8 | RT4(reg) | RN4(arg) | (sljit_ins)-argw); SLJIT_ASSERT(arg != tmp_reg); - FAIL_IF(load_immediate(compiler, tmp_reg, argw)); + FAIL_IF(load_immediate(compiler, tmp_reg, (sljit_uw)argw)); if (IS_3_LO_REGS(reg, arg, tmp_reg)) return push_inst16(compiler, sljit_mem16[flags] | RD3(reg) | RN3(arg) | RM3(tmp_reg)); return push_inst32(compiler, sljit_mem32[flags] | RT4(reg) | RN4(arg) | RM4(tmp_reg)); @@ -1065,115 +1082,204 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args, size, i, tmp; - sljit_ins push = 0; -#ifdef _WIN32 - sljit_uw imm; + sljit_s32 size, i, tmp, word_arg_count, saved_arg_count; + sljit_uw offset; + sljit_uw imm = 0; +#ifdef __SOFTFP__ + sljit_u32 float_arg_count; +#else + sljit_u32 old_offset, f32_offset; + sljit_u32 remap[3]; + sljit_u32 *remap_ptr = remap; #endif CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) - push |= 1 << reg_map[i]; + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) + imm |= (sljit_uw)1 << reg_map[i]; for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) - push |= 1 << reg_map[i]; + imm |= (sljit_uw)1 << reg_map[i]; - FAIL_IF((push & 0xff00) - ? push_inst32(compiler, PUSH_W | (1 << 14) | push) - : push_inst16(compiler, PUSH | (1 << 8) | push)); + /* At least two registers must be set for PUSH_W and one for PUSH instruction. */ + FAIL_IF((imm & 0xff00) + ? push_inst32(compiler, PUSH_W | (1 << 14) | imm) + : push_inst16(compiler, PUSH | (1 << 8) | imm)); /* Stack must be aligned to 8 bytes: (LR, R4) */ size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - local_size = ((size + local_size + 7) & ~7) - size; - compiler->local_size = local_size; -#ifdef _WIN32 - if (local_size >= 256) { - if (local_size > 4096) - imm = get_imm(4096); - else - imm = get_imm(local_size & ~0xff); - - SLJIT_ASSERT(imm != INVALID_IMM); - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(SLJIT_SP) | imm)); - } -#else - if (local_size > 0) { - if (local_size <= (127 << 2)) - FAIL_IF(push_inst16(compiler, SUB_SP | (local_size >> 2))); - else - FAIL_IF(emit_op_imm(compiler, SLJIT_SUB | ARG2_IMM, SLJIT_SP, SLJIT_SP, local_size)); - } -#endif - - args = get_arg_count(arg_types); - - if (args >= 1) - FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_S0, SLJIT_R0))); - if (args >= 2) - FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_S1, SLJIT_R1))); - if (args >= 3) - FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_S2, SLJIT_R2))); - -#ifdef _WIN32 - if (local_size >= 256) { - if (local_size > 4096) { - imm = get_imm(4096); - SLJIT_ASSERT(imm != INVALID_IMM); - - if (local_size < 4 * 4096) { - if (local_size > 2 * 4096) { - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(TMP_REG1) | imm)); - local_size -= 4096; - } - - if (local_size > 2 * 4096) { - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(TMP_REG1) | imm)); - local_size -= 4096; - } - - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); - local_size -= 4096; - - SLJIT_ASSERT(local_size > 0); - } - else { - FAIL_IF(load_immediate(compiler, SLJIT_R3, (local_size >> 12) - 1)); - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(TMP_REG1) | imm)); - SLJIT_ASSERT(reg_map[SLJIT_R3] < 7); - FAIL_IF(push_inst16(compiler, SUBSI8 | RDN3(SLJIT_R3) | 1)); - FAIL_IF(push_inst16(compiler, BCC | (0x1 << 8) /* not-equal */ | (-7 & 0xff))); - - local_size &= 0xfff; - - if (local_size != 0) - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG2) | RN4(TMP_REG1))); - } - - if (local_size >= 256) { - imm = get_imm(local_size & ~0xff); - SLJIT_ASSERT(imm != INVALID_IMM); - - FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(TMP_REG1) | imm)); - } + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((size & SSIZE_OF(sw)) != 0) { + FAIL_IF(push_inst16(compiler, SUB_SP_I | (sizeof(sljit_sw) >> 2))); + size += SSIZE_OF(sw); } - local_size &= 0xff; - FAIL_IF(push_inst32(compiler, LDRI | 0x400 | (local_size > 0 ? 0x100 : 0) | RT4(TMP_REG2) | RN4(TMP_REG1) | local_size)); - - FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_SP, TMP_REG1))); + if (fsaveds + fscratches >= SLJIT_NUMBER_OF_FLOAT_REGISTERS) { + FAIL_IF(push_inst32(compiler, VPUSH | DD4(SLJIT_FS0) | ((sljit_uw)SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS << 1))); + } else { + if (fsaveds > 0) + FAIL_IF(push_inst32(compiler, VPUSH | DD4(SLJIT_FS0) | ((sljit_uw)fsaveds << 1))); + if (fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) + FAIL_IF(push_inst32(compiler, VPUSH | DD4(fscratches) | ((sljit_uw)(fscratches - (SLJIT_FIRST_SAVED_FLOAT_REG - 1)) << 1))); + } } - else if (local_size > 0) - FAIL_IF(push_inst32(compiler, LDRI | 0x500 | RT4(TMP_REG1) | RN4(SLJIT_SP) | local_size)); + + local_size = ((size + local_size + 0x7) & ~0x7) - size; + compiler->local_size = local_size; + + arg_types >>= SLJIT_ARG_SHIFT; + word_arg_count = 0; + saved_arg_count = 0; +#ifdef __SOFTFP__ + SLJIT_COMPILE_ASSERT(SLJIT_FR0 == 1, float_register_index_start); + + offset = 0; + float_arg_count = 0; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) + offset += sizeof(sljit_sw); + + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst32(compiler, VMOV2 | (offset << 10) | ((offset + sizeof(sljit_sw)) << 14) | float_arg_count)); + else + FAIL_IF(push_inst32(compiler, VLDR_F32 | 0x800100 | RN4(SLJIT_SP) + | (float_arg_count << 12) | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + float_arg_count++; + offset += sizeof(sljit_f64) - sizeof(sljit_sw); + break; + case SLJIT_ARG_TYPE_F32: + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst32(compiler, VMOV | (float_arg_count << 16) | (offset << 10))); + else + FAIL_IF(push_inst32(compiler, VLDR_F32 | 0x800000 | RN4(SLJIT_SP) + | (float_arg_count << 12) | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + float_arg_count++; + break; + default: + word_arg_count++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (word_arg_count - 1 != (sljit_s32)(offset >> 2)) + tmp = word_arg_count; + else + break; + + SLJIT_ASSERT(reg_map[tmp] <= 7); + + if (offset < 4 * sizeof(sljit_sw)) + FAIL_IF(push_inst16(compiler, MOV | RD3(tmp) | (offset << 1))); + else + FAIL_IF(push_inst16(compiler, LDR_SP | RDN3(tmp) + | ((offset + (sljit_uw)size - 4 * sizeof(sljit_sw)) >> 2))); + break; + } + + offset += sizeof(sljit_sw); + arg_types >>= SLJIT_ARG_SHIFT; + } + + compiler->args_size = offset; +#else + offset = SLJIT_FR0; + old_offset = SLJIT_FR0; + f32_offset = 0; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset != old_offset) + *remap_ptr++ = VMOV_F32 | SLJIT_32 | DD4(offset) | DM4(old_offset); + old_offset++; + offset++; + break; + case SLJIT_ARG_TYPE_F32: + if (f32_offset != 0) { + *remap_ptr++ = VMOV_F32 | 0x20 | DD4(offset) | DM4(f32_offset); + f32_offset = 0; + } else { + if (offset != old_offset) + *remap_ptr++ = VMOV_F32 | DD4(offset) | DM4(old_offset); + f32_offset = old_offset; + old_offset++; + } + offset++; + break; + default: + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_S0 - saved_arg_count, SLJIT_R0 + word_arg_count))); + saved_arg_count++; + } + + word_arg_count++; + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } + + SLJIT_ASSERT((sljit_uw)(remap_ptr - remap) <= sizeof(remap)); + + while (remap_ptr > remap) + FAIL_IF(push_inst32(compiler, *(--remap_ptr))); #endif +#ifdef _WIN32 + if (local_size >= 4096) { + imm = get_imm(4096); + SLJIT_ASSERT(imm != INVALID_IMM); + + FAIL_IF(push_inst32(compiler, SUB_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm)); + + if (local_size < 4 * 4096) { + if (local_size > 2 * 4096) { + if (local_size > 3 * 4096) { + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + FAIL_IF(push_inst32(compiler, SUB_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm)); + } + + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + FAIL_IF(push_inst32(compiler, SUB_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm)); + } + } else { + FAIL_IF(load_immediate(compiler, TMP_REG2, ((sljit_uw)local_size >> 12) - 1)); + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + FAIL_IF(push_inst32(compiler, SUB_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm)); + FAIL_IF(push_inst32(compiler, SUB_WI | SET_FLAGS | RD4(TMP_REG2) | RN4(TMP_REG2) | 1)); + FAIL_IF(push_inst16(compiler, BCC | (0x1 << 8) /* not-equal */ | (-8 & 0xff))); + } + + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + local_size &= 0xfff; + } + + if (local_size >= 256) { + SLJIT_ASSERT(local_size < 4096); + + if (local_size <= (127 << 2)) + FAIL_IF(push_inst16(compiler, SUB_SP_I | ((sljit_uw)local_size >> 2))); + else + FAIL_IF(emit_op_imm(compiler, SLJIT_SUB | ARG2_IMM, SLJIT_SP, SLJIT_SP, (sljit_uw)local_size)); + + FAIL_IF(push_inst32(compiler, LDRI | 0x400 | RT4(TMP_REG1) | RN4(SLJIT_SP))); + } else if (local_size > 0) + FAIL_IF(push_inst32(compiler, LDRI | 0x500 | RT4(TMP_REG1) | RN4(SLJIT_SP) | (sljit_uw)local_size)); +#else /* !_WIN32 */ + if (local_size > 0) { + if (local_size <= (127 << 2)) + FAIL_IF(push_inst16(compiler, SUB_SP_I | ((sljit_uw)local_size >> 2))); + else + FAIL_IF(emit_op_imm(compiler, SLJIT_SUB | ARG2_IMM, SLJIT_SP, SLJIT_SP, (sljit_uw)local_size)); + } +#endif /* _WIN32 */ + return SLJIT_SUCCESS; } @@ -1188,37 +1294,143 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - compiler->local_size = ((size + local_size + 7) & ~7) - size; + + if ((size & SSIZE_OF(sw)) != 0 && (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG)) + size += SSIZE_OF(sw); + + compiler->local_size = ((size + local_size + 0x7) & ~0x7) - size; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_add_sp(struct sljit_compiler *compiler, sljit_uw imm) { - sljit_s32 i, tmp; - sljit_ins pop = 0; + sljit_uw imm2; - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); + /* The TMP_REG1 register must keep its value. */ + if (imm <= (127u << 2)) + return push_inst16(compiler, ADD_SP_I | (imm >> 2)); - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + if (imm <= 0xfff) + return push_inst32(compiler, ADDWI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | IMM12(imm)); - if (compiler->local_size > 0) { - if (compiler->local_size <= (127 << 2)) - FAIL_IF(push_inst16(compiler, ADD_SP | (compiler->local_size >> 2))); - else - FAIL_IF(emit_op_imm(compiler, SLJIT_ADD | ARG2_IMM, SLJIT_SP, SLJIT_SP, compiler->local_size)); + imm2 = get_imm(imm); + + if (imm2 != INVALID_IMM) + return push_inst32(compiler, ADD_WI | RD4(SLJIT_SP) | RN4(SLJIT_SP) | imm2); + + FAIL_IF(load_immediate(compiler, TMP_REG2, imm)); + return push_inst16(compiler, ADD_SP | RN3(TMP_REG2)); +} + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 frame_size) +{ + sljit_s32 local_size, fscratches, fsaveds, i, tmp; + sljit_s32 lr_dst = TMP_PC; + sljit_uw reg_list; + + SLJIT_ASSERT(reg_map[TMP_REG2] == 14 && frame_size <= 128); + + local_size = compiler->local_size; + fscratches = compiler->fscratches; + fsaveds = compiler->fsaveds; + + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if (local_size > 0) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)local_size)); + + if (fsaveds + fscratches >= SLJIT_NUMBER_OF_FLOAT_REGISTERS) { + FAIL_IF(push_inst32(compiler, VPOP | DD4(SLJIT_FS0) | ((sljit_uw)SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS << 1))); + } else { + if (fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) + FAIL_IF(push_inst32(compiler, VPOP | DD4(fscratches) | ((sljit_uw)(fscratches - (SLJIT_FIRST_SAVED_FLOAT_REG - 1)) << 1))); + if (fsaveds > 0) + FAIL_IF(push_inst32(compiler, VPOP | DD4(SLJIT_FS0) | ((sljit_uw)fsaveds << 1))); + } + + local_size = GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1) & 0x7; } - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) - pop |= 1 << reg_map[i]; + if (frame_size < 0) { + lr_dst = TMP_REG2; + frame_size = 0; + } else if (frame_size > 0) + lr_dst = 0; + + reg_list = 0; + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0; i > tmp; i--) + reg_list |= (sljit_uw)1 << reg_map[i]; for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) - pop |= 1 << reg_map[i]; + reg_list |= (sljit_uw)1 << reg_map[i]; - return (pop & 0xff00) - ? push_inst32(compiler, POP_W | (1 << 15) | pop) - : push_inst16(compiler, POP | (1 << 8) | pop); + if (lr_dst == 0 && (reg_list & (reg_list - 1)) == 0) { + /* The local_size does not include the saved registers. */ + local_size += SSIZE_OF(sw); + + if (reg_list != 0) + local_size += SSIZE_OF(sw); + + if (frame_size > local_size) + FAIL_IF(push_inst16(compiler, SUB_SP_I | ((sljit_uw)(frame_size - local_size) >> 2))); + else if (frame_size < local_size) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)(local_size - frame_size))); + + if (reg_list == 0) + return SLJIT_SUCCESS; + + if (compiler->saveds > 0) { + SLJIT_ASSERT(reg_list == ((sljit_uw)1 << reg_map[SLJIT_S0])); + lr_dst = SLJIT_S0; + } else { + SLJIT_ASSERT(reg_list == ((sljit_uw)1 << reg_map[SLJIT_FIRST_SAVED_REG])); + lr_dst = SLJIT_FIRST_SAVED_REG; + } + + frame_size -= 2 * SSIZE_OF(sw); + + if (reg_map[lr_dst] <= 7) + return push_inst16(compiler, STR_SP | 0x800 | RDN3(lr_dst) | (sljit_uw)(frame_size >> 2)); + + return push_inst32(compiler, LDR | RT4(lr_dst) | RN4(SLJIT_SP) | (sljit_uw)frame_size); + } + + if (local_size > 0) + FAIL_IF(emit_add_sp(compiler, (sljit_uw)local_size)); + + if (!(reg_list & 0xff00) && lr_dst != TMP_REG2) { + if (lr_dst == TMP_PC) + reg_list |= 1u << 8; + + /* At least one register must be set for POP instruction. */ + SLJIT_ASSERT(reg_list != 0); + + FAIL_IF(push_inst16(compiler, POP | reg_list)); + } else { + if (lr_dst != 0) { + if (reg_list == 0) + return push_inst32(compiler, 0xf85d0b04 | RT4(lr_dst)); + + reg_list |= (sljit_uw)1 << reg_map[lr_dst]; + } + + /* At least two registers must be set for POP_W instruction. */ + SLJIT_ASSERT((reg_list & (reg_list - 1)) != 0); + + FAIL_IF(push_inst32(compiler, POP_W | reg_list)); + } + + if (frame_size > 0) + return push_inst16(compiler, SUB_SP_I | (((sljit_uw)frame_size - sizeof(sljit_sw)) >> 2)); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + return emit_stack_frame_release(compiler, 0); } /* --------------------------------------------------------------------- */ @@ -1250,8 +1462,8 @@ extern int __aeabi_idivmod(int numerator, int denominator); SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { #if !(defined __ARM_FEATURE_IDIV) && !(defined __ARM_ARCH_EXT_IDIV__) - sljit_sw saved_reg_list[3]; - sljit_sw saved_reg_count; + sljit_uw saved_reg_list[3]; + sljit_uw saved_reg_count; #endif CHECK_ERROR(); @@ -1266,10 +1478,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile case SLJIT_LMUL_UW: case SLJIT_LMUL_SW: return push_inst32(compiler, (op == SLJIT_LMUL_UW ? UMULL : SMULL) - | (reg_map[SLJIT_R1] << 8) - | (reg_map[SLJIT_R0] << 12) - | (reg_map[SLJIT_R0] << 16) - | reg_map[SLJIT_R1]); + | RD4(SLJIT_R1) | RT4(SLJIT_R0) | RN4(SLJIT_R0) | RM4(SLJIT_R1)); #if (defined __ARM_FEATURE_IDIV) || (defined __ARM_ARCH_EXT_IDIV__) case SLJIT_DIVMOD_UW: case SLJIT_DIVMOD_SW: @@ -1314,10 +1523,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_R0, SLJIT_R1))); FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(SLJIT_R1, TMP_REG1))); FAIL_IF(sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM, - ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_OFFSET(__rt_udiv) : SLJIT_FUNC_OFFSET(__rt_sdiv)))); + ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_ADDR(__rt_udiv) : SLJIT_FUNC_ADDR(__rt_sdiv)))); #elif defined(__GNUC__) FAIL_IF(sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM, - ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_OFFSET(__aeabi_uidivmod) : SLJIT_FUNC_OFFSET(__aeabi_idivmod)))); + ((op | 0x2) == SLJIT_DIV_UW ? SLJIT_FUNC_ADDR(__aeabi_uidivmod) : SLJIT_FUNC_ADDR(__aeabi_idivmod)))); #else #error "Software divmod functions are needed" #endif @@ -1356,7 +1565,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; op = GET_OPCODE(op); if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) { @@ -1364,6 +1573,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: flags = WORD_SIZE; break; @@ -1394,12 +1604,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile } if (src & SLJIT_IMM) - FAIL_IF(emit_op_imm(compiler, SLJIT_MOV | ARG2_IMM, dst_r, TMP_REG2, srcw)); + FAIL_IF(emit_op_imm(compiler, SLJIT_MOV | ARG2_IMM, dst_r, TMP_REG2, (sljit_uw)srcw)); else if (src & SLJIT_MEM) { FAIL_IF(emit_op_mem(compiler, flags, dst_r, src, srcw, TMP_REG1)); } else { if (dst_r != TMP_REG1) - return emit_op_imm(compiler, op, dst_r, TMP_REG2, src); + return emit_op_imm(compiler, op, dst_r, TMP_REG2, (sljit_uw)src); dst_r = src; } @@ -1409,14 +1619,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return emit_op_mem(compiler, flags | STORE, dst_r, dst, dstw, TMP_REG2); } - if (op == SLJIT_NEG) { -#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ - || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) - compiler->skip_checks = 1; -#endif - return sljit_emit_op2(compiler, SLJIT_SUB | op_flags, dst, dstw, SLJIT_IMM, 0, src, srcw); - } - flags = HAS_FLAGS(op_flags) ? SET_FLAGS : 0; if (src & SLJIT_MEM) { @@ -1424,7 +1626,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile src = TMP_REG1; } - emit_op_imm(compiler, flags | op, dst_r, TMP_REG2, src); + emit_op_imm(compiler, flags | op, dst_r, TMP_REG2, (sljit_uw)src); if (SLJIT_UNLIKELY(dst & SLJIT_MEM)) return emit_op_mem(compiler, flags | STORE, dst_r, dst, dstw, TMP_REG2); @@ -1439,17 +1641,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 dst_reg, flags, src2_reg; CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - - dst_reg = SLOW_IS_REG(dst) ? dst : TMP_REG1; + dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG1; flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + if (dst == TMP_REG1) + flags |= UNUSED_RETURN; + if (src1 & SLJIT_IMM) flags |= ARG1_IMM; else if (src1 & SLJIT_MEM) { @@ -1469,16 +1671,27 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile else src2w = src2; - if (dst == SLJIT_UNUSED) - flags |= UNUSED_RETURN; - - emit_op_imm(compiler, flags | GET_OPCODE(op), dst_reg, src1w, src2w); + emit_op_imm(compiler, flags | GET_OPCODE(op), dst_reg, (sljit_uw)src1w, (sljit_uw)src2w); if (!(dst & SLJIT_MEM)) return SLJIT_SUCCESS; return emit_op_mem(compiler, WORD_SIZE | STORE, dst_reg, dst, dstw, TMP_REG2); } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -1521,7 +1734,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1540,22 +1753,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) { sljit_uw imm; - sljit_sw inst = VSTR_F32 | (flags & (SLJIT_F32_OP | FPU_LOAD)); + sljit_ins inst = VSTR_F32 | (flags & (SLJIT_32 | FPU_LOAD)); SLJIT_ASSERT(arg & SLJIT_MEM); /* Fast loads and stores. */ if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { - FAIL_IF(push_inst32(compiler, ADD_W | RD4(TMP_REG1) | RN4(arg & REG_MASK) | RM4(OFFS_REG(arg)) | ((argw & 0x3) << 6))); + FAIL_IF(push_inst32(compiler, ADD_W | RD4(TMP_REG1) | RN4(arg & REG_MASK) | RM4(OFFS_REG(arg)) | (((sljit_uw)argw & 0x3) << 6))); arg = SLJIT_MEM | TMP_REG1; argw = 0; } if ((arg & REG_MASK) && (argw & 0x3) == 0) { if (!(argw & ~0x3fc)) - return push_inst32(compiler, inst | 0x800000 | RN4(arg & REG_MASK) | DD4(reg) | (argw >> 2)); + return push_inst32(compiler, inst | 0x800000 | RN4(arg & REG_MASK) | DD4(reg) | ((sljit_uw)argw >> 2)); if (!(-argw & ~0x3fc)) - return push_inst32(compiler, inst | RN4(arg & REG_MASK) | DD4(reg) | (-argw >> 2)); + return push_inst32(compiler, inst | RN4(arg & REG_MASK) | DD4(reg) | ((sljit_uw)-argw >> 2)); } if (arg & REG_MASK) { @@ -1563,20 +1776,22 @@ static sljit_s32 emit_fop_mem(struct sljit_compiler *compiler, sljit_s32 flags, FAIL_IF(compiler->error); return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg)); } - imm = get_imm(argw & ~0x3fc); + + imm = get_imm((sljit_uw)argw & ~(sljit_uw)0x3fc); if (imm != INVALID_IMM) { FAIL_IF(push_inst32(compiler, ADD_WI | RD4(TMP_REG1) | RN4(arg & REG_MASK) | imm)); - return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg) | ((argw & 0x3fc) >> 2)); + return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg) | (((sljit_uw)argw & 0x3fc) >> 2)); } - imm = get_imm(-argw & ~0x3fc); + + imm = get_imm((sljit_uw)-argw & ~(sljit_uw)0x3fc); if (imm != INVALID_IMM) { argw = -argw; FAIL_IF(push_inst32(compiler, SUB_WI | RD4(TMP_REG1) | RN4(arg & REG_MASK) | imm)); - return push_inst32(compiler, inst | RN4(TMP_REG1) | DD4(reg) | ((argw & 0x3fc) >> 2)); + return push_inst32(compiler, inst | RN4(TMP_REG1) | DD4(reg) | (((sljit_uw)argw & 0x3fc) >> 2)); } } - FAIL_IF(load_immediate(compiler, TMP_REG1, argw)); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)argw)); if (arg & REG_MASK) FAIL_IF(push_inst16(compiler, ADD | SET_REGS44(TMP_REG1, (arg & REG_MASK)))); return push_inst32(compiler, inst | 0x800000 | RN4(TMP_REG1) | DD4(reg)); @@ -1586,14 +1801,14 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src & SLJIT_MEM) { - FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src, srcw)); + FAIL_IF(emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src, srcw)); src = TMP_FREG1; } - FAIL_IF(push_inst32(compiler, VCVT_S32_F32 | (op & SLJIT_F32_OP) | DD4(TMP_FREG1) | DM4(src))); + FAIL_IF(push_inst32(compiler, VCVT_S32_F32 | (op & SLJIT_32) | DD4(TMP_FREG1) | DM4(src))); if (FAST_IS_REG(dst)) return push_inst32(compiler, VMOV | (1 << 20) | RT4(dst) | DN4(TMP_FREG1)); @@ -1608,7 +1823,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp { sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (FAST_IS_REG(src)) FAIL_IF(push_inst32(compiler, VMOV | RT4(src) | DN4(TMP_FREG1))); @@ -1617,14 +1832,14 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp FAIL_IF(emit_fop_mem(compiler, FPU_LOAD, TMP_FREG1, src, srcw)); } else { - FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_uw)srcw)); FAIL_IF(push_inst32(compiler, VMOV | RT4(TMP_REG1) | DN4(TMP_FREG1))); } - FAIL_IF(push_inst32(compiler, VCVT_F32_S32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(TMP_FREG1))); + FAIL_IF(push_inst32(compiler, VCVT_F32_S32 | (op & SLJIT_32) | DD4(dst_r) | DM4(TMP_FREG1))); if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), TMP_FREG1, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), TMP_FREG1, dst, dstw); return SLJIT_SUCCESS; } @@ -1632,19 +1847,19 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src1 & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src1, src1w); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w); src1 = TMP_FREG1; } if (src2 & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG2, src2, src2w); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG2, src2, src2w); src2 = TMP_FREG2; } - FAIL_IF(push_inst32(compiler, VCMP_F32 | (op & SLJIT_F32_OP) | DD4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VCMP_F32 | (op & SLJIT_32) | DD4(src1) | DM4(src2))); return push_inst32(compiler, VMRS); } @@ -1656,16 +1871,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil CHECK_ERROR(); - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (GET_OPCODE(op) != SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; if (src & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, dst_r, src, srcw); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, dst_r, src, srcw); src = dst_r; } @@ -1673,25 +1888,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil case SLJIT_MOV_F64: if (src != dst_r) { if (dst_r != TMP_FREG1) - FAIL_IF(push_inst32(compiler, VMOV_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(src))); + FAIL_IF(push_inst32(compiler, VMOV_F32 | (op & SLJIT_32) | DD4(dst_r) | DM4(src))); else dst_r = src; } break; case SLJIT_NEG_F64: - FAIL_IF(push_inst32(compiler, VNEG_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(src))); + FAIL_IF(push_inst32(compiler, VNEG_F32 | (op & SLJIT_32) | DD4(dst_r) | DM4(src))); break; case SLJIT_ABS_F64: - FAIL_IF(push_inst32(compiler, VABS_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(src))); + FAIL_IF(push_inst32(compiler, VABS_F32 | (op & SLJIT_32) | DD4(dst_r) | DM4(src))); break; case SLJIT_CONV_F64_FROM_F32: - FAIL_IF(push_inst32(compiler, VCVT_F64_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DM4(src))); - op ^= SLJIT_F32_OP; + FAIL_IF(push_inst32(compiler, VCVT_F64_F32 | (op & SLJIT_32) | DD4(dst_r) | DM4(src))); + op ^= SLJIT_32; break; } if (dst & SLJIT_MEM) - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), dst_r, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), dst_r, dst, dstw); return SLJIT_SUCCESS; } @@ -1708,36 +1923,36 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; if (src1 & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG1, src1, src1w); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG1, src1, src1w); src1 = TMP_FREG1; } if (src2 & SLJIT_MEM) { - emit_fop_mem(compiler, (op & SLJIT_F32_OP) | FPU_LOAD, TMP_FREG2, src2, src2w); + emit_fop_mem(compiler, (op & SLJIT_32) | FPU_LOAD, TMP_FREG2, src2, src2w); src2 = TMP_FREG2; } switch (GET_OPCODE(op)) { case SLJIT_ADD_F64: - FAIL_IF(push_inst32(compiler, VADD_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DN4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VADD_F32 | (op & SLJIT_32) | DD4(dst_r) | DN4(src1) | DM4(src2))); break; case SLJIT_SUB_F64: - FAIL_IF(push_inst32(compiler, VSUB_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DN4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VSUB_F32 | (op & SLJIT_32) | DD4(dst_r) | DN4(src1) | DM4(src2))); break; case SLJIT_MUL_F64: - FAIL_IF(push_inst32(compiler, VMUL_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DN4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VMUL_F32 | (op & SLJIT_32) | DD4(dst_r) | DN4(src1) | DM4(src2))); break; case SLJIT_DIV_F64: - FAIL_IF(push_inst32(compiler, VDIV_F32 | (op & SLJIT_F32_OP) | DD4(dst_r) | DN4(src1) | DM4(src2))); + FAIL_IF(push_inst32(compiler, VDIV_F32 | (op & SLJIT_32) | DD4(dst_r) | DN4(src1) | DM4(src2))); break; } if (!(dst & SLJIT_MEM)) return SLJIT_SUCCESS; - return emit_fop_mem(compiler, (op & SLJIT_F32_OP), TMP_FREG1, dst, dstw); + return emit_fop_mem(compiler, (op & SLJIT_32), TMP_FREG1, dst, dstw); } #undef FPU_LOAD @@ -1776,10 +1991,20 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) case SLJIT_NOT_EQUAL_F64: return 0x1; + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x2; + /* fallthrough */ + case SLJIT_LESS: case SLJIT_LESS_F64: return 0x3; + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) + return 0x3; + /* fallthrough */ + case SLJIT_GREATER_EQUAL: case SLJIT_GREATER_EQUAL_F64: return 0x2; @@ -1805,15 +2030,17 @@ static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type) return 0xd; case SLJIT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x1; + /* fallthrough */ case SLJIT_UNORDERED_F64: return 0x6; case SLJIT_NOT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return 0x0; + /* fallthrough */ case SLJIT_ORDERED_F64: return 0x7; @@ -1874,113 +2101,126 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile #ifdef __SOFTFP__ -static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src) +static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src, sljit_u32 *extra_space) { - sljit_s32 stack_offset = 0; - sljit_s32 arg_count = 0; - sljit_s32 word_arg_offset = 0; - sljit_s32 float_arg_count = 0; + sljit_u32 is_tail_call = *extra_space & SLJIT_CALL_RETURN; + sljit_u32 offset = 0; + sljit_u32 word_arg_offset = 0; + sljit_u32 float_arg_count = 0; sljit_s32 types = 0; - sljit_s32 src_offset = 4 * sizeof(sljit_sw); + sljit_u32 src_offset = 4 * sizeof(sljit_sw); sljit_u8 offsets[4]; + sljit_u8 *offset_ptr = offsets; if (src && FAST_IS_REG(*src)) - src_offset = reg_map[*src] * sizeof(sljit_sw); + src_offset = (sljit_u32)reg_map[*src] * sizeof(sljit_sw); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_f32); - arg_count++; + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) + offset += sizeof(sljit_sw); + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_f64); float_arg_count++; break; - case SLJIT_ARG_TYPE_F64: - if (stack_offset & 0x7) - stack_offset += sizeof(sljit_sw); - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_f64); - arg_count++; + case SLJIT_ARG_TYPE_F32: + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_f32); float_arg_count++; break; default: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_sw); - arg_count++; + *offset_ptr++ = (sljit_u8)offset; + offset += sizeof(sljit_sw); word_arg_offset += sizeof(sljit_sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } - if (stack_offset > 16) - FAIL_IF(push_inst16(compiler, SUB_SP | (((stack_offset - 16) + 0x7) & ~0x7) >> 2)); + if (offset > 4 * sizeof(sljit_sw) && (!is_tail_call || offset > compiler->args_size)) { + /* Keep lr register on the stack. */ + if (is_tail_call) + offset += sizeof(sljit_sw); + + offset = ((offset - 4 * sizeof(sljit_sw)) + 0x7) & ~(sljit_uw)0x7; + + *extra_space = offset; + + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, (sljit_s32)offset)); + else + FAIL_IF(push_inst16(compiler, SUB_SP_I | (offset >> 2))); + } else { + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, -1)); + *extra_space = 0; + } SLJIT_ASSERT(reg_map[TMP_REG1] == 12); /* Process arguments in reversed direction. */ while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - arg_count--; - float_arg_count--; - stack_offset = offsets[arg_count]; - - if (stack_offset < 16) { - if (src_offset == stack_offset) { - FAIL_IF(push_inst16(compiler, MOV | (src_offset << 1) | 4 | (1 << 7))); - *src = TMP_REG1; - } - FAIL_IF(push_inst32(compiler, VMOV | 0x100000 | (float_arg_count << 16) | (stack_offset << 10))); - } else - FAIL_IF(push_inst32(compiler, VSTR_F32 | 0x800000 | RN4(SLJIT_SP) | (float_arg_count << 12) | ((stack_offset - 16) >> 2))); - break; + switch (types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: - arg_count--; float_arg_count--; - stack_offset = offsets[arg_count]; + offset = *(--offset_ptr); - SLJIT_ASSERT((stack_offset & 0x7) == 0); + SLJIT_ASSERT((offset & 0x7) == 0); - if (stack_offset < 16) { - if (src_offset == stack_offset || src_offset == stack_offset + sizeof(sljit_sw)) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset || src_offset == offset + sizeof(sljit_sw)) { FAIL_IF(push_inst16(compiler, MOV | (src_offset << 1) | 4 | (1 << 7))); *src = TMP_REG1; } - FAIL_IF(push_inst32(compiler, VMOV2 | 0x100000 | (stack_offset << 10) | ((stack_offset + sizeof(sljit_sw)) << 14) | float_arg_count)); + FAIL_IF(push_inst32(compiler, VMOV2 | 0x100000 | (offset << 10) | ((offset + sizeof(sljit_sw)) << 14) | float_arg_count)); } else - FAIL_IF(push_inst32(compiler, VSTR_F32 | 0x800100 | RN4(SLJIT_SP) | (float_arg_count << 12) | ((stack_offset - 16) >> 2))); + FAIL_IF(push_inst32(compiler, VSTR_F32 | 0x800100 | RN4(SLJIT_SP) + | (float_arg_count << 12) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count--; + offset = *(--offset_ptr); + + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset) { + FAIL_IF(push_inst16(compiler, MOV | (src_offset << 1) | 4 | (1 << 7))); + *src = TMP_REG1; + } + FAIL_IF(push_inst32(compiler, VMOV | 0x100000 | (float_arg_count << 16) | (offset << 10))); + } else + FAIL_IF(push_inst32(compiler, VSTR_F32 | 0x800000 | RN4(SLJIT_SP) + | (float_arg_count << 12) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); break; default: - arg_count--; word_arg_offset -= sizeof(sljit_sw); - stack_offset = offsets[arg_count]; + offset = *(--offset_ptr); - SLJIT_ASSERT(stack_offset >= word_arg_offset); + SLJIT_ASSERT(offset >= word_arg_offset); - if (stack_offset != word_arg_offset) { - if (stack_offset < 16) { - if (src_offset == stack_offset) { + if (offset != word_arg_offset) { + if (offset < 4 * sizeof(sljit_sw)) { + if (src_offset == offset) { FAIL_IF(push_inst16(compiler, MOV | (src_offset << 1) | 4 | (1 << 7))); *src = TMP_REG1; } else if (src_offset == word_arg_offset) { - *src = 1 + (stack_offset >> 2); - src_offset = stack_offset; + *src = (sljit_s32)(1 + (offset >> 2)); + src_offset = offset; } - FAIL_IF(push_inst16(compiler, MOV | (stack_offset >> 2) | (word_arg_offset << 1))); + FAIL_IF(push_inst16(compiler, MOV | (offset >> 2) | (word_arg_offset << 1))); } else - FAIL_IF(push_inst16(compiler, STR_SP | (word_arg_offset << 6) | ((stack_offset - 16) >> 2))); + FAIL_IF(push_inst16(compiler, STR_SP | (word_arg_offset << 6) | ((offset - 4 * sizeof(sljit_sw)) >> 2))); } break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -1988,83 +2228,48 @@ static sljit_s32 softfloat_call_with_args(struct sljit_compiler *compiler, sljit static sljit_s32 softfloat_post_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) { - sljit_s32 stack_size = 0; - - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32) - FAIL_IF(push_inst32(compiler, VMOV | (0 << 16) | (0 << 12))); - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F64) + if ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F64) FAIL_IF(push_inst32(compiler, VMOV2 | (1 << 16) | (0 << 12) | 0)); + if ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F32) + FAIL_IF(push_inst32(compiler, VMOV | (0 << 16) | (0 << 12))); - arg_types >>= SLJIT_DEF_SHIFT; - - while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - stack_size += sizeof(sljit_f32); - break; - case SLJIT_ARG_TYPE_F64: - if (stack_size & 0x7) - stack_size += sizeof(sljit_sw); - stack_size += sizeof(sljit_f64); - break; - default: - stack_size += sizeof(sljit_sw); - break; - } - - arg_types >>= SLJIT_DEF_SHIFT; - } - - if (stack_size <= 16) - return SLJIT_SUCCESS; - - return push_inst16(compiler, ADD_SP | ((((stack_size - 16) + 0x7) & ~0x7) >> 2)); + return SLJIT_SUCCESS; } #else static sljit_s32 hardfloat_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) { - sljit_u32 remap = 0; - sljit_u32 offset = 0; - sljit_u32 new_offset, mask; + sljit_u32 offset = SLJIT_FR0; + sljit_u32 new_offset = SLJIT_FR0; + sljit_u32 f32_offset = 0; /* Remove return value. */ - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32) { - new_offset = 0; - mask = 1; + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset != new_offset) + FAIL_IF(push_inst32(compiler, VMOV_F32 | SLJIT_32 | DD4(new_offset) | DM4(offset))); - while (remap & mask) { + new_offset++; + offset++; + break; + case SLJIT_ARG_TYPE_F32: + if (f32_offset != 0) { + FAIL_IF(push_inst32(compiler, VMOV_F32 | 0x400000 | DD4(f32_offset) | DM4(offset))); + f32_offset = 0; + } else { + if (offset != new_offset) + FAIL_IF(push_inst32(compiler, VMOV_F32 | 0x400000 | DD4(new_offset) | DM4(offset))); + f32_offset = new_offset; new_offset++; - mask <<= 1; } - remap |= mask; - - if (offset != new_offset) - FAIL_IF(push_inst32(compiler, VMOV_F32 | DD4((new_offset >> 1) + 1) - | ((new_offset & 0x1) ? 0x400000 : 0) | DM4((offset >> 1) + 1))); - - offset += 2; + offset++; + break; } - else if ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F64) { - new_offset = 0; - mask = 3; - - while (remap & mask) { - new_offset += 2; - mask <<= 2; - } - remap |= mask; - - if (offset != new_offset) - FAIL_IF(push_inst32(compiler, VMOV_F32 | SLJIT_F32_OP | DD4((new_offset >> 1) + 1) | DM4((offset >> 1) + 1))); - - offset += 2; - } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -2077,13 +2282,18 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile { #ifdef __SOFTFP__ struct sljit_jump *jump; + sljit_u32 extra_space = (sljit_u32)type; #endif CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); #ifdef __SOFTFP__ - PTR_FAIL_IF(softfloat_call_with_args(compiler, arg_types, NULL)); + PTR_FAIL_IF(softfloat_call_with_args(compiler, arg_types, NULL, &extra_space)); + SLJIT_ASSERT((extra_space & 0x7) == 0); + + if ((type & SLJIT_CALL_RETURN) && extra_space == 0) + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2093,9 +2303,29 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile jump = sljit_emit_jump(compiler, type); PTR_FAIL_IF(jump == NULL); + if (extra_space > 0) { + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(push_inst32(compiler, LDR | RT4(TMP_REG2) + | RN4(SLJIT_SP) | (extra_space - sizeof(sljit_sw)))); + + PTR_FAIL_IF(push_inst16(compiler, ADD_SP_I | (extra_space >> 2))); + + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(push_inst16(compiler, BX | RN3(TMP_REG2))); + return jump; + } + } + + SLJIT_ASSERT(!(type & SLJIT_CALL_RETURN)); PTR_FAIL_IF(softfloat_post_call_with_args(compiler, arg_types)); return jump; #else + if (type & SLJIT_CALL_RETURN) { + /* ldmia sp!, {..., lr} */ + PTR_FAIL_IF(emit_stack_frame_release(compiler, -1)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + PTR_FAIL_IF(hardfloat_call_with_args(compiler, arg_types)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -2132,7 +2362,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_BL : 0)); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; FAIL_IF(emit_imm32_const(compiler, TMP_REG1, 0)); jump->addr = compiler->size; @@ -2143,16 +2373,29 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { +#ifdef __SOFTFP__ + sljit_u32 extra_space = (sljit_u32)type; +#endif + CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); -#ifdef __SOFTFP__ if (src & SLJIT_MEM) { FAIL_IF(emit_op_mem(compiler, WORD_SIZE, TMP_REG1, src, srcw, TMP_REG1)); src = TMP_REG1; } - FAIL_IF(softfloat_call_with_args(compiler, arg_types, &src)); + if ((type & SLJIT_CALL_RETURN) && (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0)) { + FAIL_IF(push_inst16(compiler, MOV | SET_REGS44(TMP_REG1, src))); + src = TMP_REG1; + } + +#ifdef __SOFTFP__ + FAIL_IF(softfloat_call_with_args(compiler, arg_types, &src, &extra_space)); + SLJIT_ASSERT((extra_space & 0x7) == 0); + + if ((type & SLJIT_CALL_RETURN) && extra_space == 0) + type = SLJIT_JUMP; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -2161,8 +2404,26 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); + if (extra_space > 0) { + if (type & SLJIT_CALL_RETURN) + FAIL_IF(push_inst32(compiler, LDR | RT4(TMP_REG2) + | RN4(SLJIT_SP) | (extra_space - sizeof(sljit_sw)))); + + FAIL_IF(push_inst16(compiler, ADD_SP_I | (extra_space >> 2))); + + if (type & SLJIT_CALL_RETURN) + return push_inst16(compiler, BX | RN3(TMP_REG2)); + } + + SLJIT_ASSERT(!(type & SLJIT_CALL_RETURN)); return softfloat_post_call_with_args(compiler, arg_types); #else /* !__SOFTFP__ */ + if (type & SLJIT_CALL_RETURN) { + /* ldmia sp!, {..., lr} */ + FAIL_IF(emit_stack_frame_release(compiler, -1)); + type = SLJIT_JUMP; + } + FAIL_IF(hardfloat_call_with_args(compiler, arg_types)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -2236,7 +2497,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil CHECK_ERROR(); CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; cc = get_cc(compiler, type & 0xff); @@ -2254,13 +2515,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil | COPY_BITS(tmp, 12, 16, 4) | COPY_BITS(tmp, 11, 26, 1) | COPY_BITS(tmp, 8, 12, 3) | (tmp & 0xff)); } - tmp = get_imm(srcw); + tmp = get_imm((sljit_uw)srcw); if (tmp != INVALID_IMM) { FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8)); return push_inst32(compiler, MOV_WI | RD4(dst_reg) | tmp); } - tmp = get_imm(~srcw); + tmp = get_imm(~(sljit_uw)srcw); if (tmp != INVALID_IMM) { FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8)); return push_inst32(compiler, MVN_WI | RD4(dst_reg) | tmp); @@ -2295,6 +2556,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile case SLJIT_MOV: case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: case SLJIT_MOV_P: flags = WORD_SIZE; break; @@ -2329,7 +2591,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile else memw = -memw; - return push_inst32(compiler, inst | RT4(reg) | RN4(mem & REG_MASK) | memw); + return push_inst32(compiler, inst | RT4(reg) | RN4(mem & REG_MASK) | (sljit_ins)memw); } SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, sljit_sw init_value) @@ -2346,7 +2608,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi set_const(const_, compiler); dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; - PTR_FAIL_IF(emit_imm32_const(compiler, dst_r, init_value)); + PTR_FAIL_IF(emit_imm32_const(compiler, dst_r, (sljit_uw)init_value)); if (dst & SLJIT_MEM) PTR_FAIL_IF(emit_op_mem(compiler, WORD_SIZE | STORE, dst_r, dst, dstw, TMP_REG2)); @@ -2388,5 +2650,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_32.c index a90345f1..1a06b17d 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_32.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_32.c @@ -73,50 +73,49 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl switch (GET_OPCODE(op)) { case SLJIT_MOV: - case SLJIT_MOV_U32: - case SLJIT_MOV_S32: - case SLJIT_MOV_P: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if (dst != src2) return push_inst(compiler, ADDU | S(src2) | TA(0) | D(dst), DR(dst)); return SLJIT_SUCCESS; case SLJIT_MOV_U8: + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) + return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xff), DR(dst)); + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; + case SLJIT_MOV_S8: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { - if (op == SLJIT_MOV_S8) { #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) - return push_inst(compiler, SEB | T(src2) | D(dst), DR(dst)); + return push_inst(compiler, SEB | T(src2) | D(dst), DR(dst)); #else /* SLJIT_MIPS_REV < 1 */ - FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(24), DR(dst))); - return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(24), DR(dst)); + FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(24), DR(dst))); + return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(24), DR(dst)); #endif /* SLJIT_MIPS_REV >= 1 */ - } - return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xff), DR(dst)); - } - else { - SLJIT_ASSERT(dst == src2); } + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_MOV_U16: + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) + return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xffff), DR(dst)); + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; + case SLJIT_MOV_S16: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { - if (op == SLJIT_MOV_S16) { #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) - return push_inst(compiler, SEH | T(src2) | D(dst), DR(dst)); + return push_inst(compiler, SEH | T(src2) | D(dst), DR(dst)); #else /* SLJIT_MIPS_REV < 1 */ - FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(16), DR(dst))); - return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(16), DR(dst)); + FAIL_IF(push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(16), DR(dst))); + return push_inst(compiler, SRA | T(dst) | D(dst) | SH_IMM(16), DR(dst)); #endif /* SLJIT_MIPS_REV >= 1 */ - } - return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xffff), DR(dst)); - } - else { - SLJIT_ASSERT(dst == src2); } + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_NOT: @@ -438,92 +437,119 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } -static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_ins *ins_ptr) +static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_ins *ins_ptr, sljit_u32 *extra_space) { - sljit_s32 stack_offset = 0; - sljit_s32 arg_count = 0; + sljit_u32 is_tail_call = *extra_space & SLJIT_CALL_RETURN; + sljit_u32 offset = 0; sljit_s32 float_arg_count = 0; sljit_s32 word_arg_count = 0; sljit_s32 types = 0; - sljit_s32 arg_count_save, types_save; sljit_ins prev_ins = NOP; sljit_ins ins = NOP; sljit_u8 offsets[4]; + sljit_u8 *offsets_ptr = offsets; SLJIT_ASSERT(reg_map[TMP_REG1] == 4 && freg_map[TMP_FREG1] == 12); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; + + /* See ABI description in sljit_emit_enter. */ while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); + *offsets_ptr = (sljit_u8)offset; - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - offsets[arg_count] = (sljit_u8)stack_offset; + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (offset & 0x7) { + offset += sizeof(sljit_sw); + *offsets_ptr = (sljit_u8)offset; + } - if (word_arg_count == 0 && arg_count <= 1) - offsets[arg_count] = 254 + arg_count; + if (word_arg_count == 0 && float_arg_count <= 1) + *offsets_ptr = (sljit_u8)(254 + float_arg_count); - stack_offset += sizeof(sljit_f32); - arg_count++; + offset += sizeof(sljit_f64); float_arg_count++; break; - case SLJIT_ARG_TYPE_F64: - if (stack_offset & 0x7) - stack_offset += sizeof(sljit_sw); - offsets[arg_count] = (sljit_u8)stack_offset; + case SLJIT_ARG_TYPE_F32: + if (word_arg_count == 0 && float_arg_count <= 1) + *offsets_ptr = (sljit_u8)(254 + float_arg_count); - if (word_arg_count == 0 && arg_count <= 1) - offsets[arg_count] = 254 + arg_count; - - stack_offset += sizeof(sljit_f64); - arg_count++; + offset += sizeof(sljit_f32); float_arg_count++; break; default: - offsets[arg_count] = (sljit_u8)stack_offset; - stack_offset += sizeof(sljit_sw); - arg_count++; + offset += sizeof(sljit_sw); word_arg_count++; break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; + offsets_ptr++; } - /* Stack is aligned to 16 bytes, max two doubles can be placed on the stack. */ - if (stack_offset > 16) - FAIL_IF(push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(-16), DR(SLJIT_SP))); + /* Stack is aligned to 16 bytes. */ + SLJIT_ASSERT(offset <= 8 * sizeof(sljit_sw)); - types_save = types; - arg_count_save = arg_count; + if (offset > 4 * sizeof(sljit_sw) && (!is_tail_call || offset > compiler->args_size)) { + if (is_tail_call) { + offset = (offset + sizeof(sljit_sw) + 15) & ~(sljit_uw)0xf; + FAIL_IF(emit_stack_frame_release(compiler, (sljit_s32)offset, &prev_ins)); + *extra_space = offset; + } else { + FAIL_IF(push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(-16), DR(SLJIT_SP))); + *extra_space = 16; + } + } else { + if (is_tail_call) + FAIL_IF(emit_stack_frame_release(compiler, 0, &prev_ins)); + *extra_space = 0; + } while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - arg_count--; - if (offsets[arg_count] < 254) - ins = SWC1 | S(SLJIT_SP) | FT(float_arg_count) | IMM(offsets[arg_count]); + --offsets_ptr; + + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (*offsets_ptr < 4 * sizeof (sljit_sw)) { + if (prev_ins != NOP) + FAIL_IF(push_inst(compiler, prev_ins, MOVABLE_INS)); + + /* Must be preceded by at least one other argument, + * and its starting offset must be 8 because of alignment. */ + SLJIT_ASSERT((*offsets_ptr >> 2) == 2); + + prev_ins = MFC1 | TA(6) | FS(float_arg_count) | (1 << 11); + ins = MFC1 | TA(7) | FS(float_arg_count); + } else if (*offsets_ptr < 254) + ins = SDC1 | S(SLJIT_SP) | FT(float_arg_count) | IMM(*offsets_ptr); + else if (*offsets_ptr == 254) + ins = MOV_S | FMT_D | FS(SLJIT_FR0) | FD(TMP_FREG1); + float_arg_count--; break; - case SLJIT_ARG_TYPE_F64: - arg_count--; - if (offsets[arg_count] < 254) - ins = SDC1 | S(SLJIT_SP) | FT(float_arg_count) | IMM(offsets[arg_count]); + case SLJIT_ARG_TYPE_F32: + if (*offsets_ptr < 4 * sizeof (sljit_sw)) + ins = MFC1 | TA(4 + (*offsets_ptr >> 2)) | FS(float_arg_count); + else if (*offsets_ptr < 254) + ins = SWC1 | S(SLJIT_SP) | FT(float_arg_count) | IMM(*offsets_ptr); + else if (*offsets_ptr == 254) + ins = MOV_S | FMT_S | FS(SLJIT_FR0) | FD(TMP_FREG1); + float_arg_count--; break; default: - if (offsets[arg_count - 1] >= 16) - ins = SW | S(SLJIT_SP) | T(word_arg_count) | IMM(offsets[arg_count - 1]); - else if (arg_count != word_arg_count) - ins = ADDU | S(word_arg_count) | TA(0) | DA(4 + (offsets[arg_count - 1] >> 2)); - else if (arg_count == 1) + if (*offsets_ptr >= 4 * sizeof (sljit_sw)) + ins = SW | S(SLJIT_SP) | T(word_arg_count) | IMM(*offsets_ptr); + else if ((*offsets_ptr >> 2) != word_arg_count - 1) + ins = ADDU | S(word_arg_count) | TA(0) | DA(4 + (*offsets_ptr >> 2)); + else if (*offsets_ptr == 0) ins = ADDU | S(SLJIT_R0) | TA(0) | DA(4); - arg_count--; word_arg_count--; break; } @@ -535,45 +561,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t ins = NOP; } - types >>= SLJIT_DEF_SHIFT; - } - - types = types_save; - arg_count = arg_count_save; - - while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - arg_count--; - if (offsets[arg_count] == 254) - ins = MOV_S | FMT_S | FS(SLJIT_FR0) | FD(TMP_FREG1); - else if (offsets[arg_count] < 16) - ins = LW | S(SLJIT_SP) | TA(4 + (offsets[arg_count] >> 2)) | IMM(offsets[arg_count]); - break; - case SLJIT_ARG_TYPE_F64: - arg_count--; - if (offsets[arg_count] == 254) - ins = MOV_S | FMT_D | FS(SLJIT_FR0) | FD(TMP_FREG1); - else if (offsets[arg_count] < 16) { - if (prev_ins != NOP) - FAIL_IF(push_inst(compiler, prev_ins, MOVABLE_INS)); - prev_ins = LW | S(SLJIT_SP) | TA(4 + (offsets[arg_count] >> 2)) | IMM(offsets[arg_count]); - ins = LW | S(SLJIT_SP) | TA(5 + (offsets[arg_count] >> 2)) | IMM(offsets[arg_count] + sizeof(sljit_sw)); - } - break; - default: - arg_count--; - break; - } - - if (ins != NOP) { - if (prev_ins != NOP) - FAIL_IF(push_inst(compiler, prev_ins, MOVABLE_INS)); - prev_ins = ins; - ins = NOP; - } - - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } *ins_ptr = prev_ins; @@ -581,41 +569,11 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t return SLJIT_SUCCESS; } -static sljit_s32 post_call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types) -{ - sljit_s32 stack_offset = 0; - - arg_types >>= SLJIT_DEF_SHIFT; - - while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - stack_offset += sizeof(sljit_f32); - break; - case SLJIT_ARG_TYPE_F64: - if (stack_offset & 0x7) - stack_offset += sizeof(sljit_sw); - stack_offset += sizeof(sljit_f64); - break; - default: - stack_offset += sizeof(sljit_sw); - break; - } - - arg_types >>= SLJIT_DEF_SHIFT; - } - - /* Stack is aligned to 16 bytes, max two doubles can be placed on the stack. */ - if (stack_offset > 16) - return push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(16), DR(SLJIT_SP)); - - return SLJIT_SUCCESS; -} - SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types) { struct sljit_jump *jump; + sljit_u32 extra_space = (sljit_u32)type; sljit_ins ins; CHECK_ERROR_PTR(); @@ -624,21 +582,34 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); PTR_FAIL_IF(!jump); set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP); - type &= 0xff; - PTR_FAIL_IF(call_with_args(compiler, arg_types, &ins)); + PTR_FAIL_IF(call_with_args(compiler, arg_types, &ins, &extra_space)); SLJIT_ASSERT(DR(PIC_ADDR_REG) == 25 && PIC_ADDR_REG == TMP_REG2); PTR_FAIL_IF(emit_const(compiler, PIC_ADDR_REG, 0)); - jump->flags |= IS_JAL | IS_CALL; - PTR_FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + if (!(type & SLJIT_CALL_RETURN) || extra_space > 0) { + jump->flags |= IS_JAL | IS_CALL; + PTR_FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + } else + PTR_FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS)); + jump->addr = compiler->size; PTR_FAIL_IF(push_inst(compiler, ins, UNMOVABLE_INS)); - PTR_FAIL_IF(post_call_with_args(compiler, arg_types)); + if (extra_space == 0) + return jump; + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, + SLJIT_MEM1(SLJIT_SP), (sljit_sw)(extra_space - sizeof(sljit_sw)))); + + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS)); + + PTR_FAIL_IF(push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(extra_space), + (type & SLJIT_CALL_RETURN) ? UNMOVABLE_INS : DR(SLJIT_SP))); return jump; } @@ -646,6 +617,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { + sljit_u32 extra_space = (sljit_u32)type; sljit_ins ins; CHECK_ERROR(); @@ -662,10 +634,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, DR(PIC_ADDR_REG), src, srcw)); } - FAIL_IF(call_with_args(compiler, arg_types, &ins)); + FAIL_IF(call_with_args(compiler, arg_types, &ins, &extra_space)); /* Register input. */ - FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + if (!(type & SLJIT_CALL_RETURN) || extra_space > 0) + FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + else + FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS)); FAIL_IF(push_inst(compiler, ins, UNMOVABLE_INS)); - return post_call_with_args(compiler, arg_types); + + if (extra_space == 0) + return SLJIT_SUCCESS; + + if (type & SLJIT_CALL_RETURN) + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, + SLJIT_MEM1(SLJIT_SP), (sljit_sw)(extra_space - sizeof(sljit_sw)))); + + if (type & SLJIT_CALL_RETURN) + FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS)); + + return push_inst(compiler, ADDIU | S(SLJIT_SP) | T(SLJIT_SP) | IMM(extra_space), + (type & SLJIT_CALL_RETURN) ? UNMOVABLE_INS : DR(SLJIT_SP)); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_64.c b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_64.c index 1f22e49e..c2b3d839 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_64.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_64.c @@ -46,9 +46,9 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_a } /* Zero extended number. */ - uimm = imm; + uimm = (sljit_uw)imm; if (imm < 0) { - uimm = ~imm; + uimm = ~(sljit_uw)imm; inv = 1; } @@ -119,7 +119,7 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_a } #define SELECT_OP(a, b) \ - (!(op & SLJIT_I32_OP) ? a : b) + (!(op & SLJIT_32) ? a : b) #define EMIT_LOGICAL(op_imm, op_norm) \ if (flags & SRC2_IMM) { \ @@ -138,19 +138,19 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_a #define EMIT_SHIFT(op_dimm, op_dimm32, op_imm, op_dv, op_v) \ if (flags & SRC2_IMM) { \ if (src2 >= 32) { \ - SLJIT_ASSERT(!(op & SLJIT_I32_OP)); \ + SLJIT_ASSERT(!(op & SLJIT_32)); \ ins = op_dimm32; \ src2 -= 32; \ } \ else \ - ins = (op & SLJIT_I32_OP) ? op_imm : op_dimm; \ + ins = (op & SLJIT_32) ? op_imm : op_dimm; \ if (op & SLJIT_SET_Z) \ FAIL_IF(push_inst(compiler, ins | T(src1) | DA(EQUAL_FLAG) | SH_IMM(src2), EQUAL_FLAG)); \ if (!(flags & UNUSED_DEST)) \ FAIL_IF(push_inst(compiler, ins | T(src1) | D(dst) | SH_IMM(src2), DR(dst))); \ } \ else { \ - ins = (op & SLJIT_I32_OP) ? op_v : op_dv; \ + ins = (op & SLJIT_32) ? op_v : op_dv; \ if (op & SLJIT_SET_Z) \ FAIL_IF(push_inst(compiler, ins | S(src2) | T(src1) | DA(EQUAL_FLAG), EQUAL_FLAG)); \ if (!(flags & UNUSED_DEST)) \ @@ -165,50 +165,71 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl switch (GET_OPCODE(op)) { case SLJIT_MOV: - case SLJIT_MOV_P: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if (dst != src2) return push_inst(compiler, SELECT_OP(DADDU, ADDU) | S(src2) | TA(0) | D(dst), DR(dst)); return SLJIT_SUCCESS; case SLJIT_MOV_U8: + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) + return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xff), DR(dst)); + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; + case SLJIT_MOV_S8: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { - if (op == SLJIT_MOV_S8) { - FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(24), DR(dst))); - return push_inst(compiler, DSRA32 | T(dst) | D(dst) | SH_IMM(24), DR(dst)); - } - return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xff), DR(dst)); - } - else { - SLJIT_ASSERT(dst == src2); +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) + if (op & SLJIT_32) + return push_inst(compiler, SEB | T(src2) | D(dst), DR(dst)); +#endif /* SLJIT_MIPS_REV >= 1 */ + FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(24), DR(dst))); + return push_inst(compiler, DSRA32 | T(dst) | D(dst) | SH_IMM(24), DR(dst)); } + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_MOV_U16: + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) + return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xffff), DR(dst)); + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; + case SLJIT_MOV_S16: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { - if (op == SLJIT_MOV_S16) { - FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(16), DR(dst))); - return push_inst(compiler, DSRA32 | T(dst) | D(dst) | SH_IMM(16), DR(dst)); - } - return push_inst(compiler, ANDI | S(src2) | T(dst) | IMM(0xffff), DR(dst)); - } - else { - SLJIT_ASSERT(dst == src2); +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) + if (op & SLJIT_32) + return push_inst(compiler, SEH | T(src2) | D(dst), DR(dst)); +#endif /* SLJIT_MIPS_REV >= 1 */ + FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(16), DR(dst))); + return push_inst(compiler, DSRA32 | T(dst) | D(dst) | SH_IMM(16), DR(dst)); } + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_MOV_U32: - SLJIT_ASSERT(!(op & SLJIT_I32_OP)); - FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(0), DR(dst))); - return push_inst(compiler, DSRL32 | T(dst) | D(dst) | SH_IMM(0), DR(dst)); + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM) && !(op & SLJIT_32)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { +#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 2) + if (dst == src2) + return push_inst(compiler, DINSU | T(src2) | SA(0) | (31 << 11) | (0 << 11), DR(dst)); +#endif /* SLJIT_MIPS_REV >= 2 */ + FAIL_IF(push_inst(compiler, DSLL32 | T(src2) | D(dst) | SH_IMM(0), DR(dst))); + return push_inst(compiler, DSRL32 | T(dst) | D(dst) | SH_IMM(0), DR(dst)); + } + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; case SLJIT_MOV_S32: - SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); - return push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(0), DR(dst)); + SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM) && !(op & SLJIT_32)); + if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { + return push_inst(compiler, SLL | T(src2) | D(dst) | SH_IMM(0), DR(dst)); + } + SLJIT_ASSERT(dst == src2); + return SLJIT_SUCCESS; case SLJIT_NOT: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); @@ -234,7 +255,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl FAIL_IF(push_inst(compiler, SELECT_OP(DADDU, ADDU) | S(src2) | TA(0) | D(TMP_REG1), DR(TMP_REG1))); /* Check zero. */ FAIL_IF(push_inst(compiler, BEQ | S(TMP_REG1) | TA(0) | IMM(5), UNMOVABLE_INS)); - FAIL_IF(push_inst(compiler, ORI | SA(0) | T(dst) | IMM((op & SLJIT_I32_OP) ? 32 : 64), UNMOVABLE_INS)); + FAIL_IF(push_inst(compiler, ORI | SA(0) | T(dst) | IMM((op & SLJIT_32) ? 32 : 64), UNMOVABLE_INS)); FAIL_IF(push_inst(compiler, SELECT_OP(DADDIU, ADDIU) | SA(0) | T(dst) | IMM(-1), DR(dst))); /* Loop for searching the highest bit. */ FAIL_IF(push_inst(compiler, SELECT_OP(DADDIU, ADDIU) | S(dst) | T(dst) | IMM(1), DR(dst))); @@ -462,7 +483,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) return push_inst(compiler, SELECT_OP(DMUL, MUL) | S(src1) | T(src2) | D(dst), DR(dst)); #elif (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1) - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) return push_inst(compiler, MUL | S(src1) | T(src2) | D(dst), DR(dst)); FAIL_IF(push_inst(compiler, DMULT | S(src1) | T(src2), MOVABLE_INS)); return push_inst(compiler, MFLO | D(dst), DR(dst)); @@ -528,10 +549,10 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_UNUSED_ARG(executable_offset); SLJIT_UPDATE_WX_FLAGS(inst, inst + 6, 0); - inst[0] = (inst[0] & 0xffff0000) | ((new_target >> 48) & 0xffff); - inst[1] = (inst[1] & 0xffff0000) | ((new_target >> 32) & 0xffff); - inst[3] = (inst[3] & 0xffff0000) | ((new_target >> 16) & 0xffff); - inst[5] = (inst[5] & 0xffff0000) | (new_target & 0xffff); + inst[0] = (inst[0] & 0xffff0000) | ((sljit_ins)(new_target >> 48) & 0xffff); + inst[1] = (inst[1] & 0xffff0000) | ((sljit_ins)(new_target >> 32) & 0xffff); + inst[3] = (inst[3] & 0xffff0000) | ((sljit_ins)(new_target >> 16) & 0xffff); + inst[5] = (inst[5] & 0xffff0000) | ((sljit_ins)new_target & 0xffff); SLJIT_UPDATE_WX_FLAGS(inst, inst + 6, 1); inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); SLJIT_CACHE_FLUSH(inst, inst + 6); @@ -539,7 +560,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_ins *ins_ptr) @@ -548,19 +569,19 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t sljit_s32 word_arg_count = 0; sljit_s32 float_arg_count = 0; sljit_s32 types = 0; - sljit_ins prev_ins = NOP; + sljit_ins prev_ins = *ins_ptr; sljit_ins ins = NOP; SLJIT_ASSERT(reg_map[TMP_REG1] == 4 && freg_map[TMP_FREG1] == 12); - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: arg_count++; float_arg_count++; break; @@ -570,19 +591,11 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - if (arg_count != float_arg_count) - ins = MOV_S | FMT_S | FS(float_arg_count) | FD(arg_count); - else if (arg_count == 1) - ins = MOV_S | FMT_S | FS(SLJIT_FR0) | FD(TMP_FREG1); - arg_count--; - float_arg_count--; - break; + switch (types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: if (arg_count != float_arg_count) ins = MOV_S | FMT_D | FS(float_arg_count) | FD(arg_count); @@ -591,6 +604,14 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t arg_count--; float_arg_count--; break; + case SLJIT_ARG_TYPE_F32: + if (arg_count != float_arg_count) + ins = MOV_S | FMT_S | FS(float_arg_count) | FD(arg_count); + else if (arg_count == 1) + ins = MOV_S | FMT_S | FS(SLJIT_FR0) | FD(TMP_FREG1); + arg_count--; + float_arg_count--; + break; default: if (arg_count != word_arg_count) ins = DADDU | S(word_arg_count) | TA(0) | D(arg_count); @@ -608,7 +629,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t ins = NOP; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } *ins_ptr = prev_ins; @@ -620,7 +641,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile sljit_s32 arg_types) { struct sljit_jump *jump; - sljit_ins ins; + sljit_ins ins = NOP; CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); @@ -628,7 +649,9 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); PTR_FAIL_IF(!jump); set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP); - type &= 0xff; + + if (type & SLJIT_CALL_RETURN) + PTR_FAIL_IF(emit_stack_frame_release(compiler, 0, &ins)); PTR_FAIL_IF(call_with_args(compiler, arg_types, &ins)); @@ -636,8 +659,12 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile PTR_FAIL_IF(emit_const(compiler, PIC_ADDR_REG, 0)); - jump->flags |= IS_JAL | IS_CALL; - PTR_FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + if (!(type & SLJIT_CALL_RETURN)) { + jump->flags |= IS_JAL | IS_CALL; + PTR_FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + } else + PTR_FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS)); + jump->addr = compiler->size; PTR_FAIL_IF(push_inst(compiler, ins, UNMOVABLE_INS)); @@ -648,7 +675,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { - sljit_ins ins; + sljit_ins ins = NOP; CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); @@ -664,9 +691,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, DR(PIC_ADDR_REG), src, srcw)); } + if (type & SLJIT_CALL_RETURN) + FAIL_IF(emit_stack_frame_release(compiler, 0, &ins)); + FAIL_IF(call_with_args(compiler, arg_types, &ins)); /* Register input. */ - FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + if (!(type & SLJIT_CALL_RETURN)) + FAIL_IF(push_inst(compiler, JALR | S(PIC_ADDR_REG) | DA(RETURN_ADDR_REG), UNMOVABLE_INS)); + else + FAIL_IF(push_inst(compiler, JR | S(PIC_ADDR_REG), UNMOVABLE_INS)); return push_inst(compiler, ins, UNMOVABLE_INS); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_common.c b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_common.c index fd747695..be5cb22a 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_common.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeMIPS_common.c @@ -86,13 +86,13 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 5] = { #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { - 0, 0, 14, 2, 4, 6, 8, 12, 10, 16 + 0, 0, 14, 2, 4, 6, 8, 18, 30, 28, 26, 24, 22, 20, 12, 10, 16 }; #else static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { - 0, 0, 13, 14, 15, 16, 17, 12, 18, 10 + 0, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 1, 2, 3, 4, 5, 6, 7, 8, 9, 31, 30, 29, 28, 27, 26, 25, 24, 12, 11, 10 }; #endif @@ -101,23 +101,23 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { /* Instrucion forms */ /* --------------------------------------------------------------------- */ -#define S(s) (reg_map[s] << 21) -#define T(t) (reg_map[t] << 16) -#define D(d) (reg_map[d] << 11) -#define FT(t) (freg_map[t] << 16) -#define FS(s) (freg_map[s] << 11) -#define FD(d) (freg_map[d] << 6) +#define S(s) ((sljit_ins)reg_map[s] << 21) +#define T(t) ((sljit_ins)reg_map[t] << 16) +#define D(d) ((sljit_ins)reg_map[d] << 11) +#define FT(t) ((sljit_ins)freg_map[t] << 16) +#define FS(s) ((sljit_ins)freg_map[s] << 11) +#define FD(d) ((sljit_ins)freg_map[d] << 6) /* Absolute registers. */ -#define SA(s) ((s) << 21) -#define TA(t) ((t) << 16) -#define DA(d) ((d) << 11) -#define IMM(imm) ((imm) & 0xffff) -#define SH_IMM(imm) ((imm) << 6) +#define SA(s) ((sljit_ins)(s) << 21) +#define TA(t) ((sljit_ins)(t) << 16) +#define DA(d) ((sljit_ins)(d) << 11) +#define IMM(imm) ((sljit_ins)(imm) & 0xffff) +#define SH_IMM(imm) ((sljit_ins)(imm) << 6) #define DR(dr) (reg_map[dr]) #define FR(dr) (freg_map[dr]) -#define HI(opcode) ((opcode) << 26) -#define LO(opcode) (opcode) +#define HI(opcode) ((sljit_ins)(opcode) << 26) +#define LO(opcode) ((sljit_ins)(opcode)) #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) /* CMP.cond.fmt */ /* S = (20 << 21) D = (21 << 21) */ @@ -186,6 +186,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define DMULTU (HI(0) | LO(29)) #endif /* SLJIT_MIPS_REV >= 6 */ #define DIV_S (HI(17) | FMT_S | LO(3)) +#define DINSU (HI(31) | LO(6)) #define DSLL (HI(0) | LO(56)) #define DSLL32 (HI(0) | LO(60)) #define DSLLV (HI(0) | LO(20)) @@ -205,8 +206,10 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 4] = { #define JR (HI(0) | LO(8)) #endif /* SLJIT_MIPS_REV >= 6 */ #define LD (HI(55)) +#define LDC1 (HI(53)) #define LUI (HI(15)) #define LW (HI(35)) +#define LWC1 (HI(49)) #define MFC1 (HI(17)) #if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6) #define MOD (HI(0) | (3 << 6) | LO(26)) @@ -292,7 +295,8 @@ static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit { sljit_ins *ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins)); SLJIT_ASSERT(delay_slot == MOVABLE_INS || delay_slot >= UNMOVABLE_INS - || delay_slot == ((ins >> 11) & 0x1f) || delay_slot == ((ins >> 16) & 0x1f)); + || (sljit_ins)delay_slot == ((ins >> 11) & 0x1f) + || (sljit_ins)delay_slot == ((ins >> 16) & 0x1f)); FAIL_IF(!ptr); *ptr = ins; compiler->size++; @@ -300,7 +304,7 @@ static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit return SLJIT_SUCCESS; } -static SLJIT_INLINE sljit_ins invert_branch(sljit_s32 flags) +static SLJIT_INLINE sljit_ins invert_branch(sljit_uw flags) { if (flags & IS_BIT26_COND) return (1 << 26); @@ -371,7 +375,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i inst[1] = NOP; return inst + 1; } - inst[0] = inst[0] ^ invert_branch(jump->flags); + inst[0] ^= invert_branch(jump->flags); inst[1] = NOP; jump->addr -= sizeof(sljit_ins); return inst + 1; @@ -379,7 +383,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i } if (jump->flags & IS_COND) { - if ((jump->flags & IS_MOVABLE) && (target_addr & ~0xfffffff) == ((jump->addr + 2 * sizeof(sljit_ins)) & ~0xfffffff)) { + if ((jump->flags & IS_MOVABLE) && (target_addr & ~(sljit_uw)0xfffffff) == ((jump->addr + 2 * sizeof(sljit_ins)) & ~(sljit_uw)0xfffffff)) { jump->flags |= PATCH_J; saved_inst = inst[0]; inst[0] = inst[-1]; @@ -388,7 +392,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i inst[2] = NOP; return inst + 2; } - else if ((target_addr & ~0xfffffff) == ((jump->addr + 3 * sizeof(sljit_ins)) & ~0xfffffff)) { + else if ((target_addr & ~(sljit_uw)0xfffffff) == ((jump->addr + 3 * sizeof(sljit_ins)) & ~(sljit_uw)0xfffffff)) { jump->flags |= PATCH_J; inst[0] = (inst[0] & 0xffff0000) | 3; inst[1] = NOP; @@ -400,7 +404,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i } else { /* J instuctions. */ - if ((jump->flags & IS_MOVABLE) && (target_addr & ~0xfffffff) == (jump->addr & ~0xfffffff)) { + if ((jump->flags & IS_MOVABLE) && (target_addr & ~(sljit_uw)0xfffffff) == (jump->addr & ~(sljit_uw)0xfffffff)) { jump->flags |= PATCH_J; inst[0] = inst[-1]; inst[-1] = (jump->flags & IS_JAL) ? JAL : J; @@ -408,7 +412,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i return inst; } - if ((target_addr & ~0xfffffff) == ((jump->addr + sizeof(sljit_ins)) & ~0xfffffff)) { + if ((target_addr & ~(sljit_uw)0xfffffff) == ((jump->addr + sizeof(sljit_ins)) & ~(sljit_uw)0xfffffff)) { jump->flags |= PATCH_J; inst[0] = (jump->flags & IS_JAL) ? JAL : J; inst[1] = NOP; @@ -472,7 +476,7 @@ static SLJIT_INLINE void put_label_set(struct sljit_put_label *put_label) { sljit_uw addr = put_label->label->addr; sljit_ins *inst = (sljit_ins *)put_label->addr; - sljit_s32 reg = *inst; + sljit_u32 reg = *inst; if (put_label->flags == 0) { SLJIT_ASSERT(addr < 0x80000000l); @@ -548,7 +552,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil /* These structures are ordered by their address. */ if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == word_count) { @@ -584,7 +588,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { label->addr = (sljit_uw)code_ptr; - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -601,39 +605,46 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil buf_ptr = (sljit_ins *)jump->addr; if (jump->flags & PATCH_B) { - addr = (sljit_sw)(addr - ((sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) + sizeof(sljit_ins))) >> 2; + addr = (sljit_uw)((sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) - sizeof(sljit_ins)) >> 2); SLJIT_ASSERT((sljit_sw)addr <= SIMM_MAX && (sljit_sw)addr >= SIMM_MIN); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | (addr & 0xffff); + buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((sljit_ins)addr & 0xffff); break; } if (jump->flags & PATCH_J) { - SLJIT_ASSERT((addr & ~0xfffffff) == (((sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) + sizeof(sljit_ins)) & ~0xfffffff)); - buf_ptr[0] |= (addr >> 2) & 0x03ffffff; + SLJIT_ASSERT((addr & ~(sljit_uw)0xfffffff) + == (((sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) + sizeof(sljit_ins)) & ~(sljit_uw)0xfffffff)); + buf_ptr[0] |= (sljit_ins)(addr >> 2) & 0x03ffffff; break; } /* Set the fields of immediate loads. */ #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[1] |= (sljit_ins)addr & 0xffff; #else if (jump->flags & PATCH_ABS32) { SLJIT_ASSERT(addr <= 0x7fffffff); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[1] |= (sljit_ins)addr & 0xffff; + break; } - else if (jump->flags & PATCH_ABS48) { + + if (jump->flags & PATCH_ABS48) { SLJIT_ASSERT(addr <= 0x7fffffffffffl); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 32) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[3] = (buf_ptr[3] & 0xffff0000) | (addr & 0xffff); - } - else { - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 48) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | ((addr >> 32) & 0xffff); - buf_ptr[3] = (buf_ptr[3] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[5] = (buf_ptr[5] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 32) & 0xffff; + buf_ptr[1] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[3] |= (sljit_ins)addr & 0xffff; + break; } + + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3] | buf_ptr[5]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 48) & 0xffff; + buf_ptr[1] |= (sljit_ins)(addr >> 32) & 0xffff; + buf_ptr[3] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[5] |= (sljit_ins)addr & 0xffff; #endif } while (0); jump = jump->next; @@ -656,7 +667,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_ins); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -673,7 +684,9 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) { +#if defined(__GNUC__) && !defined(SLJIT_IS_FPU_AVAILABLE) sljit_sw fir = 0; +#endif /* __GNUC__ && !SLJIT_IS_FPU_AVAILABLE */ switch (feature_type) { case SLJIT_HAS_FPU: @@ -696,7 +709,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #endif /* SLJIT_MIPS_REV >= 1 */ default: - return fir; + return 0; } } @@ -723,15 +736,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define CUMULATIVE_OP 0x00080 #define LOGICAL_OP 0x00100 #define IMM_OP 0x00200 -#define SRC2_IMM 0x00400 +#define MOVE_OP 0x00400 +#define SRC2_IMM 0x00800 -#define UNUSED_DEST 0x00800 -#define REG_DEST 0x01000 -#define REG1_SOURCE 0x02000 -#define REG2_SOURCE 0x04000 -#define SLOW_SRC1 0x08000 -#define SLOW_SRC2 0x10000 -#define SLOW_DEST 0x20000 +#define UNUSED_DEST 0x01000 +#define REG_DEST 0x02000 +#define REG1_SOURCE 0x04000 +#define REG2_SOURCE 0x08000 +#define SLOW_SRC1 0x10000 +#define SLOW_SRC2 0x20000 +#define SLOW_DEST 0x40000 #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) #define STACK_STORE SW @@ -741,7 +755,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define STACK_LOAD LD #endif -static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg_ar, sljit_s32 arg, sljit_sw argw); +static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg_ar, sljit_s32 arg, sljit_sw argw); +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 frame_size, sljit_ins *ins_ptr); #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) #include "sljitNativeMIPS_32.c" @@ -754,56 +769,195 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { sljit_ins base; - sljit_s32 args, i, tmp, offs; + sljit_s32 i, tmp, offset; + sljit_s32 arg_count, word_arg_count, saved_arg_count, float_arg_count; CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET; + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - local_size = (local_size + 15) & ~0xf; + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((local_size & SSIZE_OF(sw)) != 0) + local_size += SSIZE_OF(sw); + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + } + + local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; #else - local_size = (local_size + 31) & ~0x1f; + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + local_size = (local_size + SLJIT_LOCALS_OFFSET + 31) & ~0x1f; #endif compiler->local_size = local_size; - if (local_size <= SIMM_MAX) { +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + tmp = arg_types >> SLJIT_ARG_SHIFT; + arg_count = 0; + offset = 0; + + while (tmp) { + offset = arg_count; + if ((tmp & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F64) { + if ((arg_count & 0x1) != 0) + arg_count++; + arg_count++; + } + + arg_count++; + tmp >>= SLJIT_ARG_SHIFT; + } + + compiler->args_size = (sljit_uw)arg_count << 2; + offset = (offset >= 4) ? (offset << 2) : 0; +#else /* !SLJIT_CONFIG_MIPS_32 */ + offset = 0; +#endif /* SLJIT_CONFIG_MIPS_32 */ + + if (local_size + offset <= -SIMM_MIN) { /* Frequent case. */ FAIL_IF(push_inst(compiler, ADDIU_W | S(SLJIT_SP) | T(SLJIT_SP) | IMM(-local_size), DR(SLJIT_SP))); base = S(SLJIT_SP); - offs = local_size - (sljit_sw)sizeof(sljit_sw); - } - else { + offset = local_size - SSIZE_OF(sw); + } else { FAIL_IF(load_immediate(compiler, DR(OTHER_FLAG), local_size)); FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | TA(0) | D(TMP_REG2), DR(TMP_REG2))); FAIL_IF(push_inst(compiler, SUBU_W | S(SLJIT_SP) | T(OTHER_FLAG) | D(SLJIT_SP), DR(SLJIT_SP))); base = S(TMP_REG2); + offset = -SSIZE_OF(sw); +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) local_size = 0; - offs = -(sljit_sw)sizeof(sljit_sw); +#endif } - FAIL_IF(push_inst(compiler, STACK_STORE | base | TA(RETURN_ADDR_REG) | IMM(offs), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, STACK_STORE | base | TA(RETURN_ADDR_REG) | IMM(offset), MOVABLE_INS)); - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) { - offs -= (sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | base | T(i) | IMM(offs), MOVABLE_INS)); + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | base | T(i) | IMM(offset), MOVABLE_INS)); } for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { - offs -= (sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | base | T(i) | IMM(offs), MOVABLE_INS)); + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | base | T(i) | IMM(offset), MOVABLE_INS)); } - args = get_arg_count(arg_types); +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + /* This alignment is valid because offset is not used after storing FPU regs. */ + if ((offset & SSIZE_OF(sw)) != 0) + offset -= SSIZE_OF(sw); +#endif - if (args >= 1) - FAIL_IF(push_inst(compiler, ADDU_W | SA(4) | TA(0) | D(SLJIT_S0), DR(SLJIT_S0))); - if (args >= 2) - FAIL_IF(push_inst(compiler, ADDU_W | SA(5) | TA(0) | D(SLJIT_S1), DR(SLJIT_S1))); - if (args >= 3) - FAIL_IF(push_inst(compiler, ADDU_W | SA(6) | TA(0) | D(SLJIT_S2), DR(SLJIT_S2))); + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, SDC1 | base | FT(i) | IMM(offset), MOVABLE_INS)); + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, SDC1 | base | FT(i) | IMM(offset), MOVABLE_INS)); + } + + arg_types >>= SLJIT_ARG_SHIFT; + arg_count = 0; + word_arg_count = 0; + saved_arg_count = 0; + float_arg_count = 0; + +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + /* The first maximum two floating point arguments are passed in floating point + registers if no integer argument precedes them. The first 16 byte data is + passed in four integer registers, the rest is placed onto the stack. + The floating point registers are also part of the first 16 byte data, so + their corresponding integer registers are not used when they are present. */ + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + float_arg_count++; + if ((arg_count & 0x1) != 0) + arg_count++; + + if (word_arg_count == 0 && float_arg_count <= 2) { + if (float_arg_count == 1) + FAIL_IF(push_inst(compiler, MOV_S | FMT_D | FS(TMP_FREG1) | FD(SLJIT_FR0), MOVABLE_INS)); + } else if (arg_count < 4) { + FAIL_IF(push_inst(compiler, MTC1 | TA(4 + arg_count) | FS(float_arg_count), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, MTC1 | TA(5 + arg_count) | FS(float_arg_count) | (1 << 11), MOVABLE_INS)); + } else + FAIL_IF(push_inst(compiler, LDC1 | base | FT(float_arg_count) | IMM(local_size + (arg_count << 2)), MOVABLE_INS)); + arg_count++; + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + + if (word_arg_count == 0 && float_arg_count <= 2) { + if (float_arg_count == 1) + FAIL_IF(push_inst(compiler, MOV_S | FMT_S | FS(TMP_FREG1) | FD(SLJIT_FR0), MOVABLE_INS)); + } else if (arg_count < 4) + FAIL_IF(push_inst(compiler, MTC1 | TA(4 + arg_count) | FS(float_arg_count), MOVABLE_INS)); + else + FAIL_IF(push_inst(compiler, LWC1 | base | FT(float_arg_count) | IMM(local_size + (arg_count << 2)), MOVABLE_INS)); + break; + default: + word_arg_count++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (word_arg_count != arg_count + 1 || arg_count == 0) + tmp = word_arg_count; + else + break; + + if (arg_count < 4) + FAIL_IF(push_inst(compiler, ADDU_W | SA(4 + arg_count) | TA(0) | D(tmp), DR(tmp))); + else + FAIL_IF(push_inst(compiler, LW | base | T(tmp) | IMM(local_size + (arg_count << 2)), DR(tmp))); + break; + } + arg_count++; + arg_types >>= SLJIT_ARG_SHIFT; + } + + SLJIT_ASSERT(compiler->args_size == (sljit_uw)arg_count << 2); +#else /* !SLJIT_CONFIG_MIPS_32 */ + while (arg_types) { + arg_count++; + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + float_arg_count++; + if (arg_count != float_arg_count) + FAIL_IF(push_inst(compiler, MOV_S | FMT_D | FS(arg_count) | FD(float_arg_count), MOVABLE_INS)); + else if (arg_count == 1) + FAIL_IF(push_inst(compiler, MOV_S | FMT_D | FS(TMP_FREG1) | FD(SLJIT_FR0), MOVABLE_INS)); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + if (arg_count != float_arg_count) + FAIL_IF(push_inst(compiler, MOV_S | FMT_S | FS(arg_count) | FD(float_arg_count), MOVABLE_INS)); + else if (arg_count == 1) + FAIL_IF(push_inst(compiler, MOV_S | FMT_S | FS(TMP_FREG1) | FD(SLJIT_FR0), MOVABLE_INS)); + break; + default: + word_arg_count++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (word_arg_count != arg_count || word_arg_count <= 1) + tmp = word_arg_count; + else + break; + + FAIL_IF(push_inst(compiler, ADDU_W | SA(3 + arg_count) | TA(0) | D(tmp), DR(tmp))); + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } +#endif /* SLJIT_CONFIG_MIPS_32 */ return SLJIT_SUCCESS; } @@ -816,57 +970,110 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET; + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - compiler->local_size = (local_size + 15) & ~0xf; + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((local_size & SSIZE_OF(sw)) != 0) + local_size += SSIZE_OF(sw); + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + } + + compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; #else - compiler->local_size = (local_size + 31) & ~0x1f; + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 31) & ~0x1f; #endif return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 frame_size, sljit_ins *ins_ptr) { - sljit_s32 local_size, i, tmp, offs; - sljit_ins base; - - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); - - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); + sljit_s32 local_size, i, tmp, offset; + sljit_s32 scratches = compiler->scratches; + sljit_s32 saveds = compiler->saveds; + sljit_s32 fsaveds = compiler->fsaveds; + sljit_s32 fscratches = compiler->fscratches; local_size = compiler->local_size; - if (local_size <= SIMM_MAX) - base = S(SLJIT_SP); - else { - FAIL_IF(load_immediate(compiler, DR(TMP_REG1), local_size)); - FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | T(TMP_REG1) | D(TMP_REG1), DR(TMP_REG1))); - base = S(TMP_REG1); - local_size = 0; + + tmp = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + if (fsaveds > 0 || fscratches >= SLJIT_FIRST_SAVED_FLOAT_REG) { + if ((tmp & SSIZE_OF(sw)) != 0) + tmp += SSIZE_OF(sw); + tmp += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + } +#else + tmp += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); +#endif + + if (local_size <= SIMM_MAX) { + if (local_size < frame_size) { + FAIL_IF(push_inst(compiler, ADDIU_W | S(SLJIT_SP) | T(SLJIT_SP) | IMM(local_size - frame_size), DR(SLJIT_SP))); + local_size = frame_size; + } + } else { + if (tmp < frame_size) + tmp = frame_size; + + FAIL_IF(load_immediate(compiler, DR(TMP_REG1), local_size - tmp)); + FAIL_IF(push_inst(compiler, ADDU_W | S(SLJIT_SP) | T(TMP_REG1) | D(SLJIT_SP), DR(SLJIT_SP))); + local_size = tmp; } - FAIL_IF(push_inst(compiler, STACK_LOAD | base | TA(RETURN_ADDR_REG) | IMM(local_size - (sljit_s32)sizeof(sljit_sw)), RETURN_ADDR_REG)); - offs = local_size - (sljit_s32)GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1); + SLJIT_ASSERT(local_size >= frame_size); - tmp = compiler->scratches; - for (i = SLJIT_FIRST_SAVED_REG; i <= tmp; i++) { - FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(i) | IMM(offs), DR(i))); - offs += (sljit_s32)(sizeof(sljit_sw)); + offset = local_size - SSIZE_OF(sw); + if (frame_size == 0) + FAIL_IF(push_inst(compiler, STACK_LOAD | S(SLJIT_SP) | TA(RETURN_ADDR_REG) | IMM(offset), RETURN_ADDR_REG)); + + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(SLJIT_SP) | T(i) | IMM(offset), MOVABLE_INS)); } - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; - for (i = tmp; i <= SLJIT_S0; i++) { - FAIL_IF(push_inst(compiler, STACK_LOAD | base | T(i) | IMM(offs), DR(i))); - offs += (sljit_s32)(sizeof(sljit_sw)); + for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(SLJIT_SP) | T(i) | IMM(offset), MOVABLE_INS)); } - SLJIT_ASSERT(offs == local_size - (sljit_sw)(sizeof(sljit_sw))); +#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) + /* This alignment is valid because offset is not used after storing FPU regs. */ + if ((offset & SSIZE_OF(sw)) != 0) + offset -= SSIZE_OF(sw); +#endif + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LDC1 | S(SLJIT_SP) | FT(i) | IMM(offset), MOVABLE_INS)); + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LDC1 | S(SLJIT_SP) | FT(i) | IMM(offset), MOVABLE_INS)); + } + + if (local_size > frame_size) + *ins_ptr = ADDIU_W | S(SLJIT_SP) | T(SLJIT_SP) | IMM(local_size - frame_size); + else + *ins_ptr = NOP; + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + sljit_ins ins; + + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + emit_stack_frame_release(compiler, 0, &ins); FAIL_IF(push_inst(compiler, JR | SA(RETURN_ADDR_REG), UNMOVABLE_INS)); - if (compiler->local_size <= SIMM_MAX) - return push_inst(compiler, ADDIU_W | S(SLJIT_SP) | T(SLJIT_SP) | IMM(compiler->local_size), UNMOVABLE_INS); - else - return push_inst(compiler, ADDU_W | S(TMP_REG1) | TA(0) | D(SLJIT_SP), UNMOVABLE_INS); + return push_inst(compiler, ins, UNMOVABLE_INS); } #undef STACK_STORE @@ -1041,7 +1248,7 @@ static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sl return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | SA(tmp_ar) | TA(reg_ar), delay_slot); } -static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg_ar, sljit_s32 arg, sljit_sw argw) +static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg_ar, sljit_s32 arg, sljit_sw argw) { sljit_s32 tmp_ar, base, delay_slot; @@ -1104,14 +1311,14 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 compiler->cache_argw = 0; } - if (SLJIT_UNLIKELY(dst == SLJIT_UNUSED)) { + if (dst == TMP_REG2) { SLJIT_ASSERT(HAS_FLAGS(op)); flags |= UNUSED_DEST; } else if (FAST_IS_REG(dst)) { dst_r = dst; flags |= REG_DEST; - if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) + if (flags & MOVE_OP) sugg_src2_r = dst_r; } else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, DR(TMP_REG1), dst, dstw)) @@ -1165,8 +1372,8 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 if (FAST_IS_REG(src2)) { src2_r = src2; flags |= REG2_SOURCE; - if (!(flags & REG_DEST) && op >= SLJIT_MOV && op <= SLJIT_MOV_P) - dst_r = src2_r; + if ((flags & (REG_DEST | MOVE_OP)) == MOVE_OP) + dst_r = (sljit_s32)src2_r; } else if (src2 & SLJIT_IMM) { if (!(flags & SRC2_IMM)) { @@ -1176,8 +1383,12 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 } else { src2_r = 0; - if ((op >= SLJIT_MOV && op <= SLJIT_MOV_P) && (dst & SLJIT_MEM)) - dst_r = 0; + if (flags & MOVE_OP) { + if (dst & SLJIT_MEM) + dst_r = 0; + else + op = SLJIT_MOV; + } } } } @@ -1221,7 +1432,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - sljit_s32 int_op = op & SLJIT_I32_OP; + sljit_s32 int_op = op & SLJIT_32; #endif CHECK_ERROR(); @@ -1326,11 +1537,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# define flags 0 -#else sljit_s32 flags = 0; -#endif CHECK_ERROR(); CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw)); @@ -1338,58 +1545,50 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(src, srcw); #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - if ((op & SLJIT_I32_OP) && GET_OPCODE(op) >= SLJIT_NOT) - flags |= INT_DATA | SIGNED_DATA; + if (op & SLJIT_32) + flags = INT_DATA | SIGNED_DATA; #endif switch (GET_OPCODE(op)) { case SLJIT_MOV: - case SLJIT_MOV_P: - return emit_op(compiler, SLJIT_MOV, WORD_DATA, dst, dstw, TMP_REG1, 0, src, srcw); - - case SLJIT_MOV_U32: #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - return emit_op(compiler, SLJIT_MOV_U32, INT_DATA, dst, dstw, TMP_REG1, 0, src, srcw); -#else - return emit_op(compiler, SLJIT_MOV_U32, INT_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u32)srcw : srcw); + case SLJIT_MOV_U32: + case SLJIT_MOV_S32: + case SLJIT_MOV32: #endif + case SLJIT_MOV_P: + return emit_op(compiler, SLJIT_MOV, WORD_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, srcw); + +#if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) + case SLJIT_MOV_U32: + return emit_op(compiler, SLJIT_MOV_U32, INT_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u32)srcw : srcw); case SLJIT_MOV_S32: -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) - return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, srcw); -#else - return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s32)srcw : srcw); + case SLJIT_MOV32: + return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s32)srcw : srcw); #endif case SLJIT_MOV_U8: - return emit_op(compiler, SLJIT_MOV_U8, BYTE_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u8)srcw : srcw); + return emit_op(compiler, op, BYTE_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u8)srcw : srcw); case SLJIT_MOV_S8: - return emit_op(compiler, SLJIT_MOV_S8, BYTE_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s8)srcw : srcw); + return emit_op(compiler, op, BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s8)srcw : srcw); case SLJIT_MOV_U16: - return emit_op(compiler, SLJIT_MOV_U16, HALF_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u16)srcw : srcw); + return emit_op(compiler, op, HALF_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u16)srcw : srcw); case SLJIT_MOV_S16: - return emit_op(compiler, SLJIT_MOV_S16, HALF_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s16)srcw : srcw); + return emit_op(compiler, op, HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s16)srcw : srcw); case SLJIT_NOT: return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_NEG: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - return emit_op(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), flags | IMM_OP, dst, dstw, SLJIT_IMM, 0, src, srcw); - case SLJIT_CLZ: return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw); } SLJIT_UNREACHABLE(); return SLJIT_SUCCESS; - -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# undef flags -#endif } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, @@ -1397,23 +1596,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# define flags 0 -#else sljit_s32 flags = 0; -#endif CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - if (op & SLJIT_I32_OP) { + if (op & SLJIT_32) { flags |= INT_DATA | SIGNED_DATA; if (src1 & SLJIT_IMM) src1w = (sljit_s32)src1w; @@ -1425,12 +1617,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile switch (GET_OPCODE(op)) { case SLJIT_ADD: case SLJIT_ADDC: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUB: case SLJIT_SUBC: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w); case SLJIT_MUL: @@ -1450,7 +1642,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile src2w &= 0x1f; #else if (src2 & SLJIT_IMM) { - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) src2w &= 0x1f; else src2w &= 0x3f; @@ -1461,10 +1653,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile SLJIT_UNREACHABLE(); return SLJIT_SUCCESS; +} -#if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# undef flags +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; #endif + return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, @@ -1512,7 +1714,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1524,17 +1726,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ -#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_F32_OP) >> 7)) -#define FMT(op) (((op & SLJIT_F32_OP) ^ SLJIT_F32_OP) << (21 - 8)) +#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_32) >> 7)) +#define FMT(op) ((((sljit_ins)op & SLJIT_32) ^ SLJIT_32) << (21 - 8)) static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# define flags 0 +# define flags (sljit_u32)0 #else - sljit_s32 flags = (GET_OPCODE(op) == SLJIT_CONV_SW_FROM_F64) << 21; + sljit_u32 flags = ((sljit_u32)(GET_OPCODE(op) == SLJIT_CONV_SW_FROM_F64)) << 21; #endif if (src & SLJIT_MEM) { @@ -1560,9 +1762,9 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) -# define flags 0 +# define flags (sljit_u32)0 #else - sljit_s32 flags = (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_SW) << 21; + sljit_u32 flags = ((sljit_u32)(GET_OPCODE(op) == SLJIT_CONV_F64_FROM_SW)) << 21; #endif sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; @@ -1582,7 +1784,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp FAIL_IF(push_inst(compiler, MTC1 | flags | T(TMP_REG1) | FS(TMP_FREG1), MOVABLE_INS)); } - FAIL_IF(push_inst(compiler, CVT_S_S | flags | (4 << 21) | (((op & SLJIT_F32_OP) ^ SLJIT_F32_OP) >> 8) | FS(TMP_FREG1) | FD(dst_r), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, CVT_S_S | flags | (4 << 21) | ((((sljit_ins)op & SLJIT_32) ^ SLJIT_32) >> 8) | FS(TMP_FREG1) | FD(dst_r), MOVABLE_INS)); if (dst & SLJIT_MEM) return emit_op_mem2(compiler, FLOAT_DATA(op), FR(TMP_FREG1), dst, dstw, 0, 0); @@ -1640,11 +1842,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil compiler->cache_arg = 0; compiler->cache_argw = 0; - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; @@ -1669,8 +1871,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil FAIL_IF(push_inst(compiler, ABS_S | FMT(op) | FS(src) | FD(dst_r), MOVABLE_INS)); break; case SLJIT_CONV_F64_FROM_F32: - FAIL_IF(push_inst(compiler, CVT_S_S | ((op & SLJIT_F32_OP) ? 1 : (1 << 21)) | FS(src) | FD(dst_r), MOVABLE_INS)); - op ^= SLJIT_F32_OP; + FAIL_IF(push_inst(compiler, CVT_S_S | (sljit_ins)((op & SLJIT_32) ? 1 : (1 << 21)) | FS(src) | FD(dst_r), MOVABLE_INS)); + op ^= SLJIT_32; break; } @@ -1841,7 +2043,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile { struct sljit_jump *jump; sljit_ins inst; - sljit_s32 flags = 0; + sljit_u32 flags = 0; sljit_s32 delay_check = UNMOVABLE_INS; CHECK_ERROR_PTR(); @@ -1864,6 +2066,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile case SLJIT_SIG_LESS: case SLJIT_SIG_GREATER: case SLJIT_OVERFLOW: + case SLJIT_CARRY: BR_Z(OTHER_FLAG); break; case SLJIT_GREATER_EQUAL: @@ -1871,6 +2074,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile case SLJIT_SIG_GREATER_EQUAL: case SLJIT_SIG_LESS_EQUAL: case SLJIT_NOT_OVERFLOW: + case SLJIT_NOT_CARRY: BR_NZ(OTHER_FLAG); break; case SLJIT_NOT_EQUAL_F64: @@ -1947,7 +2151,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler compiler->cache_arg = 0; compiler->cache_argw = 0; - flags = ((type & SLJIT_I32_OP) ? INT_DATA : WORD_DATA) | LOAD_DATA; + flags = ((type & SLJIT_32) ? INT_DATA : WORD_DATA) | LOAD_DATA; if (src1 & SLJIT_MEM) { PTR_FAIL_IF(emit_op_mem2(compiler, flags, DR(TMP_REG1), src1, src1w, src2, src2w)); src1 = TMP_REG1; @@ -2074,7 +2278,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_JAL : 0)); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; if (compiler->delay_slot != UNMOVABLE_INS) jump->flags |= IS_MOVABLE; @@ -2103,7 +2307,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) sljit_s32 mem_type = WORD_DATA; #else - sljit_s32 mem_type = (op & SLJIT_I32_OP) ? (INT_DATA | SIGNED_DATA) : WORD_DATA; + sljit_s32 mem_type = ((op & SLJIT_32) || op == SLJIT_MOV32) ? (INT_DATA | SIGNED_DATA) : WORD_DATA; #endif CHECK_ERROR(); @@ -2111,10 +2315,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co ADJUST_LOCAL_OFFSET(dst, dstw); op = GET_OPCODE(op); -#if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - if (op == SLJIT_MOV_S32) - mem_type = INT_DATA | SIGNED_DATA; -#endif dst_ar = DR((op < SLJIT_ADD && FAST_IS_REG(dst)) ? dst : TMP_REG2); compiler->cache_arg = 0; @@ -2131,7 +2331,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co break; case SLJIT_OVERFLOW: case SLJIT_NOT_OVERFLOW: - if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB) { + if (compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB)) { src_ar = OTHER_FLAG; break; } @@ -2142,6 +2342,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co case SLJIT_GREATER_F64: case SLJIT_LESS_EQUAL_F64: type ^= 0x1; /* Flip type bit for the XORI below. */ + /* fallthrough */ case SLJIT_EQUAL_F64: case SLJIT_NOT_EQUAL_F64: case SLJIT_LESS_F64: @@ -2203,7 +2404,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { #if (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) - if (dst_reg & SLJIT_I32_OP) + if (dst_reg & SLJIT_32) srcw = (sljit_s32)srcw; #endif FAIL_IF(load_immediate(compiler, DR(TMP_REG1), srcw)); @@ -2211,7 +2412,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil srcw = 0; } - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; switch (type & 0xff) { case SLJIT_EQUAL: @@ -2298,7 +2499,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj #if (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) PTR_FAIL_IF(emit_const(compiler, dst_r, 0)); #else - PTR_FAIL_IF(push_inst(compiler, dst_r, UNMOVABLE_INS)); + PTR_FAIL_IF(push_inst(compiler, (sljit_ins)dst_r, UNMOVABLE_INS)); compiler->size += 5; #endif diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativePPC_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativePPC_32.c index 6ddb5508..95fe6bbe 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativePPC_32.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativePPC_32.c @@ -86,11 +86,6 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl SLJIT_ASSERT(src1 == TMP_REG1); return push_inst(compiler, NOR | RC(flags) | S(src2) | A(dst) | B(src2)); - case SLJIT_NEG: - SLJIT_ASSERT(src1 == TMP_REG1); - /* Setting XER SO is not enough, CR SO is also needed. */ - return push_inst(compiler, NEG | OE((flags & ALT_FORM1) ? ALT_SET_FLAGS : 0) | RC(flags) | D(dst) | A(src2)); - case SLJIT_CLZ: SLJIT_ASSERT(src1 == TMP_REG1); return push_inst(compiler, CNTLZW | S(src2) | A(dst)); @@ -158,7 +153,9 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & ALT_FORM3) { /* Setting XER SO is not enough, CR SO is also needed. */ - return push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); + if (src1 != TMP_ZERO) + return push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); + return push_inst(compiler, NEG | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2)); } if (flags & ALT_FORM4) { @@ -167,11 +164,17 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm); } - if (!(flags & ALT_SET_FLAGS)) + if (!(flags & ALT_SET_FLAGS)) { + SLJIT_ASSERT(src1 != TMP_ZERO); return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1)); + } + if (flags & ALT_FORM5) return push_inst(compiler, SUBFC | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); - return push_inst(compiler, SUBF | RC(flags) | D(dst) | A(src2) | B(src1)); + + if (src1 != TMP_ZERO) + return push_inst(compiler, SUBF | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); + return push_inst(compiler, NEG | RC(ALT_SET_FLAGS) | D(dst) | A(src2)); case SLJIT_SUBC: return push_inst(compiler, SUBFE | D(dst) | A(src2) | B(src1)); @@ -277,5 +280,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativePPC_64.c b/src/3rdparty/pcre2/src/sljit/sljitNativePPC_64.c index cbdf2dd8..d104f6d7 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativePPC_64.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativePPC_64.c @@ -57,20 +57,20 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, } /* Count leading zeroes. */ - tmp = (imm >= 0) ? imm : ~imm; + tmp = (sljit_uw)((imm >= 0) ? imm : ~imm); ASM_SLJIT_CLZ(tmp, shift); SLJIT_ASSERT(shift > 0); shift--; - tmp = (imm << shift); + tmp = ((sljit_uw)imm << shift); if ((tmp & ~0xffff000000000000ul) == 0) { - FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | IMM(tmp >> 48))); + FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | (sljit_ins)(tmp >> 48))); shift += 15; return PUSH_RLDICR(reg, shift); } if ((tmp & ~0xffffffff00000000ul) == 0) { - FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | IMM(tmp >> 48))); + FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | (sljit_ins)(tmp >> 48))); FAIL_IF(push_inst(compiler, ORI | S(reg) | A(reg) | IMM(tmp >> 32))); shift += 31; return PUSH_RLDICR(reg, shift); @@ -78,18 +78,18 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, /* Cut out the 16 bit from immediate. */ shift += 15; - tmp2 = imm & ((1ul << (63 - shift)) - 1); + tmp2 = (sljit_uw)imm & (((sljit_uw)1 << (63 - shift)) - 1); if (tmp2 <= 0xffff) { - FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | IMM(tmp >> 48))); + FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | (sljit_ins)(tmp >> 48))); FAIL_IF(PUSH_RLDICR(reg, shift)); - return push_inst(compiler, ORI | S(reg) | A(reg) | tmp2); + return push_inst(compiler, ORI | S(reg) | A(reg) | (sljit_ins)tmp2); } if (tmp2 <= 0xffffffff) { FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | IMM(tmp >> 48))); FAIL_IF(PUSH_RLDICR(reg, shift)); - FAIL_IF(push_inst(compiler, ORIS | S(reg) | A(reg) | (tmp2 >> 16))); + FAIL_IF(push_inst(compiler, ORIS | S(reg) | A(reg) | (sljit_ins)(tmp2 >> 16))); return (imm & 0xffff) ? push_inst(compiler, ORI | S(reg) | A(reg) | IMM(tmp2)) : SLJIT_SUCCESS; } @@ -97,16 +97,16 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 reg, tmp2 <<= shift2; if ((tmp2 & ~0xffff000000000000ul) == 0) { - FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | IMM(tmp >> 48))); + FAIL_IF(push_inst(compiler, ADDI | D(reg) | A(0) | (sljit_ins)(tmp >> 48))); shift2 += 15; shift += (63 - shift2); FAIL_IF(PUSH_RLDICR(reg, shift)); - FAIL_IF(push_inst(compiler, ORI | S(reg) | A(reg) | (tmp2 >> 48))); + FAIL_IF(push_inst(compiler, ORI | S(reg) | A(reg) | (sljit_ins)(tmp2 >> 48))); return PUSH_RLDICR(reg, shift2); } /* The general version. */ - FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | IMM(imm >> 48))); + FAIL_IF(push_inst(compiler, ADDIS | D(reg) | A(0) | (sljit_ins)((sljit_uw)imm >> 48))); FAIL_IF(push_inst(compiler, ORI | S(reg) | A(reg) | IMM(imm >> 32))); FAIL_IF(PUSH_RLDICR(reg, 31)); FAIL_IF(push_inst(compiler, ORIS | S(reg) | A(reg) | IMM(imm >> 16))); @@ -199,19 +199,6 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl UN_EXTS(); return push_inst(compiler, NOR | RC(flags) | S(src2) | A(dst) | B(src2)); - case SLJIT_NEG: - SLJIT_ASSERT(src1 == TMP_REG1); - - if ((flags & (ALT_FORM1 | ALT_SIGN_EXT)) == (ALT_FORM1 | ALT_SIGN_EXT)) { - FAIL_IF(push_inst(compiler, RLDI(TMP_REG2, src2, 32, 31, 1))); - FAIL_IF(push_inst(compiler, NEG | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(TMP_REG2))); - return push_inst(compiler, RLDI(dst, dst, 32, 32, 0)); - } - - UN_EXTS(); - /* Setting XER SO is not enough, CR SO is also needed. */ - return push_inst(compiler, NEG | OE((flags & ALT_FORM1) ? ALT_SET_FLAGS : 0) | RC(flags) | D(dst) | A(src2)); - case SLJIT_CLZ: SLJIT_ASSERT(src1 == TMP_REG1); if (flags & ALT_FORM1) @@ -299,13 +286,22 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & ALT_FORM3) { if (flags & ALT_SIGN_EXT) { - FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, src1, 32, 31, 1))); - src1 = TMP_REG1; - FAIL_IF(push_inst(compiler, RLDI(TMP_REG2, src2, 32, 31, 1))); - src2 = TMP_REG2; + if (src1 != TMP_ZERO) { + FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, src1, 32, 31, 1))); + src1 = TMP_REG1; + } + if (src2 != TMP_ZERO) { + FAIL_IF(push_inst(compiler, RLDI(TMP_REG2, src2, 32, 31, 1))); + src2 = TMP_REG2; + } } + /* Setting XER SO is not enough, CR SO is also needed. */ - FAIL_IF(push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1))); + if (src1 != TMP_ZERO) + FAIL_IF(push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1))); + else + FAIL_IF(push_inst(compiler, NEG | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2))); + if (flags & ALT_SIGN_EXT) return push_inst(compiler, RLDI(dst, dst, 32, 32, 0)); return SLJIT_SUCCESS; @@ -317,12 +313,18 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm); } - if (!(flags & ALT_SET_FLAGS)) + if (!(flags & ALT_SET_FLAGS)) { + SLJIT_ASSERT(src1 != TMP_ZERO); return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1)); + } + BIN_EXTS(); if (flags & ALT_FORM5) return push_inst(compiler, SUBFC | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); - return push_inst(compiler, SUBF | RC(flags) | D(dst) | A(src2) | B(src1)); + + if (src1 != TMP_ZERO) + return push_inst(compiler, SUBF | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1)); + return push_inst(compiler, NEG | RC(ALT_SET_FLAGS) | D(dst) | A(src2)); case SLJIT_SUBC: BIN_EXTS(); @@ -432,14 +434,14 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t if (src) reg = *src & REG_MASK; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: arg_count++; break; default: @@ -453,13 +455,13 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: arg_count--; break; default: @@ -471,7 +473,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -492,10 +494,10 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_UNUSED_ARG(executable_offset); SLJIT_UPDATE_WX_FLAGS(inst, inst + 5, 0); - inst[0] = (inst[0] & 0xffff0000) | ((new_target >> 48) & 0xffff); - inst[1] = (inst[1] & 0xffff0000) | ((new_target >> 32) & 0xffff); - inst[3] = (inst[3] & 0xffff0000) | ((new_target >> 16) & 0xffff); - inst[4] = (inst[4] & 0xffff0000) | (new_target & 0xffff); + inst[0] = (inst[0] & 0xffff0000u) | ((sljit_ins)(new_target >> 48) & 0xffff); + inst[1] = (inst[1] & 0xffff0000u) | ((sljit_ins)(new_target >> 32) & 0xffff); + inst[3] = (inst[3] & 0xffff0000u) | ((sljit_ins)(new_target >> 16) & 0xffff); + inst[4] = (inst[4] & 0xffff0000u) | ((sljit_ins)new_target & 0xffff); SLJIT_UPDATE_WX_FLAGS(inst, inst + 5, 1); inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); SLJIT_CACHE_FLUSH(inst, inst + 5); @@ -503,5 +505,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativePPC_common.c b/src/3rdparty/pcre2/src/sljit/sljitNativePPC_common.c index 2174dbb0..8bfdc695 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativePPC_common.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativePPC_common.c @@ -109,32 +109,32 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 7] = { }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 1, 2, 3, 4, 5, 6, 0, 7 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 0, 13 }; /* --------------------------------------------------------------------- */ /* Instrucion forms */ /* --------------------------------------------------------------------- */ -#define D(d) (reg_map[d] << 21) -#define S(s) (reg_map[s] << 21) -#define A(a) (reg_map[a] << 16) -#define B(b) (reg_map[b] << 11) -#define C(c) (reg_map[c] << 6) -#define FD(fd) (freg_map[fd] << 21) -#define FS(fs) (freg_map[fs] << 21) -#define FA(fa) (freg_map[fa] << 16) -#define FB(fb) (freg_map[fb] << 11) -#define FC(fc) (freg_map[fc] << 6) -#define IMM(imm) ((imm) & 0xffff) -#define CRD(d) ((d) << 21) +#define D(d) ((sljit_ins)reg_map[d] << 21) +#define S(s) ((sljit_ins)reg_map[s] << 21) +#define A(a) ((sljit_ins)reg_map[a] << 16) +#define B(b) ((sljit_ins)reg_map[b] << 11) +#define C(c) ((sljit_ins)reg_map[c] << 6) +#define FD(fd) ((sljit_ins)freg_map[fd] << 21) +#define FS(fs) ((sljit_ins)freg_map[fs] << 21) +#define FA(fa) ((sljit_ins)freg_map[fa] << 16) +#define FB(fb) ((sljit_ins)freg_map[fb] << 11) +#define FC(fc) ((sljit_ins)freg_map[fc] << 6) +#define IMM(imm) ((sljit_ins)(imm) & 0xffff) +#define CRD(d) ((sljit_ins)(d) << 21) /* Instruction bit sections. OE and Rc flag (see ALT_SET_FLAGS). */ #define OE(flags) ((flags) & ALT_SET_FLAGS) /* Rc flag (see ALT_SET_FLAGS). */ #define RC(flags) (((flags) & ALT_SET_FLAGS) >> 10) -#define HI(opcode) ((opcode) << 26) -#define LO(opcode) ((opcode) << 1) +#define HI(opcode) ((sljit_ins)(opcode) << 26) +#define LO(opcode) ((sljit_ins)(opcode) << 1) #define ADD (HI(31) | LO(266)) #define ADDC (HI(31) | LO(10)) @@ -182,6 +182,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define FSUB (HI(63) | LO(20)) #define FSUBS (HI(59) | LO(20)) #define LD (HI(58) | 0) +#define LFD (HI(50)) #define LWZ (HI(32)) #define MFCR (HI(31) | LO(19)) #define MFLR (HI(31) | LO(339) | 0x80000) @@ -215,6 +216,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define STD (HI(62) | 0) #define STDU (HI(62) | 1) #define STDUX (HI(31) | LO(181)) +#define STFD (HI(54)) #define STFIWX (HI(31) | LO(983)) #define STW (HI(36)) #define STWU (HI(37)) @@ -232,15 +234,18 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define UIMM_MAX (0xffff) #define RLDI(dst, src, sh, mb, type) \ - (HI(30) | S(src) | A(dst) | ((type) << 2) | (((sh) & 0x1f) << 11) | (((sh) & 0x20) >> 4) | (((mb) & 0x1f) << 6) | ((mb) & 0x20)) + (HI(30) | S(src) | A(dst) | ((sljit_ins)(type) << 2) | (((sljit_ins)(sh) & 0x1f) << 11) \ + | (((sljit_ins)(sh) & 0x20) >> 4) | (((sljit_ins)(mb) & 0x1f) << 6) | ((sljit_ins)(mb) & 0x20)) #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_sw addr, void* func) +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func) { - sljit_sw* ptrs; + sljit_uw* ptrs; + if (func_ptr) *func_ptr = (void*)context; - ptrs = (sljit_sw*)func; + + ptrs = (sljit_uw*)func; context->addr = addr ? addr : ptrs[0]; context->r2 = ptrs[1]; context->r11 = ptrs[2]; @@ -260,7 +265,7 @@ static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_in { sljit_sw diff; sljit_uw target_addr; - sljit_sw extra_jump_flags; + sljit_uw extra_jump_flags; #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL) && (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) if (jump->flags & (SLJIT_REWRITABLE_JUMP | IS_CALL)) @@ -296,7 +301,7 @@ static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_in } extra_jump_flags = REMOVE_COND; - diff -= sizeof(sljit_ins); + diff -= SSIZE_OF(ins); } if (diff <= 0x01ffffff && diff >= -0x02000000) { @@ -349,7 +354,7 @@ static SLJIT_INLINE void put_label_set(struct sljit_put_label *put_label) { sljit_uw addr = put_label->label->addr; sljit_ins *inst = (sljit_ins *)put_label->addr; - sljit_s32 reg = *inst; + sljit_u32 reg = *inst; if (put_label->flags == 0) { SLJIT_ASSERT(addr < 0x100000000l); @@ -433,7 +438,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { /* Just recording the address. */ label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == word_count) { @@ -501,7 +506,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -511,7 +516,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil SLJIT_ASSERT(!put_label); #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) - SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size - (sizeof(struct sljit_function_context) / sizeof(sljit_ins))); + SLJIT_ASSERT(code_ptr - code <= (sljit_sw)(compiler->size - (sizeof(struct sljit_function_context) / sizeof(sljit_ins)))); #else SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size); #endif @@ -527,22 +532,22 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (!(jump->flags & PATCH_ABS_B)) { addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset); SLJIT_ASSERT((sljit_sw)addr <= 0x7fff && (sljit_sw)addr >= -0x8000); - *buf_ptr = BCx | (addr & 0xfffc) | ((*buf_ptr) & 0x03ff0001); + *buf_ptr = BCx | ((sljit_ins)addr & 0xfffc) | ((*buf_ptr) & 0x03ff0001); } else { SLJIT_ASSERT(addr <= 0xffff); - *buf_ptr = BCx | (addr & 0xfffc) | 0x2 | ((*buf_ptr) & 0x03ff0001); + *buf_ptr = BCx | ((sljit_ins)addr & 0xfffc) | 0x2 | ((*buf_ptr) & 0x03ff0001); } } else { if (!(jump->flags & PATCH_ABS_B)) { addr -= (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset); SLJIT_ASSERT((sljit_sw)addr <= 0x01ffffff && (sljit_sw)addr >= -0x02000000); - *buf_ptr = Bx | (addr & 0x03fffffc) | ((*buf_ptr) & 0x1); + *buf_ptr = Bx | ((sljit_ins)addr & 0x03fffffc) | ((*buf_ptr) & 0x1); } else { SLJIT_ASSERT(addr <= 0x03ffffff); - *buf_ptr = Bx | (addr & 0x03fffffc) | 0x2 | ((*buf_ptr) & 0x1); + *buf_ptr = Bx | ((sljit_ins)addr & 0x03fffffc) | 0x2 | ((*buf_ptr) & 0x1); } } break; @@ -550,26 +555,32 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil /* Set the fields of immediate loads. */ #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[1] |= (sljit_ins)addr & 0xffff; #else if (jump->flags & PATCH_ABS32) { SLJIT_ASSERT(addr <= 0x7fffffff); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[1] |= (sljit_ins)addr & 0xffff; break; } + if (jump->flags & PATCH_ABS48) { SLJIT_ASSERT(addr <= 0x7fffffffffff); - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 32) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[3] = (buf_ptr[3] & 0xffff0000) | (addr & 0xffff); + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 32) & 0xffff; + buf_ptr[1] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[3] |= (sljit_ins)addr & 0xffff; break; } - buf_ptr[0] = (buf_ptr[0] & 0xffff0000) | ((addr >> 48) & 0xffff); - buf_ptr[1] = (buf_ptr[1] & 0xffff0000) | ((addr >> 32) & 0xffff); - buf_ptr[3] = (buf_ptr[3] & 0xffff0000) | ((addr >> 16) & 0xffff); - buf_ptr[4] = (buf_ptr[4] & 0xffff0000) | (addr & 0xffff); + + SLJIT_ASSERT(((buf_ptr[0] | buf_ptr[1] | buf_ptr[3] | buf_ptr[4]) & 0xffff) == 0); + buf_ptr[0] |= (sljit_ins)(addr >> 48) & 0xffff; + buf_ptr[1] |= (sljit_ins)(addr >> 32) & 0xffff; + buf_ptr[3] |= (sljit_ins)(addr >> 16) & 0xffff; + buf_ptr[4] |= (sljit_ins)addr & 0xffff; #endif } while (0); jump = jump->next; @@ -592,7 +603,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_ins); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); @@ -601,7 +612,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (((sljit_sw)code_ptr) & 0x4) code_ptr++; #endif - sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_sw)code, (void*)sljit_generate_code); + sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void*)sljit_generate_code); #endif code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -696,69 +707,116 @@ ALT_FORM5 0x010000 */ #define STACK_LOAD LD #endif +#if (defined SLJIT_PPC_STACK_FRAME_V2 && SLJIT_PPC_STACK_FRAME_V2) +#define LR_SAVE_OFFSET 2 * SSIZE_OF(sw) +#else +#define LR_SAVE_OFFSET SSIZE_OF(sw) +#endif + +#define STACK_MAX_DISTANCE (0x8000 - SSIZE_OF(sw) - LR_SAVE_OFFSET) + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args, i, tmp, offs; + sljit_s32 i, tmp, base, offset; + sljit_s32 word_arg_count = 0; + sljit_s32 saved_arg_count = 0; +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) + sljit_s32 arg_count = 0; +#endif CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - FAIL_IF(push_inst(compiler, MFLR | D(0))); - offs = -(sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | S(TMP_ZERO) | A(SLJIT_SP) | IMM(offs))); + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + + GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; + compiler->local_size = local_size; - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) { - offs -= (sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | S(i) | A(SLJIT_SP) | IMM(offs))); + FAIL_IF(push_inst(compiler, MFLR | D(0))); + + base = SLJIT_SP; + offset = local_size; + + if (local_size <= STACK_MAX_DISTANCE) { +#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) + FAIL_IF(push_inst(compiler, STWU | S(SLJIT_SP) | A(SLJIT_SP) | IMM(-local_size))); +#else + FAIL_IF(push_inst(compiler, STDU | S(SLJIT_SP) | A(SLJIT_SP) | IMM(-local_size))); +#endif + } else { + base = TMP_REG1; + FAIL_IF(push_inst(compiler, OR | S(SLJIT_SP) | A(TMP_REG1) | B(SLJIT_SP))); + FAIL_IF(load_immediate(compiler, TMP_REG2, -local_size)); +#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) + FAIL_IF(push_inst(compiler, STWUX | S(SLJIT_SP) | A(SLJIT_SP) | B(TMP_REG2))); +#else + FAIL_IF(push_inst(compiler, STDUX | S(SLJIT_SP) | A(SLJIT_SP) | B(TMP_REG2))); +#endif + local_size = 0; + offset = 0; + } + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, STFD | FS(i) | A(base) | IMM(offset))); + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, STFD | FS(i) | A(base) | IMM(offset))); + } + + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | S(TMP_ZERO) | A(base) | IMM(offset))); + + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | S(i) | A(base) | IMM(offset))); } for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { - offs -= (sljit_s32)(sizeof(sljit_sw)); - FAIL_IF(push_inst(compiler, STACK_STORE | S(i) | A(SLJIT_SP) | IMM(offs))); + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_STORE | S(i) | A(base) | IMM(offset))); } - SLJIT_ASSERT(offs == -(sljit_s32)GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1)); - -#if (defined SLJIT_PPC_STACK_FRAME_V2 && SLJIT_PPC_STACK_FRAME_V2) - FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(SLJIT_SP) | IMM(2 * sizeof(sljit_sw)))); -#else - FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(SLJIT_SP) | IMM(sizeof(sljit_sw)))); -#endif - + FAIL_IF(push_inst(compiler, STACK_STORE | S(0) | A(base) | IMM(local_size + LR_SAVE_OFFSET))); FAIL_IF(push_inst(compiler, ADDI | D(TMP_ZERO) | A(0) | 0)); - args = get_arg_count(arg_types); + arg_types >>= SLJIT_ARG_SHIFT; - if (args >= 1) - FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0) | A(SLJIT_S0) | B(SLJIT_R0))); - if (args >= 2) - FAIL_IF(push_inst(compiler, OR | S(SLJIT_R1) | A(SLJIT_S1) | B(SLJIT_R1))); - if (args >= 3) - FAIL_IF(push_inst(compiler, OR | S(SLJIT_R2) | A(SLJIT_S2) | B(SLJIT_R2))); + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) + do { + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = SLJIT_S0 - saved_arg_count; + saved_arg_count++; + } else if (arg_count != word_arg_count) + tmp = SLJIT_R0 + word_arg_count; + else + break; - local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET; - local_size = (local_size + 15) & ~0xf; - compiler->local_size = local_size; - -#if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - if (local_size <= SIMM_MAX) - FAIL_IF(push_inst(compiler, STWU | S(SLJIT_SP) | A(SLJIT_SP) | IMM(-local_size))); - else { - FAIL_IF(load_immediate(compiler, 0, -local_size)); - FAIL_IF(push_inst(compiler, STWUX | S(SLJIT_SP) | A(SLJIT_SP) | B(0))); - } + FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0 + arg_count) | A(tmp) | B(SLJIT_R0 + arg_count))); + } while (0); #else - if (local_size <= SIMM_MAX) - FAIL_IF(push_inst(compiler, STDU | S(SLJIT_SP) | A(SLJIT_SP) | IMM(-local_size))); - else { - FAIL_IF(load_immediate(compiler, 0, -local_size)); - FAIL_IF(push_inst(compiler, STDUX | S(SLJIT_SP) | A(SLJIT_SP) | B(0))); - } + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0 + word_arg_count) | A(SLJIT_S0 - saved_arg_count) | B(SLJIT_R0 + word_arg_count))); + saved_arg_count++; + } #endif + word_arg_count++; + } + +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) + arg_count++; +#endif + arg_types >>= SLJIT_ARG_SHIFT; + } return SLJIT_SUCCESS; } @@ -771,54 +829,74 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET; - compiler->local_size = (local_size + 15) & ~0xf; + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + + GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, sizeof(sljit_f64)); + compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) { - sljit_s32 i, tmp, offs; + sljit_s32 i, tmp, base, offset; + sljit_s32 local_size = compiler->local_size; + base = SLJIT_SP; + if (local_size > STACK_MAX_DISTANCE) { + base = TMP_REG1; + if (local_size > 2 * STACK_MAX_DISTANCE + LR_SAVE_OFFSET) { + FAIL_IF(push_inst(compiler, STACK_LOAD | D(base) | A(SLJIT_SP) | IMM(0))); + local_size = 0; + } else { + FAIL_IF(push_inst(compiler, ADDI | D(TMP_REG1) | A(SLJIT_SP) | IMM(local_size - STACK_MAX_DISTANCE))); + local_size = STACK_MAX_DISTANCE; + } + } + + offset = local_size; + FAIL_IF(push_inst(compiler, STACK_LOAD | S(0) | A(base) | IMM(offset + LR_SAVE_OFFSET))); + + tmp = SLJIT_FS0 - compiler->fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LFD | FS(i) | A(base) | IMM(offset))); + } + + for (i = compiler->fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LFD | FS(i) | A(base) | IMM(offset))); + } + + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(TMP_ZERO) | A(base) | IMM(offset))); + + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(i) | A(base) | IMM(offset))); + } + + for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STACK_LOAD | S(i) | A(base) | IMM(offset))); + } + + push_inst(compiler, MTLR | S(0)); + + if (local_size > 0) + return push_inst(compiler, ADDI | D(SLJIT_SP) | A(base) | IMM(local_size)); + + SLJIT_ASSERT(base == TMP_REG1); + return push_inst(compiler, OR | S(base) | A(SLJIT_SP) | B(base)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); + CHECK(check_sljit_emit_return_void(compiler)); - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); - - if (compiler->local_size <= SIMM_MAX) - FAIL_IF(push_inst(compiler, ADDI | D(SLJIT_SP) | A(SLJIT_SP) | IMM(compiler->local_size))); - else { - FAIL_IF(load_immediate(compiler, 0, compiler->local_size)); - FAIL_IF(push_inst(compiler, ADD | D(SLJIT_SP) | A(SLJIT_SP) | B(0))); - } - -#if (defined SLJIT_PPC_STACK_FRAME_V2 && SLJIT_PPC_STACK_FRAME_V2) - FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(SLJIT_SP) | IMM(2 * sizeof(sljit_sw)))); -#else - FAIL_IF(push_inst(compiler, STACK_LOAD | D(0) | A(SLJIT_SP) | IMM(sizeof(sljit_sw)))); -#endif - - offs = -(sljit_s32)GET_SAVED_REGISTERS_SIZE(compiler->scratches, compiler->saveds, 1); - - tmp = compiler->scratches; - for (i = SLJIT_FIRST_SAVED_REG; i <= tmp; i++) { - FAIL_IF(push_inst(compiler, STACK_LOAD | D(i) | A(SLJIT_SP) | IMM(offs))); - offs += (sljit_s32)(sizeof(sljit_sw)); - } - - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; - for (i = tmp; i <= SLJIT_S0; i++) { - FAIL_IF(push_inst(compiler, STACK_LOAD | D(i) | A(SLJIT_SP) | IMM(offs))); - offs += (sljit_s32)(sizeof(sljit_sw)); - } - - FAIL_IF(push_inst(compiler, STACK_LOAD | D(TMP_ZERO) | A(SLJIT_SP) | IMM(offs))); - SLJIT_ASSERT(offs == -(sljit_sw)(sizeof(sljit_sw))); - - FAIL_IF(push_inst(compiler, MTLR | S(0))); - FAIL_IF(push_inst(compiler, BLR)); - - return SLJIT_SUCCESS; + FAIL_IF(emit_stack_frame_release(compiler)); + return push_inst(compiler, BLR); } #undef STACK_STORE @@ -843,11 +921,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *comp #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) #define ARCH_32_64(a, b) a #define INST_CODE_AND_DST(inst, flags, reg) \ - ((inst) | (((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg))) + ((sljit_ins)(inst) | (sljit_ins)(((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg))) #else #define ARCH_32_64(a, b) b #define INST_CODE_AND_DST(inst, flags, reg) \ - (((inst) & ~INT_ALIGNED) | (((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg))) + (((sljit_ins)(inst) & ~(sljit_ins)INT_ALIGNED) | (sljit_ins)(((flags) & MEM_MASK) <= GPR_REG ? D(reg) : FD(reg))) #endif static const sljit_ins data_transfer_insts[64 + 16] = { @@ -1000,7 +1078,7 @@ static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 inp_flag if (argw != 0) { #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(arg)) | A(tmp_reg) | (argw << 11) | ((31 - argw) << 1))); + FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(arg)) | A(tmp_reg) | ((sljit_ins)argw << 11) | ((31 - (sljit_ins)argw) << 1))); #else FAIL_IF(push_inst(compiler, RLDI(tmp_reg, OFFS_REG(arg), argw, 63 - argw, 1))); #endif @@ -1073,8 +1151,10 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 sljit_s32 flags = input_flags & (ALT_FORM1 | ALT_FORM2 | ALT_FORM3 | ALT_FORM4 | ALT_FORM5 | ALT_SIGN_EXT | ALT_SET_FLAGS); /* Destination check. */ - if (SLOW_IS_REG(dst)) { + if (FAST_IS_REG(dst)) { dst_r = dst; + /* The REG_DEST is only used by SLJIT_MOV operations, although + * it is set for op2 operations with unset destination. */ flags |= REG_DEST; if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) @@ -1087,8 +1167,11 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 flags |= REG1_SOURCE; } else if (src1 & SLJIT_IMM) { - FAIL_IF(load_immediate(compiler, TMP_REG1, src1w)); - src1_r = TMP_REG1; + src1_r = TMP_ZERO; + if (src1w != 0) { + FAIL_IF(load_immediate(compiler, TMP_REG1, src1w)); + src1_r = TMP_REG1; + } } else { FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, TMP_REG1, src1, src1w, TMP_REG1)); @@ -1104,8 +1187,11 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 dst_r = src2_r; } else if (src2 & SLJIT_IMM) { - FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w)); - src2_r = sugg_src2_r; + src2_r = TMP_ZERO; + if (src2w != 0) { + FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w)); + src2_r = sugg_src2_r; + } } else { FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, sugg_src2_r, src2, src2w, TMP_REG2)); @@ -1123,7 +1209,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) { #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - sljit_s32 int_op = op & SLJIT_I32_OP; + sljit_s32 int_op = op & SLJIT_32; #endif CHECK_ERROR(); @@ -1174,7 +1260,7 @@ static sljit_s32 emit_prefetch(struct sljit_compiler *compiler, sljit_s32 src, sljit_sw srcw) { if (!(src & OFFS_REG_MASK)) { - if (srcw == 0 && (src & REG_MASK) != SLJIT_UNUSED) + if (srcw == 0 && (src & REG_MASK)) return push_inst(compiler, DCBT | A(0) | B(src & REG_MASK)); FAIL_IF(load_immediate(compiler, TMP_REG1, srcw)); @@ -1188,7 +1274,7 @@ static sljit_s32 emit_prefetch(struct sljit_compiler *compiler, return push_inst(compiler, DCBT | A(src & REG_MASK) | B(OFFS_REG(src))); #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(src)) | A(TMP_REG1) | (srcw << 11) | ((31 - srcw) << 1))); + FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(src)) | A(TMP_REG1) | ((sljit_ins)srcw << 11) | ((31 - (sljit_ins)srcw) << 1))); #else FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, OFFS_REG(src), srcw, 63 - srcw, 1))); #endif @@ -1211,8 +1297,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(src, srcw); op = GET_OPCODE(op); - if ((src & SLJIT_IMM) && srcw == 0) - src = TMP_ZERO; if (GET_FLAG_TYPE(op_flags) == SLJIT_OVERFLOW) FAIL_IF(push_inst(compiler, MTXER | S(TMP_ZERO))); @@ -1223,7 +1307,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile } #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if (op_flags & SLJIT_I32_OP) { + if (op_flags & SLJIT_32) { if (op < SLJIT_NOT) { if (src & SLJIT_MEM) { if (op == SLJIT_MOV_S32) @@ -1245,11 +1329,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile switch (op) { case SLJIT_MOV: - case SLJIT_MOV_P: #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: #endif + case SLJIT_MOV_P: return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA, dst, dstw, TMP_REG1, 0, src, srcw); #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) @@ -1257,6 +1342,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return EMIT_MOV(SLJIT_MOV_U32, INT_DATA, (sljit_u32)); case SLJIT_MOV_S32: + case SLJIT_MOV32: return EMIT_MOV(SLJIT_MOV_S32, INT_DATA | SIGNED_DATA, (sljit_s32)); #endif @@ -1275,12 +1361,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_NOT: return emit_op(compiler, SLJIT_NOT, flags, dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_NEG: - return emit_op(compiler, SLJIT_NEG, flags | (GET_FLAG_TYPE(op_flags) ? ALT_FORM1 : 0), dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_CLZ: #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - return emit_op(compiler, SLJIT_CLZ, flags | (!(op_flags & SLJIT_I32_OP) ? 0 : ALT_FORM1), dst, dstw, TMP_REG1, 0, src, srcw); + return emit_op(compiler, SLJIT_CLZ, flags | (!(op_flags & SLJIT_32) ? 0 : ALT_FORM1), dst, dstw, TMP_REG1, 0, src, srcw); #else return emit_op(compiler, SLJIT_CLZ, flags, dst, dstw, TMP_REG1, 0, src, srcw); #endif @@ -1306,7 +1389,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #endif #define TEST_UH_IMM(src, srcw) \ - (((src) & SLJIT_IMM) && !((srcw) & ~0xffff0000)) + (((src) & SLJIT_IMM) && !((srcw) & ~(sljit_sw)0xffff0000)) #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) #define TEST_ADD_IMM(src, srcw) \ @@ -1327,13 +1410,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) #define TEST_ADD_FORM1(op) \ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \ - || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z | SLJIT_SET_CARRY)) + || (op & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_32 | SLJIT_SET_Z | SLJIT_SET_CARRY)) #define TEST_SUB_FORM2(op) \ ((GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) \ - || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z)) + || (op & (SLJIT_32 | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_32 | SLJIT_SET_Z)) #define TEST_SUB_FORM3(op) \ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \ - || (op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z)) + || (op & (SLJIT_32 | SLJIT_SET_Z)) == (SLJIT_32 | SLJIT_SET_Z)) #else #define TEST_ADD_FORM1(op) \ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW) @@ -1351,21 +1434,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 flags = HAS_FLAGS(op) ? ALT_SET_FLAGS : 0; CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - - if ((src1 & SLJIT_IMM) && src1w == 0) - src1 = TMP_ZERO; - if ((src2 & SLJIT_IMM) && src2w == 0) - src2 = TMP_ZERO; - #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if (op & SLJIT_I32_OP) { + if (op & SLJIT_32) { /* Most operations expect sign extended arguments. */ flags |= INT_DATA | SIGNED_DATA; if (src1 & SLJIT_IMM) @@ -1381,45 +1456,47 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile switch (GET_OPCODE(op)) { case SLJIT_ADD: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + if (TEST_ADD_FORM1(op)) return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM1, dst, dstw, src1, src1w, src2, src2w); if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src2, src2w, TMP_REG2, 0); } if (TEST_SH_IMM(src2, src2w)) { - compiler->imm = (src2w >> 16) & 0xffff; + compiler->imm = (sljit_ins)(src2w >> 16) & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SH_IMM(src1, src1w)) { - compiler->imm = (src1w >> 16) & 0xffff; + compiler->imm = (sljit_ins)(src1w >> 16) & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0); } /* Range between -1 and -32768 is covered above. */ if (TEST_ADD_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffffffff; + compiler->imm = (sljit_ins)src2w & 0xffffffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_ADD_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffffffff; + compiler->imm = (sljit_ins)src1w & 0xffffffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0); } } #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if ((op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z)) { + if ((op & (SLJIT_32 | SLJIT_SET_Z)) == (SLJIT_32 | SLJIT_SET_Z)) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src2, src2w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w); @@ -1427,39 +1504,42 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile #endif if (HAS_FLAGS(op)) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0); } } return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w); case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; return emit_op(compiler, SLJIT_ADDC, flags, dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUB: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + if (GET_FLAG_TYPE(op) >= SLJIT_LESS && GET_FLAG_TYPE(op) <= SLJIT_LESS_EQUAL) { - if (dst == SLJIT_UNUSED) { + if (dst == TMP_REG2) { if (TEST_UL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1, dst, dstw, src1, src1w, src2, src2w); } if ((src2 & SLJIT_IMM) && src2w >= 0 && src2w <= (SIMM_MAX + 1)) { - compiler->imm = src2w; + compiler->imm = (sljit_ins)src2w; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w); } - if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) { + if (dst == TMP_REG2 && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2, dst, dstw, src1, src1w, src2, src2w); @@ -1467,7 +1547,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile if (TEST_SUB_FORM2(op)) { if ((src2 & SLJIT_IMM) && src2w >= -SIMM_MAX && src2w <= SIMM_MAX) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w); @@ -1477,45 +1557,46 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w); if (TEST_SL_IMM(src2, -src2w)) { - compiler->imm = (-src2w) & 0xffff; + compiler->imm = (sljit_ins)(-src2w) & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | (!HAS_FLAGS(op) ? ALT_FORM2 : ALT_FORM3), dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w) && !(op & SLJIT_SET_Z)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0); } if (!HAS_FLAGS(op)) { if (TEST_SH_IMM(src2, -src2w)) { - compiler->imm = ((-src2w) >> 16) & 0xffff; + compiler->imm = (sljit_ins)((-src2w) >> 16) & 0xffff; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } /* Range between -1 and -32768 is covered above. */ if (TEST_ADD_IMM(src2, -src2w)) { - compiler->imm = -src2w & 0xffffffff; + compiler->imm = (sljit_ins)-src2w; return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0); } } - /* We know ALT_SIGN_EXT is set if it is an SLJIT_I32_OP on 64 bit systems. */ + /* We know ALT_SIGN_EXT is set if it is an SLJIT_32 on 64 bit systems. */ return emit_op(compiler, SLJIT_SUB, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; return emit_op(compiler, SLJIT_SUBC, flags, dst, dstw, src1, src1w, src2, src2w); case SLJIT_MUL: #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) flags |= ALT_FORM2; #endif if (!HAS_FLAGS(op)) { if (TEST_SL_IMM(src2, src2w)) { - compiler->imm = src2w & 0xffff; + compiler->imm = (sljit_ins)src2w & 0xffff; return emit_op(compiler, SLJIT_MUL, flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_SL_IMM(src1, src1w)) { - compiler->imm = src1w & 0xffff; + compiler->imm = (sljit_ins)src1w & 0xffff; return emit_op(compiler, SLJIT_MUL, flags | ALT_FORM1, dst, dstw, src2, src2w, TMP_REG2, 0); } } @@ -1529,30 +1610,30 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile /* Commutative unsigned operations. */ if (!HAS_FLAGS(op) || GET_OPCODE(op) == SLJIT_AND) { if (TEST_UL_IMM(src2, src2w)) { - compiler->imm = src2w; + compiler->imm = (sljit_ins)src2w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_UL_IMM(src1, src1w)) { - compiler->imm = src1w; + compiler->imm = (sljit_ins)src1w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM1, dst, dstw, src2, src2w, TMP_REG2, 0); } if (TEST_UH_IMM(src2, src2w)) { - compiler->imm = (src2w >> 16) & 0xffff; + compiler->imm = (sljit_ins)(src2w >> 16) & 0xffff; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_UH_IMM(src1, src1w)) { - compiler->imm = (src1w >> 16) & 0xffff; + compiler->imm = (sljit_ins)(src1w >> 16) & 0xffff; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM2, dst, dstw, src2, src2w, TMP_REG2, 0); } } - if (GET_OPCODE(op) != SLJIT_AND && GET_OPCODE(op) != SLJIT_AND) { - /* Unlike or and xor, and resets unwanted bits as well. */ + if (GET_OPCODE(op) != SLJIT_AND) { + /* Unlike or and xor, the and resets unwanted bits as well. */ if (TEST_UI_IMM(src2, src2w)) { - compiler->imm = src2w; + compiler->imm = (sljit_ins)src2w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0); } if (TEST_UI_IMM(src1, src1w)) { - compiler->imm = src1w; + compiler->imm = (sljit_ins)src1w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0); } } @@ -1562,11 +1643,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile case SLJIT_LSHR: case SLJIT_ASHR: #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) flags |= ALT_FORM2; #endif if (src2 & SLJIT_IMM) { - compiler->imm = src2w; + compiler->imm = (sljit_ins)src2w; return emit_op(compiler, GET_OPCODE(op), flags | ALT_FORM1, dst, dstw, src1, src1w, TMP_REG2, 0); } return emit_op(compiler, GET_OPCODE(op), flags, dst, dstw, src1, src1w, src2, src2w); @@ -1575,6 +1656,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w); +} + #undef TEST_ADD_FORM1 #undef TEST_SUB_FORM2 #undef TEST_SUB_FORM3 @@ -1621,7 +1716,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1633,8 +1728,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ -#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_F32_OP) >> 6)) -#define SELECT_FOP(op, single, double) ((op & SLJIT_F32_OP) ? single : double) +#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_32) >> 6)) +#define SELECT_FOP(op, single, double) ((sljit_ins)((op & SLJIT_32) ? single : double)) #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) #define FLOAT_TMP_MEM_OFFSET (6 * sizeof(sljit_sw)) @@ -1688,7 +1783,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp dstw &= 0x3; if (dstw) { #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) - FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(dst)) | A(TMP_REG1) | (dstw << 11) | ((31 - dstw) << 1))); + FAIL_IF(push_inst(compiler, RLWINM | S(OFFS_REG(dst)) | A(TMP_REG1) | ((sljit_ins)dstw << 11) | ((31 - (sljit_ins)dstw) << 1))); #else FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, OFFS_REG(dst), dstw, 63 - dstw, 1))); #endif @@ -1745,7 +1840,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp if (dst & SLJIT_MEM) return emit_op_mem(compiler, FLOAT_DATA(op), TMP_FREG1, dst, dstw, TMP_REG1); - if (op & SLJIT_F32_OP) + if (op & SLJIT_32) return push_inst(compiler, FRSP | FD(dst_r) | FB(dst_r)); return SLJIT_SUCCESS; @@ -1755,7 +1850,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp sljit_s32 invert_sign = 1; if (src & SLJIT_IMM) { - FAIL_IF(load_immediate(compiler, TMP_REG1, srcw ^ 0x80000000)); + FAIL_IF(load_immediate(compiler, TMP_REG1, srcw ^ (sljit_sw)0x80000000)); src = TMP_REG1; invert_sign = 0; } @@ -1783,7 +1878,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp if (dst & SLJIT_MEM) return emit_op_mem(compiler, FLOAT_DATA(op), TMP_FREG1, dst, dstw, TMP_REG1); - if (op & SLJIT_F32_OP) + if (op & SLJIT_32) return push_inst(compiler, FRSP | FD(dst_r) | FB(dst_r)); return SLJIT_SUCCESS; @@ -1815,11 +1910,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil CHECK_ERROR(); - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100) && !(DOUBLE_DATA & 0x4), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100) && !(DOUBLE_DATA & 0x4), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; @@ -1830,8 +1925,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil switch (GET_OPCODE(op)) { case SLJIT_CONV_F64_FROM_F32: - op ^= SLJIT_F32_OP; - if (op & SLJIT_F32_OP) { + op ^= SLJIT_32; + if (op & SLJIT_32) { FAIL_IF(push_inst(compiler, FRSP | FD(dst_r) | FB(src))); break; } @@ -1946,12 +2041,22 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi return label; } -static sljit_ins get_bo_bi_flags(sljit_s32 type) +static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) + return (4 << 21) | (2 << 16); + /* fallthrough */ + case SLJIT_EQUAL: return (12 << 21) | (2 << 16); + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) + return (12 << 21) | (2 << 16); + /* fallthrough */ + case SLJIT_NOT_EQUAL: return (4 << 21) | (2 << 16); @@ -2015,15 +2120,18 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_jump(compiler, type)); - bo_bi_flags = get_bo_bi_flags(type & 0xff); + bo_bi_flags = get_bo_bi_flags(compiler, type & 0xff); if (!bo_bi_flags) return NULL; jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); PTR_FAIL_IF(!jump); - set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP); + set_jump(jump, compiler, (sljit_u32)type & SLJIT_REWRITABLE_JUMP); type &= 0xff; + if (type == SLJIT_CARRY || type == SLJIT_NOT_CARRY) + PTR_FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO))); + /* In PPC, we don't need to touch the arguments. */ if (type < SLJIT_JUMP) jump->flags |= IS_COND; @@ -2049,6 +2157,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile PTR_FAIL_IF(call_with_args(compiler, arg_types, NULL)); #endif + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; @@ -2068,25 +2181,27 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi if (FAST_IS_REG(src)) { #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL) - if (type >= SLJIT_CALL) { + if (type >= SLJIT_CALL && src != TMP_CALL_REG) { FAIL_IF(push_inst(compiler, OR | S(src) | A(TMP_CALL_REG) | B(src))); src_r = TMP_CALL_REG; } else src_r = src; -#else +#else /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */ src_r = src; -#endif +#endif /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */ } else if (src & SLJIT_IMM) { /* These jumps are converted to jump/call instructions when possible. */ jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; + #if (defined SLJIT_PASS_ENTRY_ADDR_TO_CALL && SLJIT_PASS_ENTRY_ADDR_TO_CALL) if (type >= SLJIT_CALL) jump->flags |= IS_CALL; -#endif +#endif /* SLJIT_PASS_ENTRY_ADDR_TO_CALL */ + FAIL_IF(emit_const(compiler, TMP_CALL_REG, 0)); src_r = TMP_CALL_REG; } @@ -2108,13 +2223,23 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); -#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) if (src & SLJIT_MEM) { ADJUST_LOCAL_OFFSET(src, srcw); FAIL_IF(emit_op(compiler, SLJIT_MOV, WORD_DATA, TMP_CALL_REG, 0, TMP_REG1, 0, src, srcw)); src = TMP_CALL_REG; } + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0) { + FAIL_IF(push_inst(compiler, OR | S(src) | A(TMP_CALL_REG) | B(src))); + src = TMP_CALL_REG; + } + + FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP; + } + +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) FAIL_IF(call_with_args(compiler, arg_types, &src)); #endif @@ -2130,20 +2255,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co sljit_s32 dst, sljit_sw dstw, sljit_s32 type) { - sljit_s32 reg, input_flags, cr_bit, invert; + sljit_s32 reg, invert; + sljit_u32 bit, from_xer; sljit_s32 saved_op = op; sljit_sw saved_dstw = dstw; +#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) + sljit_s32 input_flags = ((op & SLJIT_32) || op == SLJIT_MOV32) ? INT_DATA : WORD_DATA; +#else + sljit_s32 input_flags = WORD_DATA; +#endif CHECK_ERROR(); CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type)); ADJUST_LOCAL_OFFSET(dst, dstw); -#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) - input_flags = (op & SLJIT_I32_OP) ? INT_DATA : WORD_DATA; -#else - input_flags = WORD_DATA; -#endif - op = GET_OPCODE(op); reg = (op < SLJIT_ADD && FAST_IS_REG(dst)) ? dst : TMP_REG2; @@ -2151,7 +2276,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co FAIL_IF(emit_op_mem(compiler, input_flags | LOAD_DATA, TMP_REG1, dst, dstw, TMP_REG1)); invert = 0; - cr_bit = 0; + bit = 0; + from_xer = 0; switch (type & 0xff) { case SLJIT_LESS: @@ -2165,66 +2291,80 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co case SLJIT_GREATER: case SLJIT_SIG_GREATER: - cr_bit = 1; + bit = 1; break; case SLJIT_LESS_EQUAL: case SLJIT_SIG_LESS_EQUAL: - cr_bit = 1; + bit = 1; invert = 1; break; case SLJIT_EQUAL: - cr_bit = 2; + bit = 2; break; case SLJIT_NOT_EQUAL: - cr_bit = 2; + bit = 2; invert = 1; break; case SLJIT_OVERFLOW: - cr_bit = 3; + from_xer = 1; + bit = 1; break; case SLJIT_NOT_OVERFLOW: - cr_bit = 3; + from_xer = 1; + bit = 1; invert = 1; break; + case SLJIT_CARRY: + from_xer = 1; + bit = 2; + invert = (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) != 0; + break; + + case SLJIT_NOT_CARRY: + from_xer = 1; + bit = 2; + invert = (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD) != 0; + break; + case SLJIT_LESS_F64: - cr_bit = 4 + 0; + bit = 4 + 0; break; case SLJIT_GREATER_EQUAL_F64: - cr_bit = 4 + 0; + bit = 4 + 0; invert = 1; break; case SLJIT_GREATER_F64: - cr_bit = 4 + 1; + bit = 4 + 1; break; case SLJIT_LESS_EQUAL_F64: - cr_bit = 4 + 1; + bit = 4 + 1; invert = 1; break; case SLJIT_EQUAL_F64: - cr_bit = 4 + 2; + bit = 4 + 2; break; case SLJIT_NOT_EQUAL_F64: - cr_bit = 4 + 2; + bit = 4 + 2; invert = 1; break; case SLJIT_UNORDERED_F64: - cr_bit = 4 + 3; + bit = 4 + 3; break; case SLJIT_ORDERED_F64: - cr_bit = 4 + 3; + bit = 4 + 3; invert = 1; break; @@ -2233,8 +2373,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co break; } - FAIL_IF(push_inst(compiler, MFCR | D(reg))); - FAIL_IF(push_inst(compiler, RLWINM | S(reg) | A(reg) | ((1 + (cr_bit)) << 11) | (31 << 6) | (31 << 1))); + FAIL_IF(push_inst(compiler, (from_xer ? MFXER : MFCR) | D(reg))); + FAIL_IF(push_inst(compiler, RLWINM | S(reg) | A(reg) | ((1 + bit) << 11) | (31 << 6) | (31 << 1))); if (invert) FAIL_IF(push_inst(compiler, XORI | S(reg) | A(reg) | 0x1)); @@ -2283,19 +2423,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compile #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: #endif mem_flags = WORD_DATA; break; #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) case SLJIT_MOV_U32: + case SLJIT_MOV32: mem_flags = INT_DATA; break; case SLJIT_MOV_S32: mem_flags = INT_DATA; - if (!(type & SLJIT_MEM_STORE) && !(type & SLJIT_I32_OP)) { + if (!(type & SLJIT_MEM_STORE) && !(type & SLJIT_32)) { if (mem & OFFS_REG_MASK) mem_flags |= SIGNED_DATA; else @@ -2436,7 +2578,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label* sljit_emit_put_label(struct slj #if (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) PTR_FAIL_IF(emit_const(compiler, dst_r, 0)); #else - PTR_FAIL_IF(push_inst(compiler, dst_r)); + PTR_FAIL_IF(push_inst(compiler, (sljit_ins)dst_r)); compiler->size += 4; #endif diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c b/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c index 716491ec..8eef910c 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeS390X.c @@ -44,6 +44,9 @@ typedef sljit_uw sljit_ins; /* Instruction tags (most significant halfword). */ static const sljit_ins sljit_ins_const = (sljit_ins)1 << 48; +#define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2) +#define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3) + static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 4] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1 }; @@ -97,20 +100,37 @@ static const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stac * link register doesn't need to change */ +/* When reg cannot be unused. */ +#define IS_GPR_REG(reg) ((reg > 0) && (reg) <= SLJIT_SP) + /* Link registers. The normal link register is r14, but since we use that for flags we need to use r0 instead to do fast calls so that flags are preserved. */ static const sljit_gpr link_r = 14; /* r14 */ static const sljit_gpr fast_link_r = 0; /* r0 */ -/* Flag register layout: +#define TMP_FREG1 (0) - 0 32 33 34 36 64 - +---------------+---+---+-------+-------+ - | ZERO | 0 | 0 | C C |///////| - +---------------+---+---+-------+-------+ -*/ -static const sljit_gpr flag_r = 14; /* r14 */ +static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { + 1, 0, 2, 4, 6, 3, 5, 7, 15, 14, 13, 12, 11, 10, 9, 8, +}; + +#define R0A(r) (r) +#define R4A(r) ((r) << 4) +#define R8A(r) ((r) << 8) +#define R12A(r) ((r) << 12) +#define R16A(r) ((r) << 16) +#define R20A(r) ((r) << 20) +#define R28A(r) ((r) << 28) +#define R32A(r) ((r) << 32) +#define R36A(r) ((r) << 36) + +#define R0(r) ((sljit_ins)reg_map[r]) + +#define F0(r) ((sljit_ins)freg_map[r]) +#define F4(r) (R4A((sljit_ins)freg_map[r])) +#define F20(r) (R20A((sljit_ins)freg_map[r])) +#define F36(r) (R36A((sljit_ins)freg_map[r])) struct sljit_s390x_const { struct sljit_const const_; /* must be first */ @@ -124,19 +144,25 @@ static SLJIT_INLINE sljit_gpr gpr(sljit_s32 r) return reg_map[r]; } +static SLJIT_INLINE sljit_gpr fgpr(sljit_s32 r) +{ + SLJIT_ASSERT(r >= 0 && r < (sljit_s32)(sizeof(freg_map) / sizeof(freg_map[0]))); + return freg_map[r]; +} + /* Size of instruction in bytes. Tags must already be cleared. */ static SLJIT_INLINE sljit_uw sizeof_ins(sljit_ins ins) { /* keep faulting instructions */ if (ins == 0) - return 2; + return 2; if ((ins & 0x00000000ffffL) == ins) - return 2; + return 2; if ((ins & 0x0000ffffffffL) == ins) - return 4; + return 4; if ((ins & 0xffffffffffffL) == ins) - return 6; + return 6; SLJIT_UNREACHABLE(); return (sljit_uw)-1; @@ -172,7 +198,8 @@ static sljit_s32 encode_inst(void **ptr, sljit_ins ins) } #define SLJIT_ADD_SUB_NO_COMPARE(status_flags_state) \ - (((status_flags_state) & (SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE)) == SLJIT_CURRENT_FLAGS_ADD_SUB) + (((status_flags_state) & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB)) \ + && !((status_flags_state) & SLJIT_CURRENT_FLAGS_COMPARE)) /* Map the given type to a 4-bit condition code mask. */ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 type) { @@ -191,6 +218,7 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t return (cc0 | cc3); return (cc0 | cc2); } + /* fallthrough */ case SLJIT_EQUAL_F64: return cc0; @@ -204,6 +232,7 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t return (cc1 | cc2); return (cc1 | cc3); } + /* fallthrough */ case SLJIT_NOT_EQUAL_F64: return (cc1 | cc2 | cc3); @@ -228,10 +257,20 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t case SLJIT_LESS_F64: return cc1; + case SLJIT_NOT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) + return (cc2 | cc3); + /* fallthrough */ + case SLJIT_SIG_LESS_EQUAL: case SLJIT_LESS_EQUAL_F64: return (cc0 | cc1); + case SLJIT_CARRY: + if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) + return (cc0 | cc1); + /* fallthrough */ + case SLJIT_SIG_GREATER: /* Overflow is considered greater, see SLJIT_SUB. */ return cc2 | cc3; @@ -242,6 +281,7 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t case SLJIT_OVERFLOW: if (compiler->status_flags_state & SLJIT_SET_Z) return (cc2 | cc3); + /* fallthrough */ case SLJIT_UNORDERED_F64: return cc3; @@ -249,6 +289,7 @@ static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 t case SLJIT_NOT_OVERFLOW: if (compiler->status_flags_state & SLJIT_SET_Z) return (cc0 | cc1); + /* fallthrough */ case SLJIT_ORDERED_F64: return (cc0 | cc1 | cc2); @@ -444,7 +485,7 @@ SLJIT_S390X_RR(or, 0x1600) #define SLJIT_S390X_RRE(name, pattern) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \ { \ - return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \ + return (pattern) | R4A(dst) | R0A(src); \ } /* AND */ @@ -504,7 +545,7 @@ SLJIT_S390X_RRE(sgr, 0xb9090000) #define SLJIT_S390X_RIA(name, pattern, imm_type) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \ { \ - return (pattern) | ((reg & 0xf) << 20) | (imm & 0xffff); \ + return (pattern) | R20A(reg) | (imm & 0xffff); \ } /* ADD HALFWORD IMMEDIATE */ @@ -534,7 +575,7 @@ SLJIT_S390X_RIA(oilh, 0xa50a0000, sljit_u16) SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \ { \ SLJIT_ASSERT(have_eimm()); \ - return (pattern) | ((sljit_ins)(reg & 0xf) << 36) | (imm & 0xffffffff); \ + return (pattern) | R36A(reg) | ((sljit_ins)imm & 0xffffffffu); \ } /* ADD IMMEDIATE */ @@ -567,17 +608,11 @@ SLJIT_S390X_RILA(slfi, 0xc20500000000, sljit_u32) /* RX-a form instructions */ #define SLJIT_S390X_RXA(name, pattern) \ -SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_u16 d, sljit_gpr x, sljit_gpr b) \ +SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b) \ { \ - sljit_ins ri, xi, bi, di; \ -\ SLJIT_ASSERT((d & 0xfff) == d); \ - ri = (sljit_ins)(r & 0xf) << 20; \ - xi = (sljit_ins)(x & 0xf) << 16; \ - bi = (sljit_ins)(b & 0xf) << 12; \ - di = (sljit_ins)(d & 0xfff); \ \ - return (pattern) | ri | xi | bi | di; \ + return (pattern) | R20A(r) | R16A(x) | R12A(b) | (sljit_ins)(d & 0xfff); \ } /* LOAD */ @@ -607,15 +642,9 @@ SLJIT_S390X_RXA(sth, 0x40000000) #define SLJIT_S390X_RXYA(name, pattern, cond) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b) \ { \ - sljit_ins ri, xi, bi, di; \ -\ SLJIT_ASSERT(cond); \ - ri = (sljit_ins)(r & 0xf) << 36; \ - xi = (sljit_ins)(x & 0xf) << 32; \ - bi = (sljit_ins)(b & 0xf) << 28; \ - di = disp_s20(d); \ \ - return (pattern) | ri | xi | bi | di; \ + return (pattern) | R36A(r) | R32A(x) | R28A(b) | disp_s20(d); \ } /* LOAD */ @@ -660,17 +689,11 @@ SLJIT_S390X_RXYA(sthy, 0xe30000000070, have_ldisp()) /* RSY-a instructions */ #define SLJIT_S390X_RSYA(name, pattern, cond) \ -SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gpr b) \ +SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_s32 d, sljit_gpr b) \ { \ - sljit_ins r1, r3, b2, d2; \ -\ SLJIT_ASSERT(cond); \ - r1 = (sljit_ins)(dst & 0xf) << 36; \ - r3 = (sljit_ins)(src & 0xf) << 32; \ - b2 = (sljit_ins)(b & 0xf) << 28; \ - d2 = disp_s20(d); \ \ - return (pattern) | r1 | r3 | b2 | d2; \ + return (pattern) | R36A(dst) | R32A(src) | R28A(b) | disp_s20(d); \ } /* LOAD MULTIPLE */ @@ -691,16 +714,14 @@ SLJIT_S390X_RSYA(stmg, 0xeb0000000024, 1) #define SLJIT_S390X_RIEF(name, pattern) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_u8 start, sljit_u8 end, sljit_u8 rot) \ { \ - sljit_ins r1, r2, i3, i4, i5; \ + sljit_ins i3, i4, i5; \ \ SLJIT_ASSERT(have_genext()); \ - r1 = (sljit_ins)(dst & 0xf) << 36; \ - r2 = (sljit_ins)(src & 0xf) << 32; \ i3 = (sljit_ins)start << 24; \ i4 = (sljit_ins)end << 16; \ i5 = (sljit_ins)rot << 8; \ \ - return (pattern) | r1 | r2 | i3 | i4 | i5; \ + return (pattern) | R36A(dst & 0xf) | R32A(src & 0xf) | i3 | i4 | i5; \ } /* ROTATE THEN AND SELECTED BITS */ @@ -728,14 +749,12 @@ SLJIT_S390X_RIEF(risbhg, 0xec000000005d) #define SLJIT_S390X_RRFC(name, pattern) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_uw mask) \ { \ - sljit_ins r1, r2, m3; \ + sljit_ins m3; \ \ SLJIT_ASSERT(have_lscond1()); \ - r1 = (sljit_ins)(dst & 0xf) << 4; \ - r2 = (sljit_ins)(src & 0xf); \ m3 = (sljit_ins)(mask & 0xf) << 12; \ \ - return (pattern) | m3 | r1 | r2; \ + return (pattern) | m3 | R4A(dst) | R0A(src); \ } /* LOAD HALFWORD IMMEDIATE ON CONDITION */ @@ -748,14 +767,13 @@ SLJIT_S390X_RRFC(locgr, 0xb9e20000) #define SLJIT_S390X_RIEG(name, pattern) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw imm, sljit_uw mask) \ { \ - sljit_ins r1, m3, i2; \ + sljit_ins m3, i2; \ \ SLJIT_ASSERT(have_lscond2()); \ - r1 = (sljit_ins)(reg & 0xf) << 36; \ m3 = (sljit_ins)(mask & 0xf) << 32; \ i2 = (sljit_ins)(imm & 0xffffL) << 16; \ \ - return (pattern) | r1 | m3 | i2; \ + return (pattern) | R36A(reg) | m3 | i2; \ } /* LOAD HALFWORD IMMEDIATE ON CONDITION */ @@ -767,13 +785,9 @@ SLJIT_S390X_RIEG(locghi, 0xec0000000046) #define SLJIT_S390X_RILB(name, pattern, cond) \ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw ri) \ { \ - sljit_ins r1, ri2; \ -\ SLJIT_ASSERT(cond); \ - r1 = (sljit_ins)(reg & 0xf) << 36; \ - ri2 = (sljit_ins)(ri & 0xffffffff); \ \ - return (pattern) | r1 | ri2; \ + return (pattern) | R36A(reg) | (sljit_ins)(ri & 0xffffffff); \ } /* BRANCH RELATIVE AND SAVE LONG */ @@ -808,22 +822,20 @@ SLJIT_S390X_INSTRUCTION(brcl, sljit_uw mask, sljit_sw target) SLJIT_S390X_INSTRUCTION(flogr, sljit_gpr dst, sljit_gpr src) { - sljit_ins r1 = ((sljit_ins)dst & 0xf) << 8; - sljit_ins r2 = ((sljit_ins)src & 0xf); SLJIT_ASSERT(have_eimm()); - return 0xb9830000 | r1 | r2; + return 0xb9830000 | R8A(dst) | R0A(src); } /* INSERT PROGRAM MASK */ SLJIT_S390X_INSTRUCTION(ipm, sljit_gpr dst) { - return 0xb2220000 | ((sljit_ins)(dst & 0xf) << 4); + return 0xb2220000 | R4A(dst); } /* SET PROGRAM MASK */ SLJIT_S390X_INSTRUCTION(spm, sljit_gpr dst) { - return 0x0400 | ((sljit_ins)(dst & 0xf) << 4); + return 0x0400 | R4A(dst); } /* ROTATE THEN INSERT SELECTED BITS HIGH (ZERO) */ @@ -842,12 +854,12 @@ static sljit_s32 update_zero_overflow(struct sljit_compiler *compiler, sljit_s32 1 (non-zero and no overflow) : unchanged 2 (zero and overflow) : decreased by 1 3 (non-zero and overflow) : decreased by 1 if non-zero */ - FAIL_IF(push_inst(compiler, brc(0xc, 2 + 2 + ((op & SLJIT_I32_OP) ? 1 : 2) + 2 + 3 + 1))); - FAIL_IF(push_inst(compiler, ipm(flag_r))); - FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r))); + FAIL_IF(push_inst(compiler, brc(0xc, 2 + 2 + ((op & SLJIT_32) ? 1 : 2) + 2 + 3 + 1))); + FAIL_IF(push_inst(compiler, ipm(tmp1))); + FAIL_IF(push_inst(compiler, (op & SLJIT_32) ? or(dst_r, dst_r) : ogr(dst_r, dst_r))); FAIL_IF(push_inst(compiler, brc(0x8, 2 + 3))); - FAIL_IF(push_inst(compiler, slfi(flag_r, 0x10000000))); - FAIL_IF(push_inst(compiler, spm(flag_r))); + FAIL_IF(push_inst(compiler, slfi(tmp1, 0x10000000))); + FAIL_IF(push_inst(compiler, spm(tmp1))); return SLJIT_SUCCESS; } @@ -858,16 +870,16 @@ static sljit_s32 push_load_imm_inst(struct sljit_compiler *compiler, sljit_gpr t if (is_s16(v)) return push_inst(compiler, lghi(target, (sljit_s16)v)); - if ((sljit_uw)v == (v & 0x000000000000ffffU)) + if (((sljit_uw)v & ~(sljit_uw)0x000000000000ffff) == 0) return push_inst(compiler, llill(target, (sljit_u16)v)); - if ((sljit_uw)v == (v & 0x00000000ffff0000U)) + if (((sljit_uw)v & ~(sljit_uw)0x00000000ffff0000) == 0) return push_inst(compiler, llilh(target, (sljit_u16)(v >> 16))); - if ((sljit_uw)v == (v & 0x0000ffff00000000U)) + if (((sljit_uw)v & ~(sljit_uw)0x0000ffff00000000) == 0) return push_inst(compiler, llihl(target, (sljit_u16)(v >> 32))); - if ((sljit_uw)v == (v & 0xffff000000000000U)) + if (((sljit_uw)v & ~(sljit_uw)0xffff000000000000) == 0) return push_inst(compiler, llihh(target, (sljit_u16)(v >> 48))); /* 6 byte instructions (requires extended immediate facility) */ @@ -875,15 +887,16 @@ static sljit_s32 push_load_imm_inst(struct sljit_compiler *compiler, sljit_gpr t if (is_s32(v)) return push_inst(compiler, lgfi(target, (sljit_s32)v)); - if ((sljit_uw)v == (v & 0x00000000ffffffffU)) + if (((sljit_uw)v >> 32) == 0) return push_inst(compiler, llilf(target, (sljit_u32)v)); - if ((sljit_uw)v == (v & 0xffffffff00000000U)) - return push_inst(compiler, llihf(target, (sljit_u32)(v >> 32))); + if (((sljit_uw)v << 32) == 0) + return push_inst(compiler, llihf(target, (sljit_u32)((sljit_uw)v >> 32))); FAIL_IF(push_inst(compiler, llilf(target, (sljit_u32)v))); return push_inst(compiler, iihf(target, (sljit_u32)(v >> 32))); } + /* TODO(mundaym): instruction sequences that don't use extended immediates */ abort(); } @@ -891,7 +904,7 @@ static sljit_s32 push_load_imm_inst(struct sljit_compiler *compiler, sljit_gpr t struct addr { sljit_gpr base; sljit_gpr index; - sljit_sw offset; + sljit_s32 offset; }; /* transform memory operand into D(X,B) form with a signed 20-bit offset */ @@ -911,7 +924,7 @@ static sljit_s32 make_addr_bxy(struct sljit_compiler *compiler, if (off != 0) { /* shift and put the result into tmp */ SLJIT_ASSERT(0 <= off && off < 64); - FAIL_IF(push_inst(compiler, sllg(tmp, index, off, 0))); + FAIL_IF(push_inst(compiler, sllg(tmp, index, (sljit_s32)off, 0))); index = tmp; off = 0; /* clear offset */ } @@ -923,7 +936,7 @@ static sljit_s32 make_addr_bxy(struct sljit_compiler *compiler, } addr->base = base; addr->index = index; - addr->offset = off; + addr->offset = (sljit_s32)off; return SLJIT_SUCCESS; } @@ -944,7 +957,7 @@ static sljit_s32 make_addr_bx(struct sljit_compiler *compiler, if (off != 0) { /* shift and put the result into tmp */ SLJIT_ASSERT(0 <= off && off < 64); - FAIL_IF(push_inst(compiler, sllg(tmp, index, off, 0))); + FAIL_IF(push_inst(compiler, sllg(tmp, index, (sljit_s32)off, 0))); index = tmp; off = 0; /* clear offset */ } @@ -956,7 +969,7 @@ static sljit_s32 make_addr_bx(struct sljit_compiler *compiler, } addr->base = base; addr->index = index; - addr->offset = off; + addr->offset = (sljit_s32)off; return SLJIT_SUCCESS; } @@ -1014,16 +1027,16 @@ static sljit_s32 emit_move(struct sljit_compiler *compiler, sljit_gpr dst_r, sljit_s32 src, sljit_sw srcw) { - SLJIT_ASSERT(!SLOW_IS_REG(src) || dst_r != gpr(src & REG_MASK)); + SLJIT_ASSERT(!IS_GPR_REG(src) || dst_r != gpr(src & REG_MASK)); if (src & SLJIT_IMM) return push_load_imm_inst(compiler, dst_r, srcw); if (src & SLJIT_MEM) - return load_word(compiler, dst_r, src, srcw, (compiler->mode & SLJIT_I32_OP) != 0); + return load_word(compiler, dst_r, src, srcw, (compiler->mode & SLJIT_32) != 0); sljit_gpr src_r = gpr(src & REG_MASK); - return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, src_r) : lgr(dst_r, src_r)); + return push_inst(compiler, (compiler->mode & SLJIT_32) ? lr(dst_r, src_r) : lgr(dst_r, src_r)); } static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins, @@ -1035,8 +1048,8 @@ static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins, sljit_gpr src_r = tmp1; sljit_s32 needs_move = 1; - if (SLOW_IS_REG(dst)) { - dst_r = gpr(dst & REG_MASK); + if (FAST_IS_REG(dst)) { + dst_r = gpr(dst); if (dst == src1) needs_move = 0; @@ -1050,17 +1063,32 @@ static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins, FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); if (FAST_IS_REG(src2)) - src_r = gpr(src2 & REG_MASK); + src_r = gpr(src2); else FAIL_IF(emit_move(compiler, tmp1, src2, src2w)); - FAIL_IF(push_inst(compiler, ins | (dst_r << 4) | src_r)); + FAIL_IF(push_inst(compiler, ins | R4A(dst_r) | R0A(src_r))); if (needs_move != 2) return SLJIT_SUCCESS; dst_r = gpr(dst & REG_MASK); - return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); + return push_inst(compiler, (compiler->mode & SLJIT_32) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); +} + +static sljit_s32 emit_rr1(struct sljit_compiler *compiler, sljit_ins ins, + sljit_s32 dst, + sljit_s32 src1, sljit_sw src1w) +{ + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst) : tmp0; + sljit_gpr src_r = tmp1; + + if (FAST_IS_REG(src1)) + src_r = gpr(src1); + else + FAIL_IF(emit_move(compiler, tmp1, src1, src1w)); + + return push_inst(compiler, ins | R4A(dst_r) | R0A(src_r)); } static sljit_s32 emit_rrf(struct sljit_compiler *compiler, sljit_ins ins, @@ -1068,21 +1096,21 @@ static sljit_s32 emit_rrf(struct sljit_compiler *compiler, sljit_ins ins, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; sljit_gpr src1_r = tmp0; sljit_gpr src2_r = tmp1; if (FAST_IS_REG(src1)) - src1_r = gpr(src1 & REG_MASK); + src1_r = gpr(src1); else FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); if (FAST_IS_REG(src2)) - src2_r = gpr(src2 & REG_MASK); + src2_r = gpr(src2); else FAIL_IF(emit_move(compiler, tmp1, src2, src2w)); - return push_inst(compiler, ins | (dst_r << 4) | src1_r | (src2_r << 12)); + return push_inst(compiler, ins | R4A(dst_r) | R0A(src1_r) | R12A(src2_r)); } typedef enum { @@ -1099,8 +1127,8 @@ static sljit_s32 emit_ri(struct sljit_compiler *compiler, sljit_ins ins, sljit_gpr dst_r = tmp0; sljit_s32 needs_move = 1; - if (SLOW_IS_REG(dst)) { - dst_r = gpr(dst & REG_MASK); + if (FAST_IS_REG(dst)) { + dst_r = gpr(dst); if (dst == src1) needs_move = 0; @@ -1110,8 +1138,8 @@ static sljit_s32 emit_ri(struct sljit_compiler *compiler, sljit_ins ins, FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); if (type == RIL_A) - return push_inst(compiler, ins | (dst_r << 36) | (src2w & 0xffffffff)); - return push_inst(compiler, ins | (dst_r << 20) | (src2w & 0xffff)); + return push_inst(compiler, ins | R36A(dst_r) | (src2w & 0xffffffff)); + return push_inst(compiler, ins | R20A(dst_r) | (src2w & 0xffff)); } static sljit_s32 emit_rie_d(struct sljit_compiler *compiler, sljit_ins ins, @@ -1119,15 +1147,15 @@ static sljit_s32 emit_rie_d(struct sljit_compiler *compiler, sljit_ins ins, sljit_s32 src1, sljit_sw src1w, sljit_sw src2w) { - sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst) : tmp0; sljit_gpr src_r = tmp0; - if (!SLOW_IS_REG(src1)) + if (!FAST_IS_REG(src1)) FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); else src_r = gpr(src1 & REG_MASK); - return push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (src2w & 0xffff) << 16); + return push_inst(compiler, ins | R36A(dst_r) | R32A(src_r) | (sljit_ins)(src2w & 0xffff) << 16); } typedef enum { @@ -1147,7 +1175,7 @@ static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins, SLJIT_ASSERT(src2 & SLJIT_MEM); - if (SLOW_IS_REG(dst)) { + if (FAST_IS_REG(dst)) { dst_r = gpr(dst); if (dst == src1) @@ -1183,9 +1211,9 @@ static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins, } if (type == RX_A) - ins |= (dst_r << 20) | (index << 16) | (base << 12) | src2w; + ins |= R20A(dst_r) | R16A(index) | R12A(base) | (sljit_ins)src2w; else - ins |= (dst_r << 36) | (index << 32) | (base << 28) | disp_s20(src2w); + ins |= R36A(dst_r) | R32A(index) | R28A(base) | disp_s20((sljit_s32)src2w); FAIL_IF(push_inst(compiler, ins)); @@ -1193,7 +1221,7 @@ static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins, return SLJIT_SUCCESS; dst_r = gpr(dst); - return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); + return push_inst(compiler, (compiler->mode & SLJIT_32) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0)); } static sljit_s32 emit_siy(struct sljit_compiler *compiler, sljit_ins ins, @@ -1226,7 +1254,7 @@ static sljit_s32 emit_siy(struct sljit_compiler *compiler, sljit_ins ins, else dst_r = gpr(dst & REG_MASK); - return push_inst(compiler, ins | ((srcw & 0xff) << 32) | (dst_r << 28) | disp_s20(dstw)); + return push_inst(compiler, ins | ((sljit_ins)(srcw & 0xff) << 32) | R28A(dst_r) | disp_s20((sljit_s32)dstw)); } struct ins_forms { @@ -1240,7 +1268,7 @@ struct ins_forms { }; static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { @@ -1250,7 +1278,7 @@ static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct if ((src1 | src2) & SLJIT_MEM) { sljit_ins ins12, ins20; - if (mode & SLJIT_I32_OP) { + if (mode & SLJIT_32) { ins12 = forms->op; ins20 = forms->op_y; } @@ -1297,7 +1325,7 @@ static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct } } - if (mode & SLJIT_I32_OP) { + if (mode & SLJIT_32) { ins = forms->op_r; ins_k = forms->op_rk; } @@ -1308,7 +1336,7 @@ static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct SLJIT_ASSERT(ins != 0 || ins_k != 0); - if (ins && SLOW_IS_REG(dst)) { + if (ins && FAST_IS_REG(dst)) { if (dst == src1) return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w); @@ -1323,7 +1351,7 @@ static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct } static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { @@ -1333,7 +1361,7 @@ static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const str if (src2 & SLJIT_MEM) { sljit_ins ins12, ins20; - if (mode & SLJIT_I32_OP) { + if (mode & SLJIT_32) { ins12 = forms->op; ins20 = forms->op_y; } @@ -1354,10 +1382,10 @@ static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const str return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A); } - ins = (mode & SLJIT_I32_OP) ? forms->op_rk : forms->op_grk; + ins = (mode & SLJIT_32) ? forms->op_rk : forms->op_grk; - if (ins == 0 || (SLOW_IS_REG(dst) && dst == src1)) - return emit_rr(compiler, (mode & SLJIT_I32_OP) ? forms->op_r : forms->op_gr, dst, src1, src1w, src2, src2w); + if (ins == 0 || (FAST_IS_REG(dst) && dst == src1)) + return emit_rr(compiler, (mode & SLJIT_32) ? forms->op_r : forms->op_gr, dst, src1, src1w, src2, src2w); return emit_rrf(compiler, ins, dst, src1, src1w, src2, src2w); } @@ -1376,9 +1404,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil struct sljit_memory_fragment *buf; void *code, *code_ptr; sljit_uw *pool, *pool_ptr; - - sljit_uw source; - sljit_sw offset; /* TODO(carenas): only need 32 bit */ + sljit_sw source, offset; /* TODO(carenas): only need 32 bit */ CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_generate_code(compiler)); @@ -1489,38 +1515,41 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil ins &= ~sljit_ins_const; /* update instruction with relative address of constant */ - source = (sljit_uw)code_ptr; - offset = (sljit_uw)pool_ptr - source; + source = (sljit_sw)code_ptr; + offset = (sljit_sw)pool_ptr - source; + SLJIT_ASSERT(!(offset & 1)); offset >>= 1; /* halfword (not byte) offset */ SLJIT_ASSERT(is_s32(offset)); + ins |= (sljit_ins)offset & 0xffffffff; /* update address */ const_->const_.addr = (sljit_uw)pool_ptr; /* store initial value into pool and update pool address */ - *(pool_ptr++) = const_->init_value; + *(pool_ptr++) = (sljit_uw)const_->init_value; /* move to next constant */ const_ = (struct sljit_s390x_const *)const_->const_.next; } if (jump && jump->addr == j) { - sljit_sw target = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target; + sljit_sw target = (sljit_sw)((jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target); if ((jump->flags & SLJIT_REWRITABLE_JUMP) || (jump->flags & JUMP_ADDR)) { jump->addr = (sljit_uw)pool_ptr; /* load address into tmp1 */ - source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - offset = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source; + source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + offset = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source; + SLJIT_ASSERT(!(offset & 1)); offset >>= 1; SLJIT_ASSERT(is_s32(offset)); - encode_inst(&code_ptr, - lgrl(tmp1, offset & 0xffffffff)); + + encode_inst(&code_ptr, lgrl(tmp1, offset & 0xffffffff)); /* store jump target into pool and update pool address */ - *(pool_ptr++) = target; + *(pool_ptr++) = (sljit_uw)target; /* branch to tmp1 */ sljit_ins op = (ins >> 32) & 0xf; @@ -1538,7 +1567,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil } else { jump->addr = (sljit_uw)code_ptr + 2; - source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); offset = target - source; /* offset must be halfword aligned */ @@ -1552,14 +1581,14 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil jump = jump->next; } if (put_label && put_label->addr == j) { - source = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + source = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); SLJIT_ASSERT(put_label->label); put_label->addr = (sljit_uw)code_ptr; /* store target into pool */ *pool_ptr = put_label->label->addr; - offset = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source; + offset = (sljit_sw)SLJIT_ADD_EXEC_OFFSET(pool_ptr, executable_offset) - source; pool_ptr++; SLJIT_ASSERT(!(offset & 1)); @@ -1594,7 +1623,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) case SLJIT_HAS_CMOV: return have_lscond1() ? 1 : 0; case SLJIT_HAS_FPU: - return 0; + return 1; } return 0; } @@ -1607,36 +1636,67 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { - sljit_s32 args = get_arg_count(arg_types); - sljit_sw frame_size; + sljit_s32 word_arg_count = 0; + sljit_s32 offset, i, tmp; CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - /* saved registers go in callee allocated save area */ - compiler->local_size = (local_size + 0xf) & ~0xf; - frame_size = compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE; + /* Saved registers are stored in callee allocated save area. */ + SLJIT_ASSERT(gpr(SLJIT_FIRST_SAVED_REG) == r6 && gpr(SLJIT_S0) == r13); - FAIL_IF(push_inst(compiler, stmg(r6, r15, r6 * sizeof(sljit_sw), r15))); /* save registers TODO(MGM): optimize */ - if (frame_size != 0) { - if (is_s16(-frame_size)) - FAIL_IF(push_inst(compiler, aghi(r15, -((sljit_s16)frame_size)))); - else if (is_s32(-frame_size)) - FAIL_IF(push_inst(compiler, agfi(r15, -((sljit_s32)frame_size)))); - else { - FAIL_IF(push_load_imm_inst(compiler, tmp1, -frame_size)); - FAIL_IF(push_inst(compiler, la(r15, 0, tmp1, r15))); + offset = 2 * SSIZE_OF(sw); + if (saveds + scratches >= SLJIT_NUMBER_OF_REGISTERS) { + FAIL_IF(push_inst(compiler, stmg(r6, r14, offset, r15))); /* save registers TODO(MGM): optimize */ + offset += 9 * SSIZE_OF(sw); + } else { + if (scratches == SLJIT_FIRST_SAVED_REG) { + FAIL_IF(push_inst(compiler, stg(r6, offset, 0, r15))); + offset += SSIZE_OF(sw); + } else if (scratches > SLJIT_FIRST_SAVED_REG) { + FAIL_IF(push_inst(compiler, stmg(r6, r6 + (sljit_gpr)(scratches - SLJIT_FIRST_SAVED_REG), offset, r15))); + offset += (scratches - (SLJIT_FIRST_SAVED_REG - 1)) * SSIZE_OF(sw); + } + + if (saveds == 0) { + FAIL_IF(push_inst(compiler, stg(r14, offset, 0, r15))); + offset += SSIZE_OF(sw); + } else { + FAIL_IF(push_inst(compiler, stmg(r14 - (sljit_gpr)saveds, r14, offset, r15))); + offset += (saveds + 1) * SSIZE_OF(sw); } } - if (args >= 1) - FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S0), gpr(SLJIT_R0)))); - if (args >= 2) - FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S1), gpr(SLJIT_R1)))); - if (args >= 3) - FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S2), gpr(SLJIT_R2)))); - SLJIT_ASSERT(args < 4); + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + FAIL_IF(push_inst(compiler, 0x60000000 /* std */ | F20(i) | R12A(r15) | (sljit_ins)offset)); + offset += SSIZE_OF(sw); + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + FAIL_IF(push_inst(compiler, 0x60000000 /* std */ | F20(i) | R12A(r15) | (sljit_ins)offset)); + offset += SSIZE_OF(sw); + } + + local_size = (local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE + 0xf) & ~0xf; + compiler->local_size = local_size; + + FAIL_IF(push_inst(compiler, 0xe30000000071 /* lay */ | R36A(r15) | R28A(r15) | disp_s20(-local_size))); + + arg_types >>= SLJIT_ARG_SHIFT; + tmp = 0; + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, lgr(gpr(SLJIT_S0 - tmp), gpr(SLJIT_R0 + word_arg_count)))); + tmp++; + } + word_arg_count++; + } + + arg_types >>= SLJIT_ARG_SHIFT; + } return SLJIT_SUCCESS; } @@ -1649,37 +1709,67 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - /* TODO(mundaym): stack space for saved floating point registers */ - compiler->local_size = (local_size + 0xf) & ~0xf; + compiler->local_size = (local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE + 0xf) & ~0xf; return SLJIT_SUCCESS; } -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) { - sljit_sw size; - sljit_gpr end; + sljit_s32 offset, i, tmp; + sljit_s32 local_size = compiler->local_size; + sljit_s32 saveds = compiler->saveds; + sljit_s32 scratches = compiler->scratches; - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); - - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); - - size = compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE + (r6 * sizeof(sljit_sw)); - if (!is_s20(size)) { - FAIL_IF(push_load_imm_inst(compiler, tmp1, compiler->local_size + SLJIT_S390X_DEFAULT_STACK_FRAME_SIZE)); - FAIL_IF(push_inst(compiler, la(r15, 0, tmp1, r15))); - size = r6 * sizeof(sljit_sw); - end = r14; /* r15 has been restored already */ - } + if (is_u12(local_size)) + FAIL_IF(push_inst(compiler, 0x41000000 /* ly */ | R20A(r15) | R12A(r15) | (sljit_ins)local_size)); else - end = r15; + FAIL_IF(push_inst(compiler, 0xe30000000071 /* lay */ | R36A(r15) | R28A(r15) | disp_s20(local_size))); - FAIL_IF(push_inst(compiler, lmg(r6, end, size, r15))); /* restore registers TODO(MGM): optimize */ - FAIL_IF(push_inst(compiler, br(r14))); /* return */ + offset = 2 * SSIZE_OF(sw); + if (saveds + scratches >= SLJIT_NUMBER_OF_REGISTERS) { + FAIL_IF(push_inst(compiler, lmg(r6, r14, offset, r15))); /* save registers TODO(MGM): optimize */ + offset += 9 * SSIZE_OF(sw); + } else { + if (scratches == SLJIT_FIRST_SAVED_REG) { + FAIL_IF(push_inst(compiler, lg(r6, offset, 0, r15))); + offset += SSIZE_OF(sw); + } else if (scratches > SLJIT_FIRST_SAVED_REG) { + FAIL_IF(push_inst(compiler, lmg(r6, r6 + (sljit_gpr)(scratches - SLJIT_FIRST_SAVED_REG), offset, r15))); + offset += (scratches - (SLJIT_FIRST_SAVED_REG - 1)) * SSIZE_OF(sw); + } + + if (saveds == 0) { + FAIL_IF(push_inst(compiler, lg(r14, offset, 0, r15))); + offset += SSIZE_OF(sw); + } else { + FAIL_IF(push_inst(compiler, lmg(r14 - (sljit_gpr)saveds, r14, offset, r15))); + offset += (saveds + 1) * SSIZE_OF(sw); + } + } + + tmp = SLJIT_FS0 - compiler->fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + FAIL_IF(push_inst(compiler, 0x68000000 /* ld */ | F20(i) | R12A(r15) | (sljit_ins)offset)); + offset += SSIZE_OF(sw); + } + + for (i = compiler->fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + FAIL_IF(push_inst(compiler, 0x68000000 /* ld */ | F20(i) | R12A(r15) | (sljit_ins)offset)); + offset += SSIZE_OF(sw); + } return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(emit_stack_frame_release(compiler)); + return push_inst(compiler, br(r14)); /* return */ +} + /* --------------------------------------------------------------------- */ /* Operators */ /* --------------------------------------------------------------------- */ @@ -1692,7 +1782,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile CHECK_ERROR(); CHECK(check_sljit_emit_op0(compiler, op)); - op = GET_OPCODE(op) | (op & SLJIT_I32_OP); + op = GET_OPCODE(op) | (op & SLJIT_32); switch (op) { case SLJIT_BREAKPOINT: /* The following invalid instruction is emitted by gdb. */ @@ -1786,17 +1876,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src, srcw); - if ((dst == SLJIT_UNUSED) && !HAS_FLAGS(op)) { - /* TODO(carenas): implement prefetch? */ - return SLJIT_SUCCESS; - } - if (opcode >= SLJIT_MOV && opcode <= SLJIT_MOV_P) { /* LOAD REGISTER */ if (FAST_IS_REG(dst) && FAST_IS_REG(src)) { dst_r = gpr(dst); src_r = gpr(src); - switch (opcode | (op & SLJIT_I32_OP)) { + switch (opcode | (op & SLJIT_32)) { /* 32-bit */ case SLJIT_MOV32_U8: ins = llcr(dst_r, src_r); @@ -1811,6 +1896,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ins = lhr(dst_r, src_r); break; case SLJIT_MOV32: + if (dst_r == src_r) + return SLJIT_SUCCESS; ins = lr(dst_r, src_r); break; /* 64-bit */ @@ -1834,11 +1921,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile break; case SLJIT_MOV: case SLJIT_MOV_P: + if (dst_r == src_r) + return SLJIT_SUCCESS; ins = lgr(dst_r, src_r); break; default: ins = 0; SLJIT_UNREACHABLE(); + break; } FAIL_IF(push_inst(compiler, ins)); return SLJIT_SUCCESS; @@ -1862,6 +1952,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile srcw = (sljit_sw)((sljit_u32)(srcw)); break; case SLJIT_MOV_S32: + case SLJIT_MOV32: srcw = (sljit_sw)((sljit_s32)(srcw)); break; } @@ -1875,7 +1966,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile FAIL_IF(make_addr_bxy(compiler, &mem, src, srcw, tmp1)); /* TODO(carenas): convert all calls below to LEVAL */ - switch (opcode | (op & SLJIT_I32_OP)) { + switch (opcode | (op & SLJIT_32)) { case SLJIT_MOV32_U8: ins = llc(reg, mem.offset, mem.index, mem.base); break; @@ -1914,7 +2005,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile ins = lg(reg, mem.offset, mem.index, mem.base); break; default: + ins = 0; SLJIT_UNREACHABLE(); + break; } FAIL_IF(push_inst(compiler, ins)); return SLJIT_SUCCESS; @@ -1940,6 +2033,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile WHEN2(is_u12(mem.offset), sth, sthy)); case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: return push_inst(compiler, WHEN2(is_u12(mem.offset), st, sty)); case SLJIT_MOV_P: @@ -1972,6 +2066,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile EVAL(sthy, tmp0, mem)); case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: FAIL_IF(push_inst(compiler, EVAL(ly, tmp0, mem))); FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1)); @@ -1994,15 +2089,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile SLJIT_ASSERT((src & SLJIT_IMM) == 0); /* no immediates */ - dst_r = SLOW_IS_REG(dst) ? gpr(REG_MASK & dst) : tmp0; + dst_r = FAST_IS_REG(dst) ? gpr(REG_MASK & dst) : tmp0; src_r = FAST_IS_REG(src) ? gpr(REG_MASK & src) : tmp0; if (src & SLJIT_MEM) - FAIL_IF(load_word(compiler, src_r, src, srcw, src & SLJIT_I32_OP)); + FAIL_IF(load_word(compiler, src_r, src, srcw, src & SLJIT_32)); compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z); /* TODO(mundaym): optimize loads and stores */ - switch (opcode | (op & SLJIT_I32_OP)) { + switch (opcode | (op & SLJIT_32)) { case SLJIT_NOT: /* emulate ~x with x^-1 */ FAIL_IF(push_load_imm_inst(compiler, tmp1, -1)); @@ -2014,7 +2109,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_NOT32: /* emulate ~x with x^-1 */ if (have_eimm()) - FAIL_IF(push_inst(compiler, xilf(dst_r, -1))); + FAIL_IF(push_inst(compiler, xilf(dst_r, 0xffffffff))); else { FAIL_IF(push_load_imm_inst(compiler, tmp1, -1)); if (src_r != dst_r) @@ -2023,14 +2118,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile FAIL_IF(push_inst(compiler, xr(dst_r, tmp1))); } break; - case SLJIT_NEG: - compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB; - FAIL_IF(push_inst(compiler, lcgr(dst_r, src_r))); - break; - case SLJIT_NEG32: - compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB; - FAIL_IF(push_inst(compiler, lcr(dst_r, src_r))); - break; case SLJIT_CLZ: if (have_eimm()) { FAIL_IF(push_inst(compiler, flogr(tmp0, src_r))); /* clobbers tmp1 */ @@ -2059,8 +2146,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile FAIL_IF(update_zero_overflow(compiler, op, dst_r)); /* TODO(carenas): doesn't need FAIL_IF */ - if ((dst != SLJIT_UNUSED) && (dst & SLJIT_MEM)) - FAIL_IF(store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP)); + if (dst & SLJIT_MEM) + FAIL_IF(store_word(compiler, dst_r, dst, dstw, op & SLJIT_32)); return SLJIT_SUCCESS; } @@ -2084,20 +2171,6 @@ static SLJIT_INLINE int is_shift(sljit_s32 op) { return (v == SLJIT_SHL || v == SLJIT_ASHR || v == SLJIT_LSHR) ? 1 : 0; } -static SLJIT_INLINE int sets_signed_flag(sljit_s32 op) -{ - switch (GET_FLAG_TYPE(op)) { - case SLJIT_OVERFLOW: - case SLJIT_NOT_OVERFLOW: - case SLJIT_SIG_LESS: - case SLJIT_SIG_LESS_EQUAL: - case SLJIT_SIG_GREATER: - case SLJIT_SIG_GREATER_EQUAL: - return 1; - } - return 0; -} - static const struct ins_forms add_forms = { 0x1a00, /* ar */ 0xb9080000, /* agr */ @@ -2131,24 +2204,24 @@ static sljit_s32 sljit_emit_add(struct sljit_compiler *compiler, sljit_s32 op, if (src2 & SLJIT_IMM) { if (!sets_zero_overflow && is_s8(src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) { if (sets_overflow) - ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; + ins = (op & SLJIT_32) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; else - ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; + ins = (op & SLJIT_32) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; return emit_siy(compiler, ins, dst, dstw, src2w); } if (is_s16(src2w)) { if (sets_overflow) - ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; + ins = (op & SLJIT_32) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; else - ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; + ins = (op & SLJIT_32) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, src2w)); goto done; } if (!sets_overflow) { - if ((op & SLJIT_I32_OP) || is_u32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20b00000000 /* alfi */ : 0xc20a00000000 /* algfi */; + if ((op & SLJIT_32) || is_u32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20b00000000 /* alfi */ : 0xc20a00000000 /* algfi */; FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A)); goto done; } @@ -2157,22 +2230,22 @@ static sljit_s32 sljit_emit_add(struct sljit_compiler *compiler, sljit_s32 op, goto done; } } - else if ((op & SLJIT_I32_OP) || is_s32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; + else if ((op & SLJIT_32) || is_s32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A)); goto done; } } forms = sets_overflow ? &add_forms : &logical_add_forms; - FAIL_IF(emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(emit_commutative(compiler, forms, dst, src1, src1w, src2, src2w)); done: if (sets_zero_overflow) - FAIL_IF(update_zero_overflow(compiler, op, SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0)); + FAIL_IF(update_zero_overflow(compiler, op, FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0)); if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; } @@ -2202,78 +2275,85 @@ static sljit_s32 sljit_emit_sub(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - int sets_signed = sets_signed_flag(op); + sljit_s32 flag_type = GET_FLAG_TYPE(op); + int sets_signed = (flag_type >= SLJIT_SIG_LESS && flag_type <= SLJIT_NOT_OVERFLOW); int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW); const struct ins_forms *forms; sljit_ins ins; - if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) { - int compare_signed = GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS; + if (dst == (sljit_s32)tmp0 && flag_type <= SLJIT_SIG_LESS_EQUAL) { + int compare_signed = flag_type >= SLJIT_SIG_LESS; compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_COMPARE; if (src2 & SLJIT_IMM) { if (compare_signed || ((op & VARIABLE_FLAG_MASK) == 0 && is_s32(src2w))) { - if ((op & SLJIT_I32_OP) || is_s32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20d00000000 /* cfi */ : 0xc20c00000000 /* cgfi */; + if ((op & SLJIT_32) || is_s32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20d00000000 /* cfi */ : 0xc20c00000000 /* cgfi */; return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A); } } else { - if ((op & SLJIT_I32_OP) || is_u32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20f00000000 /* clfi */ : 0xc20e00000000 /* clgfi */; + if ((op & SLJIT_32) || is_u32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20f00000000 /* clfi */ : 0xc20e00000000 /* clgfi */; return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A); } if (is_s16(src2w)) - return emit_rie_d(compiler, 0xec00000000db /* alghsik */, SLJIT_UNUSED, src1, src1w, src2w); + return emit_rie_d(compiler, 0xec00000000db /* alghsik */, (sljit_s32)tmp0, src1, src1w, src2w); } } else if (src2 & SLJIT_MEM) { - if ((op & SLJIT_I32_OP) && ((src2 & OFFS_REG_MASK) || is_u12(src2w))) { + if ((op & SLJIT_32) && ((src2 & OFFS_REG_MASK) || is_u12(src2w))) { ins = compare_signed ? 0x59000000 /* c */ : 0x55000000 /* cl */; return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RX_A); } if (compare_signed) - ins = (op & SLJIT_I32_OP) ? 0xe30000000059 /* cy */ : 0xe30000000020 /* cg */; + ins = (op & SLJIT_32) ? 0xe30000000059 /* cy */ : 0xe30000000020 /* cg */; else - ins = (op & SLJIT_I32_OP) ? 0xe30000000055 /* cly */ : 0xe30000000021 /* clg */; + ins = (op & SLJIT_32) ? 0xe30000000055 /* cly */ : 0xe30000000021 /* clg */; return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RXY_A); } if (compare_signed) - ins = (op & SLJIT_I32_OP) ? 0x1900 /* cr */ : 0xb9200000 /* cgr */; + ins = (op & SLJIT_32) ? 0x1900 /* cr */ : 0xb9200000 /* cgr */; else - ins = (op & SLJIT_I32_OP) ? 0x1500 /* clr */ : 0xb9210000 /* clgr */; + ins = (op & SLJIT_32) ? 0x1500 /* clr */ : 0xb9210000 /* clgr */; return emit_rr(compiler, ins, src1, src1, src1w, src2, src2w); } + if (src1 == SLJIT_IMM && src1w == 0 && (flag_type == 0 || sets_signed)) { + ins = (op & SLJIT_32) ? 0x1300 /* lcr */ : 0xb9030000 /* lcgr */; + FAIL_IF(emit_rr1(compiler, ins, dst, src2, src2w)); + goto done; + } + if (src2 & SLJIT_IMM) { sljit_sw neg_src2w = -src2w; if (sets_signed || neg_src2w != 0 || (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == 0) { if (!sets_zero_overflow && is_s8(neg_src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) { if (sets_signed) - ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; + ins = (op & SLJIT_32) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */; else - ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; + ins = (op & SLJIT_32) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */; return emit_siy(compiler, ins, dst, dstw, neg_src2w); } if (is_s16(neg_src2w)) { if (sets_signed) - ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; + ins = (op & SLJIT_32) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */; else - ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; + ins = (op & SLJIT_32) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */; FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, neg_src2w)); goto done; } } if (!sets_signed) { - if ((op & SLJIT_I32_OP) || is_u32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20500000000 /* slfi */ : 0xc20400000000 /* slgfi */; + if ((op & SLJIT_32) || is_u32(src2w)) { + ins = (op & SLJIT_32) ? 0xc20500000000 /* slfi */ : 0xc20400000000 /* slgfi */; FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A)); goto done; } @@ -2282,19 +2362,19 @@ static sljit_s32 sljit_emit_sub(struct sljit_compiler *compiler, sljit_s32 op, goto done; } } - else if ((op & SLJIT_I32_OP) || is_s32(neg_src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; + else if ((op & SLJIT_32) || is_s32(neg_src2w)) { + ins = (op & SLJIT_32) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */; FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, neg_src2w, RIL_A)); goto done; } } forms = sets_signed ? &sub_forms : &logical_sub_forms; - FAIL_IF(emit_non_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(emit_non_commutative(compiler, forms, dst, src1, src1w, src2, src2w)); done: if (sets_signed) { - sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; if ((op & VARIABLE_FLAG_MASK) != SLJIT_SET_OVERFLOW) { /* In case of overflow, the sign bit of the two source operands must be different, and @@ -2303,14 +2383,14 @@ done: The -result operation sets the corrent sign, because the result cannot be zero. The overflow is considered greater, since the result must be equal to INT_MIN so its sign bit is set. */ FAIL_IF(push_inst(compiler, brc(0xe, 2 + 2))); - FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? lcr(tmp1, dst_r) : lcgr(tmp1, dst_r))); + FAIL_IF(push_inst(compiler, (op & SLJIT_32) ? lcr(tmp1, dst_r) : lcgr(tmp1, dst_r))); } else if (op & SLJIT_SET_Z) FAIL_IF(update_zero_overflow(compiler, op, dst_r)); } if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; } @@ -2336,7 +2416,7 @@ static const struct ins_forms multiply_overflow_forms = { }; static sljit_s32 sljit_emit_multiply(struct sljit_compiler *compiler, sljit_s32 op, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { @@ -2351,29 +2431,29 @@ static sljit_s32 sljit_emit_multiply(struct sljit_compiler *compiler, sljit_s32 } FAIL_IF(push_inst(compiler, aih(tmp0, 1))); FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U))); - FAIL_IF(push_inst(compiler, ipm(flag_r))); - FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000))); */ + FAIL_IF(push_inst(compiler, ipm(tmp1))); + FAIL_IF(push_inst(compiler, oilh(tmp1, 0x2000))); */ - return emit_commutative(compiler, &multiply_overflow_forms, dst, dstw, src1, src1w, src2, src2w); + return emit_commutative(compiler, &multiply_overflow_forms, dst, src1, src1w, src2, src2w); } if (src2 & SLJIT_IMM) { if (is_s16(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xa70c0000 /* mhi */ : 0xa70d0000 /* mghi */; + ins = (op & SLJIT_32) ? 0xa70c0000 /* mhi */ : 0xa70d0000 /* mghi */; return emit_ri(compiler, ins, dst, src1, src1w, src2w, RI_A); } if (is_s32(src2w)) { - ins = (op & SLJIT_I32_OP) ? 0xc20100000000 /* msfi */ : 0xc20000000000 /* msgfi */; + ins = (op & SLJIT_32) ? 0xc20100000000 /* msfi */ : 0xc20000000000 /* msgfi */; return emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A); } } - return emit_commutative(compiler, &multiply_forms, dst, dstw, src1, src1w, src2, src2w); + return emit_commutative(compiler, &multiply_forms, dst, src1, src1w, src2, src2w); } static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s32 type, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_uw imm, sljit_s32 count16) { @@ -2381,7 +2461,7 @@ static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s sljit_gpr dst_r = tmp0; sljit_s32 needs_move = 1; - if (SLOW_IS_REG(dst)) { + if (IS_GPR_REG(dst)) { dst_r = gpr(dst & REG_MASK); if (dst == src1) needs_move = 0; @@ -2391,38 +2471,38 @@ static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s FAIL_IF(emit_move(compiler, dst_r, src1, src1w)); if (type == SLJIT_AND) { - if (!(mode & SLJIT_I32_OP)) - FAIL_IF(push_inst(compiler, 0xc00a00000000 /* nihf */ | (dst_r << 36) | (imm >> 32))); - return push_inst(compiler, 0xc00b00000000 /* nilf */ | (dst_r << 36) | (imm & 0xffffffff)); + if (!(mode & SLJIT_32)) + FAIL_IF(push_inst(compiler, 0xc00a00000000 /* nihf */ | R36A(dst_r) | (imm >> 32))); + return push_inst(compiler, 0xc00b00000000 /* nilf */ | R36A(dst_r) | (imm & 0xffffffff)); } else if (type == SLJIT_OR) { if (count16 >= 3) { - FAIL_IF(push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32))); - return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff)); + FAIL_IF(push_inst(compiler, 0xc00c00000000 /* oihf */ | R36A(dst_r) | (imm >> 32))); + return push_inst(compiler, 0xc00d00000000 /* oilf */ | R36A(dst_r) | (imm & 0xffffffff)); } if (count16 >= 2) { if ((imm & 0x00000000ffffffffull) == 0) - return push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32)); + return push_inst(compiler, 0xc00c00000000 /* oihf */ | R36A(dst_r) | (imm >> 32)); if ((imm & 0xffffffff00000000ull) == 0) - return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff)); + return push_inst(compiler, 0xc00d00000000 /* oilf */ | R36A(dst_r) | (imm & 0xffffffff)); } if ((imm & 0xffff000000000000ull) != 0) - FAIL_IF(push_inst(compiler, 0xa5080000 /* oihh */ | (dst_r << 20) | (imm >> 48))); + FAIL_IF(push_inst(compiler, 0xa5080000 /* oihh */ | R20A(dst_r) | (imm >> 48))); if ((imm & 0x0000ffff00000000ull) != 0) - FAIL_IF(push_inst(compiler, 0xa5090000 /* oihl */ | (dst_r << 20) | ((imm >> 32) & 0xffff))); + FAIL_IF(push_inst(compiler, 0xa5090000 /* oihl */ | R20A(dst_r) | ((imm >> 32) & 0xffff))); if ((imm & 0x00000000ffff0000ull) != 0) - FAIL_IF(push_inst(compiler, 0xa50a0000 /* oilh */ | (dst_r << 20) | ((imm >> 16) & 0xffff))); + FAIL_IF(push_inst(compiler, 0xa50a0000 /* oilh */ | R20A(dst_r) | ((imm >> 16) & 0xffff))); if ((imm & 0x000000000000ffffull) != 0 || imm == 0) - return push_inst(compiler, 0xa50b0000 /* oill */ | (dst_r << 20) | (imm & 0xffff)); + return push_inst(compiler, 0xa50b0000 /* oill */ | R20A(dst_r) | (imm & 0xffff)); return SLJIT_SUCCESS; } if ((imm & 0xffffffff00000000ull) != 0) - FAIL_IF(push_inst(compiler, 0xc00600000000 /* xihf */ | (dst_r << 36) | (imm >> 32))); + FAIL_IF(push_inst(compiler, 0xc00600000000 /* xihf */ | R36A(dst_r) | (imm >> 32))); if ((imm & 0x00000000ffffffffull) != 0 || imm == 0) - return push_inst(compiler, 0xc00700000000 /* xilf */ | (dst_r << 36) | (imm & 0xffffffff)); + return push_inst(compiler, 0xc00700000000 /* xilf */ | R36A(dst_r) | (imm & 0xffffffff)); return SLJIT_SUCCESS; } @@ -2457,18 +2537,18 @@ static const struct ins_forms bitwise_xor_forms = { }; static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 op, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { sljit_s32 type = GET_OPCODE(op); const struct ins_forms *forms; - if ((src2 & SLJIT_IMM) && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == SLJIT_UNUSED))) { + if ((src2 & SLJIT_IMM) && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == (sljit_s32)tmp0))) { sljit_s32 count16 = 0; sljit_uw imm = (sljit_uw)src2w; - if (op & SLJIT_I32_OP) + if (op & SLJIT_32) imm &= 0xffffffffull; if ((imm & 0x000000000000ffffull) != 0 || imm == 0) @@ -2480,7 +2560,7 @@ static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 o if ((imm & 0xffff000000000000ull) != 0) count16++; - if (type == SLJIT_AND && dst == SLJIT_UNUSED && count16 == 1) { + if (type == SLJIT_AND && dst == (sljit_s32)tmp0 && count16 == 1) { sljit_gpr src_r = tmp0; if (FAST_IS_REG(src1)) @@ -2489,16 +2569,16 @@ static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 o FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); if ((imm & 0x000000000000ffffull) != 0 || imm == 0) - return push_inst(compiler, 0xa7010000 | (src_r << 20) | imm); + return push_inst(compiler, 0xa7010000 | R20A(src_r) | imm); if ((imm & 0x00000000ffff0000ull) != 0) - return push_inst(compiler, 0xa7000000 | (src_r << 20) | (imm >> 16)); + return push_inst(compiler, 0xa7000000 | R20A(src_r) | (imm >> 16)); if ((imm & 0x0000ffff00000000ull) != 0) - return push_inst(compiler, 0xa7030000 | (src_r << 20) | (imm >> 32)); - return push_inst(compiler, 0xa7020000 | (src_r << 20) | (imm >> 48)); + return push_inst(compiler, 0xa7030000 | R20A(src_r) | (imm >> 32)); + return push_inst(compiler, 0xa7020000 | R20A(src_r) | (imm >> 48)); } if (!(op & SLJIT_SET_Z)) - return sljit_emit_bitwise_imm(compiler, type, dst, dstw, src1, src1w, imm, count16); + return sljit_emit_bitwise_imm(compiler, type, dst, src1, src1w, imm, count16); } if (type == SLJIT_AND) @@ -2508,16 +2588,16 @@ static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 o else forms = &bitwise_xor_forms; - return emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w); + return emit_commutative(compiler, forms, dst, src1, src1w, src2, src2w); } static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op, - sljit_s32 dst, sljit_sw dstw, + sljit_s32 dst, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { sljit_s32 type = GET_OPCODE(op); - sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; + sljit_gpr dst_r = FAST_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0; sljit_gpr src_r = tmp0; sljit_gpr base_r = tmp0; sljit_ins imm = 0; @@ -2529,7 +2609,7 @@ static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op, FAIL_IF(emit_move(compiler, tmp0, src1, src1w)); if (src2 & SLJIT_IMM) - imm = src2w & ((op & SLJIT_I32_OP) ? 0x1f : 0x3f); + imm = (sljit_ins)(src2w & ((op & SLJIT_32) ? 0x1f : 0x3f)); else if (FAST_IS_REG(src2)) base_r = gpr(src2 & REG_MASK); else { @@ -2537,7 +2617,7 @@ static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op, base_r = tmp1; } - if ((op & SLJIT_I32_OP) && dst_r == src_r) { + if ((op & SLJIT_32) && dst_r == src_r) { if (type == SLJIT_SHL) ins = 0x89000000 /* sll */; else if (type == SLJIT_LSHR) @@ -2545,21 +2625,21 @@ static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op, else ins = 0x8a000000 /* sra */; - FAIL_IF(push_inst(compiler, ins | (dst_r << 20) | (base_r << 12) | imm)); + FAIL_IF(push_inst(compiler, ins | R20A(dst_r) | R12A(base_r) | imm)); } else { if (type == SLJIT_SHL) - ins = (op & SLJIT_I32_OP) ? 0xeb00000000df /* sllk */ : 0xeb000000000d /* sllg */; + ins = (op & SLJIT_32) ? 0xeb00000000df /* sllk */ : 0xeb000000000d /* sllg */; else if (type == SLJIT_LSHR) - ins = (op & SLJIT_I32_OP) ? 0xeb00000000de /* srlk */ : 0xeb000000000c /* srlg */; + ins = (op & SLJIT_32) ? 0xeb00000000de /* srlk */ : 0xeb000000000c /* srlg */; else - ins = (op & SLJIT_I32_OP) ? 0xeb00000000dc /* srak */ : 0xeb000000000a /* srag */; + ins = (op & SLJIT_32) ? 0xeb00000000dc /* srak */ : 0xeb000000000a /* srag */; - FAIL_IF(push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (base_r << 28) | (imm << 16))); + FAIL_IF(push_inst(compiler, ins | R36A(dst_r) | R32A(src_r) | R28A(base_r) | (imm << 16))); } if ((op & SLJIT_SET_Z) && type != SLJIT_ASHR) - return push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r)); + return push_inst(compiler, (op & SLJIT_32) ? or(dst_r, dst_r) : ogr(dst_r, dst_r)); return SLJIT_SUCCESS; } @@ -2590,20 +2670,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src2, sljit_sw src2w) { CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - - compiler->mode = op & SLJIT_I32_OP; + compiler->mode = op & SLJIT_32; compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z); - if (GET_OPCODE(op) >= SLJIT_ADD || GET_OPCODE(op) <= SLJIT_SUBC) - compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB; - if (is_commutative(op) && (src1 & SLJIT_IMM) && !(src2 & SLJIT_IMM)) { src1 ^= src2; src2 ^= src1; @@ -2616,39 +2690,57 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile switch (GET_OPCODE(op)) { case SLJIT_ADD: + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD; return sljit_emit_add(compiler, op, dst, dstw, src1, src1w, src2, src2w); case SLJIT_ADDC: - FAIL_IF(emit_commutative(compiler, &addc_forms, dst, dstw, src1, src1w, src2, src2w)); + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD; + FAIL_IF(emit_commutative(compiler, &addc_forms, dst, src1, src1w, src2, src2w)); if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; case SLJIT_SUB: + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_SUB; return sljit_emit_sub(compiler, op, dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUBC: - FAIL_IF(emit_non_commutative(compiler, &subc_forms, dst, dstw, src1, src1w, src2, src2w)); + compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_SUB; + FAIL_IF(emit_non_commutative(compiler, &subc_forms, dst, src1, src1w, src2, src2w)); if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; case SLJIT_MUL: - FAIL_IF(sljit_emit_multiply(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(sljit_emit_multiply(compiler, op, dst, src1, src1w, src2, src2w)); break; case SLJIT_AND: case SLJIT_OR: case SLJIT_XOR: - FAIL_IF(sljit_emit_bitwise(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(sljit_emit_bitwise(compiler, op, dst, src1, src1w, src2, src2w)); break; case SLJIT_SHL: case SLJIT_LSHR: case SLJIT_ASHR: - FAIL_IF(sljit_emit_shift(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + FAIL_IF(sljit_emit_shift(compiler, op, dst, src1, src1w, src2, src2w)); break; } if (dst & SLJIT_MEM) - return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, tmp0, dst, dstw, op & SLJIT_32); return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, (sljit_s32)tmp0, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src( struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) @@ -2686,17 +2778,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src( SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_register_index(reg)); - return gpr(reg); + return (sljit_s32)gpr(reg); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) { CHECK_REG_INDEX(check_sljit_get_float_register_index(reg)); - abort(); + return (sljit_s32)fgpr(reg); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { sljit_ins ins = 0; @@ -2711,21 +2803,254 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ +#define FLOAT_LOAD 0 +#define FLOAT_STORE 1 + +static sljit_s32 float_mem(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 reg, + sljit_s32 mem, sljit_sw memw) +{ + struct addr addr; + sljit_ins ins; + + SLJIT_ASSERT(mem & SLJIT_MEM); + + if ((mem & OFFS_REG_MASK) || is_u12(memw) || !is_s20(memw)) { + FAIL_IF(make_addr_bx(compiler, &addr, mem, memw, tmp1)); + + if (op & FLOAT_STORE) + ins = (op & SLJIT_32) ? 0x70000000 /* ste */ : 0x60000000 /* std */; + else + ins = (op & SLJIT_32) ? 0x78000000 /* le */ : 0x68000000 /* ld */; + + return push_inst(compiler, ins | F20(reg) | R16A(addr.index) | R12A(addr.base) | (sljit_ins)addr.offset); + } + + FAIL_IF(make_addr_bxy(compiler, &addr, mem, memw, tmp1)); + + if (op & FLOAT_STORE) + ins = (op & SLJIT_32) ? 0xed0000000066 /* stey */ : 0xed0000000067 /* stdy */; + else + ins = (op & SLJIT_32) ? 0xed0000000064 /* ley */ : 0xed0000000065 /* ldy */; + + return push_inst(compiler, ins | F36(reg) | R32A(addr.index) | R28A(addr.base) | disp_s20(addr.offset)); +} + +static sljit_s32 emit_float(struct sljit_compiler *compiler, sljit_ins ins_r, sljit_ins ins, + sljit_s32 reg, + sljit_s32 src, sljit_sw srcw) +{ + struct addr addr; + + if (!(src & SLJIT_MEM)) + return push_inst(compiler, ins_r | F4(reg) | F0(src)); + + FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp1)); + return push_inst(compiler, ins | F36(reg) | R32A(addr.index) | R28A(addr.base) | ((sljit_ins)addr.offset << 16)); +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_ins dst_r = FAST_IS_REG(dst) ? gpr(dst) : tmp0; + sljit_ins ins; + + if (src & SLJIT_MEM) { + FAIL_IF(float_mem(compiler, FLOAT_LOAD | (op & SLJIT_32), TMP_FREG1, src, srcw)); + src = TMP_FREG1; + } + + /* M3 is set to 5 */ + if (GET_OPCODE(op) == SLJIT_CONV_SW_FROM_F64) + ins = (op & SLJIT_32) ? 0xb3a85000 /* cgebr */ : 0xb3a95000 /* cgdbr */; + else + ins = (op & SLJIT_32) ? 0xb3985000 /* cfebr */ : 0xb3995000 /* cfdbr */; + + FAIL_IF(push_inst(compiler, ins | R4A(dst_r) | F0(src))); + + if (dst & SLJIT_MEM) + return store_word(compiler, dst_r, dst, dstw, GET_OPCODE(op) >= SLJIT_CONV_S32_FROM_F64); + + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + sljit_ins ins; + + if (src & SLJIT_IMM) { + FAIL_IF(push_load_imm_inst(compiler, tmp0, srcw)); + src = (sljit_s32)tmp0; + } + else if (src & SLJIT_MEM) { + FAIL_IF(load_word(compiler, tmp0, src, srcw, GET_OPCODE(op) >= SLJIT_CONV_F64_FROM_S32)); + src = (sljit_s32)tmp0; + } + + if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_SW) + ins = (op & SLJIT_32) ? 0xb3a40000 /* cegbr */ : 0xb3a50000 /* cdgbr */; + else + ins = (op & SLJIT_32) ? 0xb3940000 /* cefbr */ : 0xb3950000 /* cdfbr */; + + FAIL_IF(push_inst(compiler, ins | F4(dst_r) | R0(src))); + + if (dst & SLJIT_MEM) + return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), TMP_FREG1, dst, dstw); + + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_ins ins_r, ins; + + if (src1 & SLJIT_MEM) { + FAIL_IF(float_mem(compiler, FLOAT_LOAD | (op & SLJIT_32), TMP_FREG1, src1, src1w)); + src1 = TMP_FREG1; + } + + if (op & SLJIT_32) { + ins_r = 0xb3090000 /* cebr */; + ins = 0xed0000000009 /* ceb */; + } else { + ins_r = 0xb3190000 /* cdbr */; + ins = 0xed0000000019 /* cdb */; + } + + return emit_float(compiler, ins_r, ins, src1, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { + sljit_s32 dst_r; + sljit_ins ins; + CHECK_ERROR(); - abort(); + + SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); + + dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + + if (op == SLJIT_CONV_F64_FROM_F32) + FAIL_IF(emit_float(compiler, 0xb3040000 /* ldebr */, 0xed0000000004 /* ldeb */, dst_r, src, srcw)); + else { + if (src & SLJIT_MEM) { + FAIL_IF(float_mem(compiler, FLOAT_LOAD | (op == SLJIT_CONV_F32_FROM_F64 ? 0 : (op & SLJIT_32)), dst_r, src, srcw)); + src = dst_r; + } + + switch (GET_OPCODE(op)) { + case SLJIT_MOV_F64: + if (FAST_IS_REG(dst)) { + if (dst == src) + return SLJIT_SUCCESS; + + ins = (op & SLJIT_32) ? 0x3800 /* ler */ : 0x2800 /* ldr */; + break; + } + return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), src, dst, dstw); + case SLJIT_CONV_F64_FROM_F32: + /* Only SLJIT_CONV_F32_FROM_F64. */ + ins = 0xb3440000 /* ledbr */; + break; + case SLJIT_NEG_F64: + ins = (op & SLJIT_32) ? 0xb3030000 /* lcebr */ : 0xb3130000 /* lcdbr */; + break; + default: + SLJIT_ASSERT(GET_OPCODE(op) == SLJIT_ABS_F64); + ins = (op & SLJIT_32) ? 0xb3000000 /* lpebr */ : 0xb3100000 /* lpdbr */; + break; + } + + FAIL_IF(push_inst(compiler, ins | F4(dst_r) | F0(src))); + } + + if (!(dst & SLJIT_MEM)) + return SLJIT_SUCCESS; + + SLJIT_ASSERT(dst_r == TMP_FREG1); + + return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), TMP_FREG1, dst, dstw); } +#define FLOAT_MOV(op, dst_r, src_r) \ + (((op & SLJIT_32) ? 0x3800 /* ler */ : 0x2800 /* ldr */) | F4(dst_r) | F0(src_r)) + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { + sljit_s32 dst_r = TMP_FREG1; + sljit_ins ins_r, ins; + CHECK_ERROR(); - abort(); + CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + do { + if (FAST_IS_REG(dst)) { + dst_r = dst; + + if (dst == src1) + break; + + if (dst == src2) { + if (GET_OPCODE(op) == SLJIT_ADD_F64 || GET_OPCODE(op) == SLJIT_MUL_F64) { + src2 = src1; + src2w = src1w; + src1 = dst; + break; + } + + FAIL_IF(push_inst(compiler, FLOAT_MOV(op, TMP_FREG1, src2))); + src2 = TMP_FREG1; + } + } + + if (src1 & SLJIT_MEM) + FAIL_IF(float_mem(compiler, FLOAT_LOAD | (op & SLJIT_32), dst_r, src1, src1w)); + else + FAIL_IF(push_inst(compiler, FLOAT_MOV(op, dst_r, src1))); + } while (0); + + switch (GET_OPCODE(op)) { + case SLJIT_ADD_F64: + ins_r = (op & SLJIT_32) ? 0xb30a0000 /* aebr */ : 0xb31a0000 /* adbr */; + ins = (op & SLJIT_32) ? 0xed000000000a /* aeb */ : 0xed000000001a /* adb */; + break; + case SLJIT_SUB_F64: + ins_r = (op & SLJIT_32) ? 0xb30b0000 /* sebr */ : 0xb31b0000 /* sdbr */; + ins = (op & SLJIT_32) ? 0xed000000000b /* seb */ : 0xed000000001b /* sdb */; + break; + case SLJIT_MUL_F64: + ins_r = (op & SLJIT_32) ? 0xb3170000 /* meebr */ : 0xb31c0000 /* mdbr */; + ins = (op & SLJIT_32) ? 0xed0000000017 /* meeb */ : 0xed000000001c /* mdb */; + break; + default: + SLJIT_ASSERT(GET_OPCODE(op) == SLJIT_DIV_F64); + ins_r = (op & SLJIT_32) ? 0xb30d0000 /* debr */ : 0xb31d0000 /* ddbr */; + ins = (op & SLJIT_32) ? 0xed000000000d /* deb */ : 0xed000000001d /* ddb */; + break; + } + + FAIL_IF(emit_float(compiler, ins_r, ins, dst_r, src2, src2w)); + + if (dst & SLJIT_MEM) + return float_mem(compiler, FLOAT_STORE | (op & SLJIT_32), TMP_FREG1, dst, dstw); + + SLJIT_ASSERT(dst_r != TMP_FREG1); + return SLJIT_SUCCESS; } /* --------------------------------------------------------------------- */ @@ -2795,6 +3120,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; @@ -2809,14 +3139,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_ijump(compiler, type, src, srcw)); - ADJUST_LOCAL_OFFSET(src, srcw); if (src & SLJIT_IMM) { SLJIT_ASSERT(!(srcw & 1)); /* target address must be even */ FAIL_IF(push_load_imm_inst(compiler, src_r, srcw)); } - else if (src & SLJIT_MEM) + else if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); FAIL_IF(load_word(compiler, src_r, src, srcw, 0 /* 64-bit */)); + } /* emit jump instruction */ if (type >= SLJIT_FAST_CALL) @@ -2832,6 +3163,24 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); + SLJIT_ASSERT(gpr(TMP_REG2) == tmp1); + + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + FAIL_IF(load_word(compiler, tmp1, src, srcw, 0 /* 64-bit */)); + src = TMP_REG2; + } + + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0) { + FAIL_IF(push_inst(compiler, lgr(tmp1, gpr(src)))); + src = TMP_REG2; + } + + FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP; + } + #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; @@ -2859,11 +3208,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co /* dst is also source operand */ if (dst & SLJIT_MEM) - FAIL_IF(load_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP)); + FAIL_IF(load_word(compiler, dst_r, dst, dstw, op & SLJIT_32)); break; + case SLJIT_MOV32: + op |= SLJIT_32; + /* fallthrough */ case SLJIT_MOV: - case (SLJIT_MOV32 & ~SLJIT_I32_OP): /* can write straight into destination */ loc_r = dst_r; break; @@ -2876,7 +3227,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co if (have_lscond2()) { FAIL_IF(push_load_imm_inst(compiler, loc_r, 0)); FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, lochi, locghi))); + WHEN2(op & SLJIT_32, lochi, locghi))); } else { /* TODO(mundaym): no load/store-on-condition 2 facility (ipm? branch-and-set?) */ abort(); @@ -2888,22 +3239,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co #define LEVAL(i) i(dst_r, loc_r) case SLJIT_AND: FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, nr, ngr))); + WHEN2(op & SLJIT_32, nr, ngr))); break; case SLJIT_OR: FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, or, ogr))); + WHEN2(op & SLJIT_32, or, ogr))); break; case SLJIT_XOR: FAIL_IF(push_inst(compiler, - WHEN2(op & SLJIT_I32_OP, xr, xgr))); + WHEN2(op & SLJIT_32, xr, xgr))); break; #undef LEVAL } /* store result to memory if required */ if (dst & SLJIT_MEM) - return store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP); + return store_word(compiler, dst_r, dst, dstw, (op & SLJIT_32)); return SLJIT_SUCCESS; } @@ -2913,7 +3264,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil sljit_s32 src, sljit_sw srcw) { sljit_u8 mask = get_cc(compiler, type & 0xff); - sljit_gpr dst_r = gpr(dst_reg & ~SLJIT_I32_OP); + sljit_gpr dst_r = gpr(dst_reg & ~SLJIT_32); sljit_gpr src_r = FAST_IS_REG(src) ? gpr(src) : tmp0; CHECK_ERROR(); @@ -2927,7 +3278,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil #define LEVAL(i) i(dst_r, src_r, mask) if (have_lscond1()) return push_inst(compiler, - WHEN2(dst_reg & SLJIT_I32_OP, locr, locgr)); + WHEN2(dst_reg & SLJIT_32, locr, locgr)); #undef LEVAL @@ -2991,7 +3342,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label *sljit_emit_put_label( diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_32.c index 28886405..218992b3 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_32.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_32.c @@ -35,16 +35,13 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst, #define ARG2(flags, src2) ((flags & SRC2_IMM) ? IMM(src2) : S2(src2)) -static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, +static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_u32 flags, sljit_s32 dst, sljit_s32 src1, sljit_sw src2) { SLJIT_COMPILE_ASSERT(ICC_IS_SET == SET_FLAGS, icc_is_set_and_set_flags_must_be_the_same); switch (op) { case SLJIT_MOV: - case SLJIT_MOV_U32: - case SLJIT_MOV_S32: - case SLJIT_MOV_P: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); if (dst != src2) return push_inst(compiler, OR | D(dst) | S1(0) | S2(src2), DR(dst)); @@ -59,8 +56,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl FAIL_IF(push_inst(compiler, SLL | D(dst) | S1(src2) | IMM(24), DR(dst))); return push_inst(compiler, SRA | D(dst) | S1(dst) | IMM(24), DR(dst)); } - else if (dst != src2) - SLJIT_UNREACHABLE(); + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_MOV_U16: @@ -70,13 +66,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl FAIL_IF(push_inst(compiler, SLL | D(dst) | S1(src2) | IMM(16), DR(dst))); return push_inst(compiler, (op == SLJIT_MOV_S16 ? SRA : SRL) | D(dst) | S1(dst) | IMM(16), DR(dst)); } - else if (dst != src2) - SLJIT_UNREACHABLE(); + SLJIT_ASSERT(dst == src2); return SLJIT_SUCCESS; case SLJIT_NOT: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); - return push_inst(compiler, XNOR | (flags & SET_FLAGS) | D(dst) | S1(0) | S2(src2), DR(dst) | (flags & SET_FLAGS)); + return push_inst(compiler, XNOR | (flags & SET_FLAGS) | D(dst) | S1(0) | S2(src2), DRF(dst, flags)); case SLJIT_CLZ: SLJIT_ASSERT(src1 == TMP_REG1 && !(flags & SRC2_IMM)); @@ -89,22 +84,24 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl /* Loop. */ FAIL_IF(push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(TMP_REG1) | S2(0), SET_FLAGS)); FAIL_IF(push_inst(compiler, SLL | D(TMP_REG1) | S1(TMP_REG1) | IMM(1), DR(TMP_REG1))); - FAIL_IF(push_inst(compiler, BICC | DA(0xe) | (-2 & DISP_MASK), UNMOVABLE_INS)); + FAIL_IF(push_inst(compiler, BICC | DA(0xe) | ((sljit_ins)-2 & DISP_MASK), UNMOVABLE_INS)); return push_inst(compiler, ADD | D(dst) | S1(dst) | IMM(1), UNMOVABLE_INS); case SLJIT_ADD: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - return push_inst(compiler, ADD | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + return push_inst(compiler, ADD | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_ADDC: - return push_inst(compiler, ADDC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + return push_inst(compiler, ADDC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_SUB: - compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB; - return push_inst(compiler, SUB | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + return push_inst(compiler, SUB | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_SUBC: - return push_inst(compiler, SUBC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + return push_inst(compiler, SUBC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_MUL: compiler->status_flags_state = 0; @@ -116,13 +113,13 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl return push_inst(compiler, SUB | SET_FLAGS | D(0) | S1(TMP_REG1) | S2(TMP_LINK), MOVABLE_INS | SET_FLAGS); case SLJIT_AND: - return push_inst(compiler, AND | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + return push_inst(compiler, AND | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_OR: - return push_inst(compiler, OR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + return push_inst(compiler, OR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_XOR: - return push_inst(compiler, XOR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS)); + return push_inst(compiler, XOR | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DRF(dst, flags)); case SLJIT_SHL: FAIL_IF(push_inst(compiler, SLL | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst))); @@ -147,7 +144,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t sljit_s32 word_reg_index = 8; sljit_s32 float_arg_index = 1; sljit_s32 double_arg_count = 0; - sljit_s32 float_offset = (16 + 6) * sizeof(sljit_sw); + sljit_u32 float_offset = (16 + 6) * sizeof(sljit_sw); sljit_s32 types = 0; sljit_s32 reg = 0; sljit_s32 move_to_tmp2 = 0; @@ -155,18 +152,12 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t if (src) reg = reg_map[*src & REG_MASK]; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - float_arg_index++; - if (reg_index == reg) - move_to_tmp2 = 1; - reg_index++; - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: float_arg_index++; double_arg_count++; @@ -174,36 +165,37 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t move_to_tmp2 = 1; reg_index += 2; break; + case SLJIT_ARG_TYPE_F32: + float_arg_index++; + if (reg_index == reg) + move_to_tmp2 = 1; + reg_index++; + break; default: - if (reg_index != word_reg_index && reg_index < 14 && reg_index == reg) + if (reg_index != word_reg_index && reg_index == reg) move_to_tmp2 = 1; reg_index++; word_reg_index++; break; } - if (move_to_tmp2) { - move_to_tmp2 = 0; - if (reg < 14) - FAIL_IF(push_inst(compiler, OR | D(TMP_REG1) | S1(0) | S2A(reg), DR(TMP_REG1))); - *src = TMP_REG1; - } + arg_types >>= SLJIT_ARG_SHIFT; + } - arg_types >>= SLJIT_DEF_SHIFT; + if (move_to_tmp2) { + if (reg < 14) + FAIL_IF(push_inst(compiler, OR | D(TMP_REG1) | S1(0) | S2A(reg), DR(TMP_REG1))); + *src = TMP_REG1; } arg_types = types; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - float_arg_index--; - FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); - float_offset -= sizeof(sljit_f64); - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: float_arg_index--; if (float_arg_index == 4 && double_arg_count == 4) { + /* The address is not doubleword aligned, so two instructions are required to store the double. */ FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | S1(SLJIT_SP) | IMM((16 + 7) * sizeof(sljit_sw)), MOVABLE_INS)); FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | (1 << 25) | S1(SLJIT_SP) | IMM((16 + 8) * sizeof(sljit_sw)), MOVABLE_INS)); } @@ -211,36 +203,41 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t FAIL_IF(push_inst(compiler, STDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); float_offset -= sizeof(sljit_f64); break; + case SLJIT_ARG_TYPE_F32: + float_arg_index--; + FAIL_IF(push_inst(compiler, STF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + float_offset -= sizeof(sljit_f64); + break; default: break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } float_offset = (16 + 6) * sizeof(sljit_sw); while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - reg_index--; - if (reg_index < 14) - FAIL_IF(push_inst(compiler, LDUW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index)); - float_offset -= sizeof(sljit_f64); - break; + switch (types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: reg_index -= 2; if (reg_index < 14) { if ((reg_index & 0x1) != 0) { FAIL_IF(push_inst(compiler, LDUW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index)); - if (reg_index < 13) + if (reg_index < 8 + 6 - 1) FAIL_IF(push_inst(compiler, LDUW | DA(reg_index + 1) | S1(SLJIT_SP) | IMM(float_offset + sizeof(sljit_sw)), reg_index + 1)); } - else + else FAIL_IF(push_inst(compiler, LDD | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index)); } float_offset -= sizeof(sljit_f64); break; + case SLJIT_ARG_TYPE_F32: + reg_index--; + if (reg_index < 8 + 6) + FAIL_IF(push_inst(compiler, LDUW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), reg_index)); + float_offset -= sizeof(sljit_f64); + break; default: reg_index--; word_reg_index--; @@ -254,7 +251,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -282,5 +279,5 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_sw new_constant, sljit_sw executable_offset) { - sljit_set_jump_addr(addr, new_constant, executable_offset); + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_common.c b/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_common.c index e833f09d..c8d19e16 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_common.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeSPARC_common.c @@ -98,36 +98,37 @@ static void sparc_cache_flush(sljit_ins *from, sljit_ins *to) #define TMP_FREG2 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2) static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 6] = { - 0, 8, 9, 10, 11, 29, 28, 27, 23, 22, 21, 20, 19, 18, 17, 16, 26, 25, 24, 14, 1, 12, 13, 15 + 0, 8, 9, 10, 11, 23, 22, 21, 20, 19, 18, 17, 16, 29, 28, 27, 26, 25, 24, 14, 1, 12, 13, 15 }; static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { - 0, 0, 2, 4, 6, 8, 10, 12, 14 + 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 }; /* --------------------------------------------------------------------- */ /* Instrucion forms */ /* --------------------------------------------------------------------- */ -#define D(d) (reg_map[d] << 25) -#define FD(d) (freg_map[d] << 25) -#define FDN(d) ((freg_map[d] | 0x1) << 25) -#define DA(d) ((d) << 25) -#define S1(s1) (reg_map[s1] << 14) -#define FS1(s1) (freg_map[s1] << 14) -#define S1A(s1) ((s1) << 14) -#define S2(s2) (reg_map[s2]) -#define FS2(s2) (freg_map[s2]) -#define FS2N(s2) (freg_map[s2] | 0x1) -#define S2A(s2) (s2) +#define D(d) ((sljit_ins)reg_map[d] << 25) +#define FD(d) ((sljit_ins)freg_map[d] << 25) +#define FDN(d) (((sljit_ins)freg_map[d] | 0x1) << 25) +#define DA(d) ((sljit_ins)(d) << 25) +#define S1(s1) ((sljit_ins)reg_map[s1] << 14) +#define FS1(s1) ((sljit_ins)freg_map[s1] << 14) +#define S1A(s1) ((sljit_ins)(s1) << 14) +#define S2(s2) ((sljit_ins)reg_map[s2]) +#define FS2(s2) ((sljit_ins)freg_map[s2]) +#define FS2N(s2) ((sljit_ins)freg_map[s2] | 0x1) +#define S2A(s2) ((sljit_ins)(s2)) #define IMM_ARG 0x2000 -#define DOP(op) ((op) << 5) -#define IMM(imm) (((imm) & 0x1fff) | IMM_ARG) +#define DOP(op) ((sljit_ins)(op) << 5) +#define IMM(imm) (((sljit_ins)(imm) & 0x1fff) | IMM_ARG) #define DR(dr) (reg_map[dr]) -#define OPC1(opcode) ((opcode) << 30) -#define OPC2(opcode) ((opcode) << 22) -#define OPC3(opcode) ((opcode) << 19) +#define DRF(dr, flags) ((sljit_s32)(reg_map[dr] | ((flags) & SET_FLAGS))) +#define OPC1(opcode) ((sljit_ins)(opcode) << 30) +#define OPC2(opcode) ((sljit_ins)(opcode) << 22) +#define OPC3(opcode) ((sljit_ins)(opcode) << 19) #define SET_FLAGS OPC3(0x10) #define ADD (OPC1(0x2) | OPC3(0x00)) @@ -156,6 +157,8 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define FSUBS (OPC1(0x2) | OPC3(0x34) | DOP(0x45)) #define JMPL (OPC1(0x2) | OPC3(0x38)) #define LDD (OPC1(0x3) | OPC3(0x03)) +#define LDDF (OPC1(0x3) | OPC3(0x23)) +#define LDF (OPC1(0x3) | OPC3(0x20)) #define LDUW (OPC1(0x3) | OPC3(0x00)) #define NOP (OPC1(0x0) | OPC2(0x04)) #define OR (OPC1(0x2) | OPC3(0x02)) @@ -170,6 +173,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SRAX (OPC1(0x2) | OPC3(0x27) | (1 << 12)) #define SRL (OPC1(0x2) | OPC3(0x26)) #define SRLX (OPC1(0x2) | OPC3(0x26) | (1 << 12)) +#define STD (OPC1(0x3) | OPC3(0x07)) #define STDF (OPC1(0x3) | OPC3(0x27)) #define STF (OPC1(0x3) | OPC3(0x24)) #define STW (OPC1(0x3) | OPC3(0x04)) @@ -183,7 +187,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) #define MAX_DISP (0x1fffff) #define MIN_DISP (-0x200000) -#define DISP_MASK (0x3fffff) +#define DISP_MASK ((sljit_ins)0x3fffff) #define BICC (OPC1(0x0) | OPC2(0x2)) #define FBFCC (OPC1(0x0) | OPC2(0x6)) @@ -274,7 +278,7 @@ static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_i } } - diff += sizeof(sljit_ins); + diff += SSIZE_OF(ins); if (diff <= MAX_DISP && diff >= MIN_DISP) { jump->flags |= PATCH_B; @@ -300,7 +304,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil sljit_uw word_count; sljit_uw next_addr; sljit_sw executable_offset; - sljit_uw addr; + sljit_sw addr; struct sljit_label *label; struct sljit_jump *jump; @@ -340,7 +344,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { /* Just recording the address. */ label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } if (jump && jump->addr == word_count) { @@ -373,7 +377,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (label && label->size == word_count) { label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; } @@ -386,27 +390,27 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil jump = compiler->jumps; while (jump) { do { - addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target; + addr = (sljit_sw)((jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target); buf_ptr = (sljit_ins *)jump->addr; if (jump->flags & PATCH_CALL) { - addr = (sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; - SLJIT_ASSERT((sljit_sw)addr <= 0x1fffffff && (sljit_sw)addr >= -0x20000000); - buf_ptr[0] = CALL | (addr & 0x3fffffff); + addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; + SLJIT_ASSERT(addr <= 0x1fffffff && addr >= -0x20000000); + buf_ptr[0] = CALL | ((sljit_ins)addr & 0x3fffffff); break; } if (jump->flags & PATCH_B) { - addr = (sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; - SLJIT_ASSERT((sljit_sw)addr <= MAX_DISP && (sljit_sw)addr >= MIN_DISP); - buf_ptr[0] = (buf_ptr[0] & ~DISP_MASK) | (addr & DISP_MASK); + addr = (addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset)) >> 2; + SLJIT_ASSERT(addr <= MAX_DISP && addr >= MIN_DISP); + buf_ptr[0] = (buf_ptr[0] & ~DISP_MASK) | ((sljit_ins)addr & DISP_MASK); break; } /* Set the fields of immediate loads. */ #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) SLJIT_ASSERT(((buf_ptr[0] & 0xc1cfffff) == 0x01000000) && ((buf_ptr[1] & 0xc1f83fff) == 0x80102000)); - buf_ptr[0] |= (addr >> 10) & 0x3fffff; - buf_ptr[1] |= addr & 0x3ff; + buf_ptr[0] |= (sljit_ins)(addr >> 10) & 0x3fffff; + buf_ptr[1] |= (sljit_ins)addr & 0x3ff; #else #error "Implementation required" #endif @@ -416,7 +420,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil put_label = compiler->put_labels; while (put_label) { - addr = put_label->label->addr; + addr = (sljit_sw)put_label->label->addr; buf_ptr = (sljit_ins *)put_label->addr; #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) @@ -431,7 +435,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = (code_ptr - code) * sizeof(sljit_ins); + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); @@ -487,13 +491,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define ALT_KEEP_CACHE 0x00040 #define CUMULATIVE_OP 0x00080 #define IMM_OP 0x00100 -#define SRC2_IMM 0x00200 +#define MOVE_OP 0x00200 +#define SRC2_IMM 0x00400 -#define REG_DEST 0x00400 -#define REG2_SOURCE 0x00800 -#define SLOW_SRC1 0x01000 -#define SLOW_SRC2 0x02000 -#define SLOW_DEST 0x04000 +#define REG_DEST 0x00800 +#define REG2_SOURCE 0x01000 +#define SLOW_SRC1 0x02000 +#define SLOW_SRC2 0x04000 +#define SLOW_DEST 0x08000 /* SET_FLAGS (0x10 << 19) also belong here! */ @@ -507,6 +512,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) { + sljit_s32 reg_index, types, tmp; + sljit_u32 float_offset, args_offset; + sljit_s32 saved_arg_index, scratch_arg_index, float_arg_index; + CHECK_ERROR(); CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); @@ -514,7 +523,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi local_size = (local_size + SLJIT_LOCALS_OFFSET + 7) & ~0x7; compiler->local_size = local_size; - if (local_size <= SIMM_MAX) { + if (local_size <= -SIMM_MIN) { FAIL_IF(push_inst(compiler, SAVE | D(SLJIT_SP) | S1(SLJIT_SP) | IMM(-local_size), UNMOVABLE_INS)); } else { @@ -522,7 +531,88 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compi FAIL_IF(push_inst(compiler, SAVE | D(SLJIT_SP) | S1(SLJIT_SP) | S2(TMP_REG1), UNMOVABLE_INS)); } - /* Arguments are in their appropriate registers. */ + arg_types >>= SLJIT_ARG_SHIFT; + + types = arg_types; + float_offset = 16 * sizeof(sljit_sw); + reg_index = 24; + + while (types && reg_index < 24 + 6) { + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (reg_index & 0x1) { + FAIL_IF(push_inst(compiler, STW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + if (reg_index >= 24 + 6 - 1) + break; + FAIL_IF(push_inst(compiler, STW | DA(reg_index + 1) | S1(SLJIT_SP) | IMM(float_offset + sizeof(sljit_sw)), MOVABLE_INS)); + } else + FAIL_IF(push_inst(compiler, STD | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + + float_offset += sizeof(sljit_f64); + reg_index++; + break; + case SLJIT_ARG_TYPE_F32: + FAIL_IF(push_inst(compiler, STW | DA(reg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + float_offset += sizeof(sljit_f64); + break; + } + + reg_index++; + types >>= SLJIT_ARG_SHIFT; + } + + args_offset = (16 + 1 + 6) * sizeof(sljit_sw); + float_offset = 16 * sizeof(sljit_sw); + reg_index = 24; + saved_arg_index = 24; + scratch_arg_index = 8 - 1; + float_arg_index = 1; + + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + if (reg_index < 24 + 6 - 1) { + FAIL_IF(push_inst(compiler, LDDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + } else if (reg_index < 24 + 6) { + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | (1 << 25) | S1A(30) | IMM(args_offset), MOVABLE_INS)); + } else { + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1A(30) | IMM(args_offset), MOVABLE_INS)); + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | (1 << 25) | S1A(30) | IMM(args_offset + sizeof(sljit_sw)), MOVABLE_INS)); + } + + float_arg_index++; + float_offset += sizeof(sljit_f64); + reg_index++; + break; + case SLJIT_ARG_TYPE_F32: + if (reg_index < 24 + 6) + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1(SLJIT_SP) | IMM(float_offset), MOVABLE_INS)); + else + FAIL_IF(push_inst(compiler, LDF | FD(float_arg_index) | S1A(30) | IMM(args_offset), MOVABLE_INS)); + float_arg_index++; + float_offset += sizeof(sljit_f64); + break; + default: + scratch_arg_index++; + + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + tmp = saved_arg_index++; + if (tmp == reg_index) + break; + } else + tmp = scratch_arg_index; + + if (reg_index < 24 + 6) + FAIL_IF(push_inst(compiler, OR | DA(tmp) | S1(0) | S2A(reg_index), tmp)); + else + FAIL_IF(push_inst(compiler, LDUW | DA(tmp) | S1A(30) | IMM(args_offset), tmp)); + break; + } + + reg_index++; + arg_types >>= SLJIT_ARG_SHIFT; + } return SLJIT_SUCCESS; } @@ -539,12 +629,21 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *comp return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(push_inst(compiler, JMPL | D(0) | S1A(31) | IMM(8), UNMOVABLE_INS)); + return push_inst(compiler, RESTORE | D(SLJIT_R0) | S1(SLJIT_R0) | S2(0), UNMOVABLE_INS); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { CHECK_ERROR(); CHECK(check_sljit_emit_return(compiler, op, src, srcw)); - if (op != SLJIT_MOV || !FAST_IS_REG(src)) { + if (TYPE_CAST_NEEDED(op) || !FAST_IS_REG(src)) { FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); src = SLJIT_R0; } @@ -591,7 +690,7 @@ static const sljit_ins data_transfer_insts[16 + 4] = { #undef ARCH_32_64 /* Can perform an operation using at most 1 instruction. */ -static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) { SLJIT_ASSERT(arg & SLJIT_MEM); @@ -632,7 +731,7 @@ static sljit_s32 can_cache(sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, slj } /* Emit the necessary instructions. See can_cache above. */ -static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw) +static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw) { sljit_s32 base, arg2, delay_slot; sljit_ins dest; @@ -660,7 +759,7 @@ static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sl arg2 = reg; else /* It must be a mov operation, so tmp1 must be free to use. */ arg2 = TMP_REG1; - FAIL_IF(push_inst(compiler, SLL_W | D(arg2) | S1(OFFS_REG(arg)) | IMM_ARG | argw, DR(arg2))); + FAIL_IF(push_inst(compiler, SLL_W | D(arg2) | S1(OFFS_REG(arg)) | IMM_ARG | (sljit_ins)argw, DR(arg2))); } } else { @@ -692,7 +791,7 @@ static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sl return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | dest | S1(base) | S2(arg2), delay_slot); } -static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) { if (getput_arg_fast(compiler, flags, reg, arg, argw)) return compiler->error; @@ -701,14 +800,14 @@ static SLJIT_INLINE sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit return getput_arg(compiler, flags, reg, arg, argw, 0, 0); } -static SLJIT_INLINE sljit_s32 emit_op_mem2(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg1, sljit_sw arg1w, sljit_s32 arg2, sljit_sw arg2w) +static SLJIT_INLINE sljit_s32 emit_op_mem2(struct sljit_compiler *compiler, sljit_u32 flags, sljit_s32 reg, sljit_s32 arg1, sljit_sw arg1w, sljit_s32 arg2, sljit_sw arg2w) { if (getput_arg_fast(compiler, flags, reg, arg1, arg1w)) return compiler->error; return getput_arg(compiler, flags, reg, arg1, arg1w, arg2, arg2w); } -static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, +static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_u32 flags, sljit_s32 dst, sljit_sw dstw, sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) @@ -727,11 +826,11 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 compiler->cache_argw = 0; } - if (dst != SLJIT_UNUSED) { + if (dst != TMP_REG2) { if (FAST_IS_REG(dst)) { dst_r = dst; flags |= REG_DEST; - if (op >= SLJIT_MOV && op <= SLJIT_MOV_P) + if (flags & MOVE_OP) sugg_src2_r = dst_r; } else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, TMP_REG1, dst, dstw)) @@ -782,7 +881,7 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 if (FAST_IS_REG(src2)) { src2_r = src2; flags |= REG2_SOURCE; - if (!(flags & REG_DEST) && op >= SLJIT_MOV && op <= SLJIT_MOV_P) + if ((flags & (REG_DEST | MOVE_OP)) == MOVE_OP) dst_r = src2_r; } else if (src2 & SLJIT_IMM) { @@ -793,8 +892,12 @@ static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s3 } else { src2_r = 0; - if ((op >= SLJIT_MOV && op <= SLJIT_MOV_P) && (dst & SLJIT_MEM)) - dst_r = 0; + if (flags & MOVE_OP) { + if (dst & SLJIT_MEM) + dst_r = 0; + else + op = SLJIT_MOV; + } } } } @@ -888,7 +991,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile sljit_s32 dst, sljit_sw dstw, sljit_s32 src, sljit_sw srcw) { - sljit_s32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + sljit_u32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; CHECK_ERROR(); CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw)); @@ -898,33 +1001,29 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile op = GET_OPCODE(op); switch (op) { case SLJIT_MOV: - case SLJIT_MOV_P: - return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA, dst, dstw, TMP_REG1, 0, src, srcw); - +#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32) case SLJIT_MOV_U32: - return emit_op(compiler, SLJIT_MOV_U32, flags | INT_DATA, dst, dstw, TMP_REG1, 0, src, srcw); - case SLJIT_MOV_S32: - return emit_op(compiler, SLJIT_MOV_S32, flags | INT_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, srcw); + case SLJIT_MOV32: +#endif + case SLJIT_MOV_P: + return emit_op(compiler, SLJIT_MOV, flags | WORD_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, srcw); case SLJIT_MOV_U8: - return emit_op(compiler, SLJIT_MOV_U8, flags | BYTE_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u8)srcw : srcw); + return emit_op(compiler, SLJIT_MOV_U8, flags | BYTE_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u8)srcw : srcw); case SLJIT_MOV_S8: - return emit_op(compiler, SLJIT_MOV_S8, flags | BYTE_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s8)srcw : srcw); + return emit_op(compiler, SLJIT_MOV_S8, flags | BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s8)srcw : srcw); case SLJIT_MOV_U16: - return emit_op(compiler, SLJIT_MOV_U16, flags | HALF_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u16)srcw : srcw); + return emit_op(compiler, SLJIT_MOV_U16, flags | HALF_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_u16)srcw : srcw); case SLJIT_MOV_S16: - return emit_op(compiler, SLJIT_MOV_S16, flags | HALF_DATA | SIGNED_DATA, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s16)srcw : srcw); + return emit_op(compiler, SLJIT_MOV_S16, flags | HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_REG1, 0, src, (src & SLJIT_IMM) ? (sljit_s16)srcw : srcw); case SLJIT_NOT: case SLJIT_CLZ: return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw); - - case SLJIT_NEG: - return emit_op(compiler, SLJIT_SUB, flags | IMM_OP, dst, dstw, SLJIT_IMM, 0, src, srcw); } return SLJIT_SUCCESS; @@ -935,17 +1034,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src1, sljit_sw src1w, sljit_s32 src2, sljit_sw src2w) { - sljit_s32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + sljit_u32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; - op = GET_OPCODE(op); switch (op) { case SLJIT_ADD: @@ -975,6 +1071,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG2, 0, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -1015,7 +1125,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { CHECK_ERROR(); CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); @@ -1027,8 +1137,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* Floating point operators */ /* --------------------------------------------------------------------- */ -#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_F32_OP) >> 7)) -#define SELECT_FOP(op, single, double) ((op & SLJIT_F32_OP) ? single : double) +#define FLOAT_DATA(op) ((sljit_ins)DOUBLE_DATA | (((sljit_ins)(op) & SLJIT_32) >> 7)) +#define SELECT_FOP(op, single, double) ((op & SLJIT_32) ? single : double) #define FLOAT_TMP_MEM_OFFSET (22 * sizeof(sljit_sw)) static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op, @@ -1108,11 +1218,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil compiler->cache_arg = 0; compiler->cache_argw = 0; - SLJIT_COMPILE_ASSERT((SLJIT_F32_OP == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error); + SLJIT_COMPILE_ASSERT((SLJIT_32 == 0x100) && !(DOUBLE_DATA & 0x2), float_transfer_bit_error); SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; @@ -1126,7 +1236,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil if (src != dst_r) { if (dst_r != TMP_FREG1) { FAIL_IF(push_inst(compiler, FMOVS | FD(dst_r) | FS2(src), MOVABLE_INS)); - if (!(op & SLJIT_F32_OP)) + if (!(op & SLJIT_32)) FAIL_IF(push_inst(compiler, FMOVS | FDN(dst_r) | FS2N(src), MOVABLE_INS)); } else @@ -1135,17 +1245,17 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil break; case SLJIT_NEG_F64: FAIL_IF(push_inst(compiler, FNEGS | FD(dst_r) | FS2(src), MOVABLE_INS)); - if (dst_r != src && !(op & SLJIT_F32_OP)) + if (dst_r != src && !(op & SLJIT_32)) FAIL_IF(push_inst(compiler, FMOVS | FDN(dst_r) | FS2N(src), MOVABLE_INS)); break; case SLJIT_ABS_F64: FAIL_IF(push_inst(compiler, FABSS | FD(dst_r) | FS2(src), MOVABLE_INS)); - if (dst_r != src && !(op & SLJIT_F32_OP)) + if (dst_r != src && !(op & SLJIT_32)) FAIL_IF(push_inst(compiler, FMOVS | FDN(dst_r) | FS2N(src), MOVABLE_INS)); break; case SLJIT_CONV_F64_FROM_F32: FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSTOD, FDTOS) | FD(dst_r) | FS2(src), MOVABLE_INS)); - op ^= SLJIT_F32_OP; + op ^= SLJIT_32; break; } @@ -1288,10 +1398,12 @@ static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type) case SLJIT_LESS: case SLJIT_GREATER_F64: /* Unordered. */ + case SLJIT_CARRY: return DA(0x5); case SLJIT_GREATER_EQUAL: case SLJIT_LESS_EQUAL_F64: + case SLJIT_NOT_CARRY: return DA(0xd); case SLJIT_GREATER: @@ -1315,15 +1427,17 @@ static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type) return DA(0x2); case SLJIT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return DA(0x9); + /* fallthrough */ case SLJIT_UNORDERED_F64: return DA(0x7); case SLJIT_NOT_OVERFLOW: - if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB)) + if (!(compiler->status_flags_state & (SLJIT_CURRENT_FLAGS_ADD | SLJIT_CURRENT_FLAGS_SUB))) return DA(0x1); + /* fallthrough */ case SLJIT_ORDERED_F64: return DA(0xf); @@ -1412,7 +1526,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF(!jump); set_jump(jump, compiler, JUMP_ADDR); - jump->u.target = srcw; + jump->u.target = (sljit_uw)srcw; if ((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) jump->flags |= IS_MOVABLE; @@ -1460,7 +1574,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co sljit_s32 dst, sljit_sw dstw, sljit_s32 type) { - sljit_s32 reg, flags = HAS_FLAGS(op) ? SET_FLAGS : 0; + sljit_s32 reg; + sljit_u32 flags = HAS_FLAGS(op) ? SET_FLAGS : 0; CHECK_ERROR(); CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type)); diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_32.c b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_32.c index 79a7e8bb..b9a7b397 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_32.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_32.c @@ -26,6 +26,10 @@ /* x86 32-bit arch dependent functions. */ +/* --------------------------------------------------------------------- */ +/* Operators */ +/* --------------------------------------------------------------------- */ + static sljit_s32 emit_do_imm(struct sljit_compiler *compiler, sljit_u8 opcode, sljit_sw imm) { sljit_u8 *inst; @@ -38,314 +42,8 @@ static sljit_s32 emit_do_imm(struct sljit_compiler *compiler, sljit_u8 opcode, s return SLJIT_SUCCESS; } -static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_sw executable_offset) -{ - sljit_s32 type = jump->flags >> TYPE_SHIFT; - - if (type == SLJIT_JUMP) { - *code_ptr++ = JMP_i32; - jump->addr++; - } - else if (type >= SLJIT_FAST_CALL) { - *code_ptr++ = CALL_i32; - jump->addr++; - } - else { - *code_ptr++ = GROUP_0F; - *code_ptr++ = get_jump_code(type); - jump->addr += 2; - } - - if (jump->flags & JUMP_LABEL) - jump->flags |= PATCH_MW; - else - sljit_unaligned_store_sw(code_ptr, jump->u.target - (jump->addr + 4) - (sljit_uw)executable_offset); - code_ptr += 4; - - return code_ptr; -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, - sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, - sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) -{ - sljit_s32 args, size; - sljit_u8 *inst; - - CHECK_ERROR(); - CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); - set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - - /* Emit ENDBR32 at function entry if needed. */ - FAIL_IF(emit_endbranch(compiler)); - - args = get_arg_count(arg_types); - compiler->args = args; - - /* [esp+0] for saving temporaries and function calls. */ - compiler->stack_tmp_size = 2 * sizeof(sljit_sw); - -#if !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (scratches > 3) - compiler->stack_tmp_size = 3 * sizeof(sljit_sw); -#endif - - compiler->saveds_offset = compiler->stack_tmp_size; - if (scratches > 3) - compiler->saveds_offset += ((scratches > (3 + 6)) ? 6 : (scratches - 3)) * sizeof(sljit_sw); - - compiler->locals_offset = compiler->saveds_offset; - - if (saveds > 3) - compiler->locals_offset += (saveds - 3) * sizeof(sljit_sw); - - if (options & SLJIT_F64_ALIGNMENT) - compiler->locals_offset = (compiler->locals_offset + sizeof(sljit_f64) - 1) & ~(sizeof(sljit_f64) - 1); - - size = 1 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3); -#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - size += (args > 0 ? (args * 2) : 0) + (args > 2 ? 2 : 0); -#else - size += (args > 0 ? (2 + args * 3) : 0); -#endif - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); - - INC_SIZE(size); - PUSH_REG(reg_map[TMP_REG1]); -#if !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (args > 0) { - *inst++ = MOV_r_rm; - *inst++ = MOD_REG | (reg_map[TMP_REG1] << 3) | 0x4 /* esp */; - } -#endif - if (saveds > 2 || scratches > 9) - PUSH_REG(reg_map[SLJIT_S2]); - if (saveds > 1 || scratches > 10) - PUSH_REG(reg_map[SLJIT_S1]); - if (saveds > 0 || scratches > 11) - PUSH_REG(reg_map[SLJIT_S0]); - -#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (args > 0) { - inst[0] = MOV_r_rm; - inst[1] = MOD_REG | (reg_map[SLJIT_S0] << 3) | reg_map[SLJIT_R2]; - inst += 2; - } - if (args > 1) { - inst[0] = MOV_r_rm; - inst[1] = MOD_REG | (reg_map[SLJIT_S1] << 3) | reg_map[SLJIT_R1]; - inst += 2; - } - if (args > 2) { - inst[0] = MOV_r_rm; - inst[1] = MOD_DISP8 | (reg_map[SLJIT_S2] << 3) | 0x4 /* esp */; - inst[2] = 0x24; - inst[3] = sizeof(sljit_sw) * (3 + 2); /* saveds >= 3 as well. */ - } -#else - if (args > 0) { - inst[0] = MOV_r_rm; - inst[1] = MOD_DISP8 | (reg_map[SLJIT_S0] << 3) | reg_map[TMP_REG1]; - inst[2] = sizeof(sljit_sw) * 2; - inst += 3; - } - if (args > 1) { - inst[0] = MOV_r_rm; - inst[1] = MOD_DISP8 | (reg_map[SLJIT_S1] << 3) | reg_map[TMP_REG1]; - inst[2] = sizeof(sljit_sw) * 3; - inst += 3; - } - if (args > 2) { - inst[0] = MOV_r_rm; - inst[1] = MOD_DISP8 | (reg_map[SLJIT_S2] << 3) | reg_map[TMP_REG1]; - inst[2] = sizeof(sljit_sw) * 4; - } -#endif - - SLJIT_ASSERT(SLJIT_LOCALS_OFFSET > 0); - -#if defined(__APPLE__) - /* Ignore pushed registers and SLJIT_LOCALS_OFFSET when computing the aligned local size. */ - saveds = (2 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3)) * sizeof(sljit_uw); - local_size = ((SLJIT_LOCALS_OFFSET + saveds + local_size + 15) & ~15) - saveds; -#else - if (options & SLJIT_F64_ALIGNMENT) - local_size = SLJIT_LOCALS_OFFSET + ((local_size + sizeof(sljit_f64) - 1) & ~(sizeof(sljit_f64) - 1)); - else - local_size = SLJIT_LOCALS_OFFSET + ((local_size + sizeof(sljit_sw) - 1) & ~(sizeof(sljit_sw) - 1)); -#endif - - compiler->local_size = local_size; - -#ifdef _WIN32 - if (local_size > 0) { - if (local_size <= 4 * 4096) { - if (local_size > 4096) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096); - if (local_size > 2 * 4096) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 2); - if (local_size > 3 * 4096) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 3); - } - else { - EMIT_MOV(compiler, SLJIT_R0, 0, SLJIT_SP, 0); - EMIT_MOV(compiler, SLJIT_R1, 0, SLJIT_IMM, (local_size - 1) >> 12); - - SLJIT_ASSERT (reg_map[SLJIT_R0] == 0); - - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_R0), -4096); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, 4096)); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1)); - - inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); - FAIL_IF(!inst); - - INC_SIZE(2); - inst[0] = JNE_i8; - inst[1] = (sljit_s8) -16; - } - - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -local_size); - } -#endif - - SLJIT_ASSERT(local_size > 0); - -#if !defined(__APPLE__) - if (options & SLJIT_F64_ALIGNMENT) { - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_SP, 0); - - /* Some space might allocated during sljit_grow_stack() above on WIN32. */ - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size + sizeof(sljit_sw))); - -#if defined _WIN32 && !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (compiler->local_size > 1024) - FAIL_IF(emit_cum_binary(compiler, BINARY_OPCODE(ADD), - TMP_REG1, 0, TMP_REG1, 0, SLJIT_IMM, sizeof(sljit_sw))); -#endif - - inst = (sljit_u8*)ensure_buf(compiler, 1 + 6); - FAIL_IF(!inst); - - INC_SIZE(6); - inst[0] = GROUP_BINARY_81; - inst[1] = MOD_REG | AND | reg_map[SLJIT_SP]; - sljit_unaligned_store_sw(inst + 2, ~(sizeof(sljit_f64) - 1)); - - /* The real local size must be used. */ - return emit_mov(compiler, SLJIT_MEM1(SLJIT_SP), compiler->local_size, TMP_REG1, 0); - } -#endif - return emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size); -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, - sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, - sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) -{ - CHECK_ERROR(); - CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); - set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - - compiler->args = get_arg_count(arg_types); - - /* [esp+0] for saving temporaries and function calls. */ - compiler->stack_tmp_size = 2 * sizeof(sljit_sw); - -#if !(defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (scratches > 3) - compiler->stack_tmp_size = 3 * sizeof(sljit_sw); -#endif - - compiler->saveds_offset = compiler->stack_tmp_size; - if (scratches > 3) - compiler->saveds_offset += ((scratches > (3 + 6)) ? 6 : (scratches - 3)) * sizeof(sljit_sw); - - compiler->locals_offset = compiler->saveds_offset; - - if (saveds > 3) - compiler->locals_offset += (saveds - 3) * sizeof(sljit_sw); - - if (options & SLJIT_F64_ALIGNMENT) - compiler->locals_offset = (compiler->locals_offset + sizeof(sljit_f64) - 1) & ~(sizeof(sljit_f64) - 1); - -#if defined(__APPLE__) - saveds = (2 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3)) * sizeof(sljit_uw); - compiler->local_size = ((SLJIT_LOCALS_OFFSET + saveds + local_size + 15) & ~15) - saveds; -#else - if (options & SLJIT_F64_ALIGNMENT) - compiler->local_size = SLJIT_LOCALS_OFFSET + ((local_size + sizeof(sljit_f64) - 1) & ~(sizeof(sljit_f64) - 1)); - else - compiler->local_size = SLJIT_LOCALS_OFFSET + ((local_size + sizeof(sljit_sw) - 1) & ~(sizeof(sljit_sw) - 1)); -#endif - return SLJIT_SUCCESS; -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) -{ - sljit_s32 size; - sljit_u8 *inst; - - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); - SLJIT_ASSERT(compiler->args >= 0); - - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); - - SLJIT_ASSERT(compiler->local_size > 0); - -#if !defined(__APPLE__) - if (compiler->options & SLJIT_F64_ALIGNMENT) - EMIT_MOV(compiler, SLJIT_SP, 0, SLJIT_MEM1(SLJIT_SP), compiler->local_size) - else - FAIL_IF(emit_cum_binary(compiler, BINARY_OPCODE(ADD), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, compiler->local_size)); -#else - FAIL_IF(emit_cum_binary(compiler, BINARY_OPCODE(ADD), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, compiler->local_size)); -#endif - - size = 2 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + - (compiler->saveds <= 3 ? compiler->saveds : 3); -#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (compiler->args > 2) - size += 2; -#endif - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); - - INC_SIZE(size); - - if (compiler->saveds > 0 || compiler->scratches > 11) - POP_REG(reg_map[SLJIT_S0]); - if (compiler->saveds > 1 || compiler->scratches > 10) - POP_REG(reg_map[SLJIT_S1]); - if (compiler->saveds > 2 || compiler->scratches > 9) - POP_REG(reg_map[SLJIT_S2]); - POP_REG(reg_map[TMP_REG1]); -#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) - if (compiler->args > 2) - RET_I16(sizeof(sljit_sw)); - else - RET(); -#else - RET(); -#endif - - return SLJIT_SUCCESS; -} - -/* --------------------------------------------------------------------- */ -/* Operators */ -/* --------------------------------------------------------------------- */ - /* Size contains the flags as well. */ -static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 size, +static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_uw size, /* The register or immediate operand. */ sljit_s32 a, sljit_sw imma, /* The general operand (not immediate). */ @@ -353,8 +51,9 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 { sljit_u8 *inst; sljit_u8 *buf_ptr; - sljit_s32 flags = size & ~0xf; - sljit_s32 inst_size; + sljit_u8 reg_map_b; + sljit_uw flags = size; + sljit_uw inst_size; /* Both cannot be switched on. */ SLJIT_ASSERT((flags & (EX86_BIN_INS | EX86_SHIFT_INS)) != (EX86_BIN_INS | EX86_SHIFT_INS)); @@ -367,8 +66,6 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 SLJIT_ASSERT((flags & (EX86_PREF_F2 | EX86_PREF_F3)) != (EX86_PREF_F2 | EX86_PREF_F3) && (flags & (EX86_PREF_F2 | EX86_PREF_66)) != (EX86_PREF_F2 | EX86_PREF_66) && (flags & (EX86_PREF_F3 | EX86_PREF_66)) != (EX86_PREF_F3 | EX86_PREF_66)); - /* We don't support (%ebp). */ - SLJIT_ASSERT(!(b & SLJIT_MEM) || immb || reg_map[b & REG_MASK] != 5); size &= 0xf; inst_size = size; @@ -381,7 +78,7 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 /* Calculate size of b. */ inst_size += 1; /* mod r/m byte. */ if (b & SLJIT_MEM) { - if ((b & REG_MASK) == SLJIT_UNUSED) + if (!(b & REG_MASK)) inst_size += sizeof(sljit_sw); else if (immb != 0 && !(b & OFFS_REG_MASK)) { /* Immediate operand. */ @@ -390,11 +87,13 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 else inst_size += sizeof(sljit_sw); } + else if (reg_map[b & REG_MASK] == 5) + inst_size += sizeof(sljit_s8); if ((b & REG_MASK) == SLJIT_SP && !(b & OFFS_REG_MASK)) b |= TO_OFFS_REG(SLJIT_SP); - if ((b & OFFS_REG_MASK) != SLJIT_UNUSED) + if (b & OFFS_REG_MASK) inst_size += 1; /* SIB byte. */ } @@ -445,9 +144,9 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 if (a & SLJIT_IMM) *buf_ptr = 0; else if (!(flags & EX86_SSE2_OP1)) - *buf_ptr = reg_map[a] << 3; + *buf_ptr = U8(reg_map[a] << 3); else - *buf_ptr = a << 3; + *buf_ptr = U8(a << 3); } else { if (a & SLJIT_IMM) { @@ -460,27 +159,30 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 *buf_ptr = 0; } - if (!(b & SLJIT_MEM)) - *buf_ptr++ |= MOD_REG + ((!(flags & EX86_SSE2_OP2)) ? reg_map[b] : b); - else if ((b & REG_MASK) != SLJIT_UNUSED) { - if ((b & OFFS_REG_MASK) == SLJIT_UNUSED || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP)) { - if (immb != 0) { + if (!(b & SLJIT_MEM)) { + *buf_ptr = U8(*buf_ptr | MOD_REG | (!(flags & EX86_SSE2_OP2) ? reg_map[b] : b)); + buf_ptr++; + } else if (b & REG_MASK) { + reg_map_b = reg_map[b & REG_MASK]; + + if (!(b & OFFS_REG_MASK) || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP) || reg_map_b == 5) { + if (immb != 0 || reg_map_b == 5) { if (immb <= 127 && immb >= -128) *buf_ptr |= 0x40; else *buf_ptr |= 0x80; } - if ((b & OFFS_REG_MASK) == SLJIT_UNUSED) - *buf_ptr++ |= reg_map[b & REG_MASK]; + if (!(b & OFFS_REG_MASK)) + *buf_ptr++ |= reg_map_b; else { *buf_ptr++ |= 0x04; - *buf_ptr++ = reg_map[b & REG_MASK] | (reg_map[OFFS_REG(b)] << 3); + *buf_ptr++ = U8(reg_map_b | (reg_map[OFFS_REG(b)] << 3)); } - if (immb != 0) { + if (immb != 0 || reg_map_b == 5) { if (immb <= 127 && immb >= -128) - *buf_ptr++ = immb; /* 8 bit displacement. */ + *buf_ptr++ = U8(immb); /* 8 bit displacement. */ else { sljit_unaligned_store_sw(buf_ptr, immb); /* 32 bit displacement. */ buf_ptr += sizeof(sljit_sw); @@ -489,7 +191,7 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 } else { *buf_ptr++ |= 0x04; - *buf_ptr++ = reg_map[b & REG_MASK] | (reg_map[OFFS_REG(b)] << 3) | (immb << 6); + *buf_ptr++ = U8(reg_map_b | (reg_map[OFFS_REG(b)] << 3) | (immb << 6)); } } else { @@ -500,9 +202,9 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 if (a & SLJIT_IMM) { if (flags & EX86_BYTE_ARG) - *buf_ptr = imma; + *buf_ptr = U8(imma); else if (flags & EX86_HALF_ARG) - sljit_unaligned_store_s16(buf_ptr, imma); + sljit_unaligned_store_s16(buf_ptr, (sljit_s16)imma); else if (!(flags & EX86_SHIFT_INS)) sljit_unaligned_store_sw(buf_ptr, imma); } @@ -510,35 +212,450 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 return !(flags & EX86_SHIFT_INS) ? inst : (inst + 1); } +/* --------------------------------------------------------------------- */ +/* Enter / return */ +/* --------------------------------------------------------------------- */ + +static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_sw executable_offset) +{ + sljit_uw type = jump->flags >> TYPE_SHIFT; + + if (type == SLJIT_JUMP) { + *code_ptr++ = JMP_i32; + jump->addr++; + } + else if (type >= SLJIT_FAST_CALL) { + *code_ptr++ = CALL_i32; + jump->addr++; + } + else { + *code_ptr++ = GROUP_0F; + *code_ptr++ = get_jump_code(type); + jump->addr += 2; + } + + if (jump->flags & JUMP_LABEL) + jump->flags |= PATCH_MW; + else + sljit_unaligned_store_sw(code_ptr, (sljit_sw)(jump->u.target - (jump->addr + 4) - (sljit_uw)executable_offset)); + code_ptr += 4; + + return code_ptr; +} + +#define ENTER_R2_USED 0x00001 +#define ENTER_R2_TO_S 0x00002 +#define ENTER_R2_TO_R0 0x00004 +#define ENTER_R1_TO_S 0x00008 +#define ENTER_TMP_TO_R4 0x00010 +#define ENTER_TMP_TO_S 0x00020 + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, + sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) +{ + sljit_s32 word_arg_count, saved_arg_count, float_arg_count; + sljit_s32 size, locals_offset, args_size, types, status; + sljit_u8 *inst; +#ifdef _WIN32 + sljit_s32 r2_offset = -1; +#endif + + CHECK_ERROR(); + CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); + set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + + /* Emit ENDBR32 at function entry if needed. */ + FAIL_IF(emit_endbranch(compiler)); + + SLJIT_COMPILE_ASSERT(SLJIT_FR0 == 1, float_register_index_start); + + arg_types >>= SLJIT_ARG_SHIFT; + types = arg_types; + word_arg_count = 0; + saved_arg_count = 0; + float_arg_count = 0; + args_size = SSIZE_OF(sw); + status = 0; + while (types) { + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + float_arg_count++; + FAIL_IF(emit_sse2_load(compiler, 0, float_arg_count, SLJIT_MEM1(SLJIT_SP), args_size)); + args_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + FAIL_IF(emit_sse2_load(compiler, 1, float_arg_count, SLJIT_MEM1(SLJIT_SP), args_size)); + args_size += SSIZE_OF(f32); + break; + default: + word_arg_count++; + + if (!(types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + saved_arg_count++; + if (saved_arg_count == 4) + status |= ENTER_TMP_TO_S; + } else { + if (word_arg_count == 4) + status |= ENTER_TMP_TO_R4; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (word_arg_count == 3) + status |= ENTER_R2_USED; +#endif + } + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (word_arg_count <= 2 && !(options & SLJIT_ENTER_CDECL)) + break; +#endif + + args_size += SSIZE_OF(sw); + break; + } + types >>= SLJIT_ARG_SHIFT; + } + + args_size -= SSIZE_OF(sw); + compiler->args_size = args_size; + + /* [esp+0] for saving temporaries and function calls. */ + locals_offset = 2 * SSIZE_OF(sw); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if ((options & SLJIT_ENTER_CDECL) && scratches >= 3) + locals_offset = 4 * SSIZE_OF(sw); +#else + if (scratches >= 3) + locals_offset = 4 * SSIZE_OF(sw); +#endif + + compiler->scratches_offset = locals_offset; + + if (scratches > 3) + locals_offset += ((scratches > (3 + 6)) ? 6 : (scratches - 3)) * SSIZE_OF(sw); + + if (saveds > 3) + locals_offset += (saveds - 3) * SSIZE_OF(sw); + + compiler->locals_offset = locals_offset; + + size = 1 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3); + inst = (sljit_u8*)ensure_buf(compiler, (sljit_uw)(size + 1)); + FAIL_IF(!inst); + + INC_SIZE((sljit_uw)size); + PUSH_REG(reg_map[TMP_REG1]); + if (saveds > 2 || scratches > 9) + PUSH_REG(reg_map[SLJIT_S2]); + if (saveds > 1 || scratches > 10) + PUSH_REG(reg_map[SLJIT_S1]); + if (saveds > 0 || scratches > 11) + PUSH_REG(reg_map[SLJIT_S0]); + + size *= SSIZE_OF(sw); + + if (status & (ENTER_TMP_TO_R4 | ENTER_TMP_TO_S)) + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), args_size + size); + + size += SSIZE_OF(sw); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL)) + size += args_size; +#endif + + local_size = ((locals_offset + local_size + size + 0xf) & ~0xf) - size; + compiler->local_size = local_size; + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL)) + size -= args_size; +#endif + + word_arg_count = 0; + saved_arg_count = 0; + args_size = size; + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + args_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + args_size += SSIZE_OF(f32); + break; + default: + word_arg_count++; + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL) && word_arg_count <= 2) { + if (word_arg_count == 1) { + if (status & ENTER_R2_USED) { + EMIT_MOV(compiler, (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) ? SLJIT_R0 : SLJIT_S0, 0, SLJIT_R2, 0); + } else if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + status |= ENTER_R2_TO_S; + saved_arg_count++; + } else + status |= ENTER_R2_TO_R0; + } else if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + status |= ENTER_R1_TO_S; + saved_arg_count++; + } + break; + } +#endif + if (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) { + SLJIT_ASSERT(word_arg_count <= 3 || (status & ENTER_TMP_TO_R4)); + + if (word_arg_count <= 3) { +#ifdef _WIN32 + if (word_arg_count == 3 && local_size > 4 * 4096) + r2_offset = local_size + args_size; + else +#endif + EMIT_MOV(compiler, word_arg_count, 0, SLJIT_MEM1(SLJIT_SP), args_size); + } + } else { + SLJIT_ASSERT(saved_arg_count <= 3 || (status & ENTER_TMP_TO_S)); + + if (saved_arg_count <= 3) + EMIT_MOV(compiler, SLJIT_S0 - saved_arg_count, 0, SLJIT_MEM1(SLJIT_SP), args_size); + saved_arg_count++; + } + args_size += SSIZE_OF(sw); + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL)) { + if (status & ENTER_R2_TO_R0) + EMIT_MOV(compiler, SLJIT_R0, 0, SLJIT_R2, 0); + + saved_arg_count = 0; + if (status & ENTER_R2_TO_S) { + EMIT_MOV(compiler, SLJIT_S0, 0, SLJIT_R2, 0); + saved_arg_count++; + } + + if (status & ENTER_R1_TO_S) + EMIT_MOV(compiler, SLJIT_S0 - saved_arg_count, 0, SLJIT_R1, 0); + } +#endif + + SLJIT_ASSERT(SLJIT_LOCALS_OFFSET > 0); + +#ifdef _WIN32 + SLJIT_ASSERT(r2_offset == -1 || local_size > 4 * 4096); + + if (local_size > 4096) { + if (local_size <= 4 * 4096) { + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -4096); + + if (local_size > 2 * 4096) + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 2); + if (local_size > 3 * 4096) + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 3); + } + else { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_IMM, local_size >> 12); + + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -4096); + BINARY_IMM32(SUB, 4096, SLJIT_SP, 0); + + inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); + FAIL_IF(!inst); + + INC_SIZE(2); + inst[0] = LOOP_i8; + inst[1] = (sljit_u8)-16; + local_size &= 0xfff; + } + } + + if (local_size > 0) { + BINARY_IMM32(OR, 0, SLJIT_MEM1(SLJIT_SP), -local_size); + BINARY_IMM32(SUB, local_size, SLJIT_SP, 0); + } + + if (r2_offset != -1) + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), r2_offset); + +#else /* !_WIN32 */ + + SLJIT_ASSERT(local_size > 0); + + BINARY_IMM32(SUB, local_size, SLJIT_SP, 0); + +#endif /* _WIN32 */ + + if (status & (ENTER_TMP_TO_R4 | ENTER_TMP_TO_S)) { + size = (status & ENTER_TMP_TO_R4) ? compiler->scratches_offset : compiler->locals_offset - SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), size, TMP_REG1, 0); + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, + sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) +{ + sljit_s32 args_size, locals_offset; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + sljit_s32 word_arg_count = 0; +#endif + + CHECK_ERROR(); + CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); + set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + + arg_types >>= SLJIT_ARG_SHIFT; + args_size = 0; + while (arg_types) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + args_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + args_size += SSIZE_OF(f32); + break; + default: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (word_arg_count >= 2) + args_size += SSIZE_OF(sw); + word_arg_count++; +#else + args_size += SSIZE_OF(sw); +#endif + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } + + compiler->args_size = args_size; + + /* [esp+0] for saving temporaries and function calls. */ + locals_offset = 2 * SSIZE_OF(sw); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if ((options & SLJIT_ENTER_CDECL) && scratches >= 3) + locals_offset = 4 * SSIZE_OF(sw); +#else + if (scratches >= 3) + locals_offset = 4 * SSIZE_OF(sw); +#endif + + compiler->scratches_offset = locals_offset; + + if (scratches > 3) + locals_offset += ((scratches > (3 + 6)) ? 6 : (scratches - 3)) * SSIZE_OF(sw); + + if (saveds > 3) + locals_offset += (saveds - 3) * SSIZE_OF(sw); + + compiler->locals_offset = locals_offset; + + saveds = (2 + (scratches > 9 ? (scratches - 9) : 0) + (saveds <= 3 ? saveds : 3)) * SSIZE_OF(sw); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(options & SLJIT_ENTER_CDECL)) + saveds += args_size; +#endif + + compiler->local_size = ((locals_offset + local_size + saveds + 0xf) & ~0xf) - saveds; + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) +{ + sljit_uw size; + sljit_u8 *inst; + + size = (sljit_uw)(1 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + + (compiler->saveds <= 3 ? compiler->saveds : 3)); + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + + INC_SIZE(size); + + if (compiler->saveds > 0 || compiler->scratches > 11) + POP_REG(reg_map[SLJIT_S0]); + if (compiler->saveds > 1 || compiler->scratches > 10) + POP_REG(reg_map[SLJIT_S1]); + if (compiler->saveds > 2 || compiler->scratches > 9) + POP_REG(reg_map[SLJIT_S2]); + POP_REG(reg_map[TMP_REG1]); + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + sljit_uw size; + sljit_u8 *inst; + + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + SLJIT_ASSERT(compiler->args_size >= 0); + SLJIT_ASSERT(compiler->local_size > 0); + + BINARY_IMM32(ADD, compiler->local_size, SLJIT_SP, 0); + + FAIL_IF(emit_stack_frame_release(compiler)); + + size = 1; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (compiler->args_size > 0 && !(compiler->options & SLJIT_ENTER_CDECL)) + size = 3; +#endif + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + + INC_SIZE(size); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (compiler->args_size > 0 && !(compiler->options & SLJIT_ENTER_CDECL)) { + RET_I16(U8(compiler->args_size)); + return SLJIT_SUCCESS; + } +#endif + + RET(); + return SLJIT_SUCCESS; +} + /* --------------------------------------------------------------------- */ /* Call / return instructions */ /* --------------------------------------------------------------------- */ #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) -static sljit_s32 c_fast_call_get_stack_size(sljit_s32 arg_types, sljit_s32 *word_arg_count_ptr) +static sljit_sw c_fast_call_get_stack_size(sljit_s32 arg_types, sljit_s32 *word_arg_count_ptr) { - sljit_s32 stack_size = 0; + sljit_sw stack_size = 0; sljit_s32 word_arg_count = 0; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - stack_size += sizeof(sljit_f32); - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: - stack_size += sizeof(sljit_f64); + stack_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + stack_size += SSIZE_OF(f32); break; default: word_arg_count++; if (word_arg_count > 2) - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } if (word_arg_count_ptr) @@ -548,12 +665,12 @@ static sljit_s32 c_fast_call_get_stack_size(sljit_s32 arg_types, sljit_s32 *word } static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, - sljit_s32 arg_types, sljit_s32 stack_size, sljit_s32 word_arg_count, sljit_s32 swap_args) + sljit_s32 arg_types, sljit_sw stack_size, sljit_s32 word_arg_count, sljit_s32 swap_args) { sljit_u8 *inst; sljit_s32 float_arg_count; - if (stack_size == sizeof(sljit_sw) && word_arg_count == 3) { + if (stack_size == SSIZE_OF(sw) && word_arg_count == 3) { inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); FAIL_IF(!inst); INC_SIZE(1); @@ -561,41 +678,40 @@ static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, } else if (stack_size > 0) { if (word_arg_count >= 4) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), compiler->saveds_offset - sizeof(sljit_sw)); + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), compiler->scratches_offset); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, stack_size)); + BINARY_IMM32(SUB, stack_size, SLJIT_SP, 0); stack_size = 0; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; word_arg_count = 0; float_arg_count = 0; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - float_arg_count++; - FAIL_IF(emit_sse2_store(compiler, 1, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); - stack_size += sizeof(sljit_f32); - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: float_arg_count++; FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); - stack_size += sizeof(sljit_f64); + stack_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + FAIL_IF(emit_sse2_store(compiler, 1, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); + stack_size += SSIZE_OF(f32); break; default: word_arg_count++; if (word_arg_count == 3) { EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size, SLJIT_R2, 0); - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); } else if (word_arg_count == 4) { EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size, TMP_REG1, 0); - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); } break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } } @@ -605,7 +721,7 @@ static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, FAIL_IF(!inst); INC_SIZE(1); - *inst++ = XCHG_EAX_r | reg_map[SLJIT_R2]; + *inst++ = U8(XCHG_EAX_r | reg_map[SLJIT_R2]); } else { inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); @@ -613,7 +729,7 @@ static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, INC_SIZE(2); *inst++ = MOV_r_rm; - *inst++ = MOD_REG | (reg_map[SLJIT_R2] << 3) | reg_map[SLJIT_R0]; + *inst++ = U8(MOD_REG | (reg_map[SLJIT_R2] << 3) | reg_map[SLJIT_R0]); } } @@ -624,77 +740,73 @@ static sljit_s32 c_fast_call_with_args(struct sljit_compiler *compiler, static sljit_s32 cdecl_call_get_stack_size(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *word_arg_count_ptr) { - sljit_s32 stack_size = 0; + sljit_sw stack_size = 0; sljit_s32 word_arg_count = 0; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - stack_size += sizeof(sljit_f32); - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: - stack_size += sizeof(sljit_f64); + stack_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + stack_size += SSIZE_OF(f32); break; default: word_arg_count++; - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } if (word_arg_count_ptr) *word_arg_count_ptr = word_arg_count; - if (stack_size <= compiler->stack_tmp_size) + if (stack_size <= compiler->scratches_offset) return 0; -#if defined(__APPLE__) - return ((stack_size - compiler->stack_tmp_size + 15) & ~15); -#else - return stack_size - compiler->stack_tmp_size; -#endif + return ((stack_size - compiler->scratches_offset + 0xf) & ~0xf); } static sljit_s32 cdecl_call_with_args(struct sljit_compiler *compiler, - sljit_s32 arg_types, sljit_s32 stack_size, sljit_s32 word_arg_count) + sljit_s32 arg_types, sljit_sw stack_size, sljit_s32 word_arg_count) { sljit_s32 float_arg_count = 0; + sljit_u8 *inst; if (word_arg_count >= 4) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), compiler->saveds_offset - sizeof(sljit_sw)); + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), compiler->scratches_offset); if (stack_size > 0) - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, stack_size)); + BINARY_IMM32(SUB, stack_size, SLJIT_SP, 0); stack_size = 0; word_arg_count = 0; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - float_arg_count++; - FAIL_IF(emit_sse2_store(compiler, 1, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); - stack_size += sizeof(sljit_f32); - break; + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: float_arg_count++; FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); - stack_size += sizeof(sljit_f64); + stack_size += SSIZE_OF(f64); + break; + case SLJIT_ARG_TYPE_F32: + float_arg_count++; + FAIL_IF(emit_sse2_store(compiler, 1, SLJIT_MEM1(SLJIT_SP), stack_size, float_arg_count)); + stack_size += SSIZE_OF(f32); break; default: word_arg_count++; EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size, (word_arg_count >= 4) ? TMP_REG1 : word_arg_count, 0); - stack_size += sizeof(sljit_sw); + stack_size += SSIZE_OF(sw); break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -707,13 +819,12 @@ static sljit_s32 post_call_with_args(struct sljit_compiler *compiler, sljit_s32 single; if (stack_size > 0) - FAIL_IF(emit_cum_binary(compiler, BINARY_OPCODE(ADD), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, stack_size)); + BINARY_IMM32(ADD, stack_size, SLJIT_SP, 0); - if ((arg_types & SLJIT_DEF_MASK) < SLJIT_ARG_TYPE_F32) + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) return SLJIT_SUCCESS; - single = ((arg_types & SLJIT_DEF_MASK) == SLJIT_ARG_TYPE_F32); + single = ((arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F32); inst = (sljit_u8*)ensure_buf(compiler, 1 + 3); FAIL_IF(!inst); @@ -725,16 +836,399 @@ static sljit_s32 post_call_with_args(struct sljit_compiler *compiler, return emit_sse2_load(compiler, single, SLJIT_FR0, SLJIT_MEM1(SLJIT_SP), 0); } +static sljit_s32 tail_call_with_args(struct sljit_compiler *compiler, + sljit_s32 *extra_space, sljit_s32 arg_types, + sljit_s32 src, sljit_sw srcw) +{ + sljit_sw args_size, prev_args_size, saved_regs_size; + sljit_sw types, word_arg_count, float_arg_count; + sljit_sw stack_size, prev_stack_size, min_size, offset; + sljit_sw word_arg4_offset; + sljit_u8 r2_offset = 0; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + sljit_u8 fast_call = (*extra_space & 0xff) == SLJIT_CALL; +#endif + sljit_u8* inst; + + ADJUST_LOCAL_OFFSET(src, srcw); + CHECK_EXTRA_REGS(src, srcw, (void)0); + + saved_regs_size = (1 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + + (compiler->saveds <= 3 ? compiler->saveds : 3)) * SSIZE_OF(sw); + + word_arg_count = 0; + float_arg_count = 0; + arg_types >>= SLJIT_ARG_SHIFT; + types = 0; + args_size = 0; + + while (arg_types != 0) { + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); + + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + args_size += SSIZE_OF(f64); + float_arg_count++; + break; + case SLJIT_ARG_TYPE_F32: + args_size += SSIZE_OF(f32); + float_arg_count++; + break; + default: + word_arg_count++; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!fast_call || word_arg_count > 2) + args_size += SSIZE_OF(sw); +#else + args_size += SSIZE_OF(sw); +#endif + break; + } + arg_types >>= SLJIT_ARG_SHIFT; + } + + if (args_size <= compiler->args_size +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + && (!(compiler->options & SLJIT_ENTER_CDECL) || args_size == 0 || !fast_call) +#endif /* SLJIT_X86_32_FASTCALL */ + && 1) { +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + *extra_space = fast_call ? 0 : args_size; + prev_args_size = compiler->args_size; + stack_size = prev_args_size + SSIZE_OF(sw) + saved_regs_size; +#else /* !SLJIT_X86_32_FASTCALL */ + *extra_space = 0; + stack_size = args_size + SSIZE_OF(sw) + saved_regs_size; +#endif /* SLJIT_X86_32_FASTCALL */ + + offset = stack_size + compiler->local_size; + + if (!(src & SLJIT_IMM) && src != SLJIT_R0) { + if (word_arg_count >= 1) { + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), 0, SLJIT_R0, 0); + r2_offset = sizeof(sljit_sw); + } + EMIT_MOV(compiler, SLJIT_R0, 0, src, srcw); + } + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(compiler->options & SLJIT_ENTER_CDECL)) { + if (!fast_call) + offset -= SSIZE_OF(sw); + + if (word_arg_count >= 3) { + word_arg4_offset = SSIZE_OF(sw); + + if (word_arg_count + float_arg_count >= 4) { + word_arg4_offset = SSIZE_OF(sw) + SSIZE_OF(sw); + if ((types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F64) + word_arg4_offset = SSIZE_OF(sw) + SSIZE_OF(f64); + } + + /* In cdecl mode, at least one more word value must + * be present on the stack before the return address. */ + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset - word_arg4_offset, SLJIT_R2, 0); + } + + if (fast_call) { + if (args_size < prev_args_size) { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), offset - prev_args_size - SSIZE_OF(sw)); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset - args_size - SSIZE_OF(sw), SLJIT_R2, 0); + } + } else if (prev_args_size > 0) { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), offset - prev_args_size); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } + } +#endif /* SLJIT_X86_32_FASTCALL */ + + while (types != 0) { + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + offset -= SSIZE_OF(f64); + FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), offset, float_arg_count)); + float_arg_count--; + break; + case SLJIT_ARG_TYPE_F32: + offset -= SSIZE_OF(f32); + FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), offset, float_arg_count)); + float_arg_count--; + break; + default: + switch (word_arg_count) { + case 1: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) { + EMIT_MOV(compiler, SLJIT_R2, 0, r2_offset != 0 ? SLJIT_MEM1(SLJIT_SP) : SLJIT_R0, 0); + break; + } +#endif + offset -= SSIZE_OF(sw); + if (r2_offset != 0) { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), 0); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } else + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R0, 0); + break; + case 2: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) + break; +#endif + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R1, 0); + break; + case 3: + offset -= SSIZE_OF(sw); + break; + case 4: + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), compiler->scratches_offset); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + break; + } + word_arg_count--; + break; + } + types >>= SLJIT_ARG_SHIFT; + } + + BINARY_IMM32(ADD, compiler->local_size, SLJIT_SP, 0); + FAIL_IF(emit_stack_frame_release(compiler)); + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (args_size < prev_args_size) + BINARY_IMM32(ADD, prev_args_size - args_size, SLJIT_SP, 0); +#endif + + return SLJIT_SUCCESS; + } + + stack_size = args_size + SSIZE_OF(sw); + + if (word_arg_count >= 1 && !(src & SLJIT_IMM) && src != SLJIT_R0) { + r2_offset = SSIZE_OF(sw); + stack_size += SSIZE_OF(sw); + } + + if (word_arg_count >= 3) + stack_size += SSIZE_OF(sw); + + prev_args_size = 0; +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (!(compiler->options & SLJIT_ENTER_CDECL)) + prev_args_size = compiler->args_size; +#endif + + prev_stack_size = prev_args_size + SSIZE_OF(sw) + saved_regs_size; + min_size = prev_stack_size + compiler->local_size; + + word_arg4_offset = compiler->scratches_offset; + + if (stack_size > min_size) { + BINARY_IMM32(SUB, stack_size - min_size, SLJIT_SP, 0); + if (src == SLJIT_MEM1(SLJIT_SP)) + srcw += stack_size - min_size; + word_arg4_offset += stack_size - min_size; + } + else + stack_size = min_size; + + if (word_arg_count >= 3) { + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), r2_offset, SLJIT_R2, 0); + + if (word_arg_count >= 4) + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), word_arg4_offset); + } + + if (!(src & SLJIT_IMM) && src != SLJIT_R0) { + if (word_arg_count >= 1) { + SLJIT_ASSERT(r2_offset == sizeof(sljit_sw)); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), 0, SLJIT_R0, 0); + } + EMIT_MOV(compiler, SLJIT_R0, 0, src, srcw); + } + + /* Restore saved registers. */ + offset = stack_size - prev_args_size - 2 * SSIZE_OF(sw); + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), offset); + + if (compiler->saveds > 2 || compiler->scratches > 9) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_S2, 0, SLJIT_MEM1(SLJIT_SP), offset); + } + if (compiler->saveds > 1 || compiler->scratches > 10) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_S1, 0, SLJIT_MEM1(SLJIT_SP), offset); + } + if (compiler->saveds > 0 || compiler->scratches > 11) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_S0, 0, SLJIT_MEM1(SLJIT_SP), offset); + } + + /* Copy fourth argument and return address. */ +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) { + offset = stack_size; + *extra_space = 0; + + if (word_arg_count >= 4 && prev_args_size == 0) { + offset -= SSIZE_OF(sw); + inst = emit_x86_instruction(compiler, 1, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), offset); + FAIL_IF(!inst); + *inst = XCHG_r_rm; + + SLJIT_ASSERT(args_size != prev_args_size); + } else { + if (word_arg_count >= 4) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } + + if (args_size != prev_args_size) + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), stack_size - prev_args_size - SSIZE_OF(sw)); + } + + if (args_size != prev_args_size) + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size - args_size - SSIZE_OF(sw), SLJIT_R2, 0); + } else { +#endif /* SLJIT_X86_32_FASTCALL */ + offset = stack_size - SSIZE_OF(sw); + *extra_space = args_size; + + if (word_arg_count >= 4 && prev_args_size == SSIZE_OF(sw)) { + offset -= SSIZE_OF(sw); + inst = emit_x86_instruction(compiler, 1, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), offset); + FAIL_IF(!inst); + *inst = XCHG_r_rm; + + SLJIT_ASSERT(prev_args_size > 0); + } else { + if (word_arg_count >= 4) { + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } + + if (prev_args_size > 0) + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), stack_size - prev_args_size - SSIZE_OF(sw)); + } + + /* Copy return address. */ + if (prev_args_size > 0) + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), stack_size - SSIZE_OF(sw), SLJIT_R2, 0); +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + } +#endif /* SLJIT_X86_32_FASTCALL */ + + while (types != 0) { + switch (types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + offset -= SSIZE_OF(f64); + FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), offset, float_arg_count)); + float_arg_count--; + break; + case SLJIT_ARG_TYPE_F32: + offset -= SSIZE_OF(f32); + FAIL_IF(emit_sse2_store(compiler, 0, SLJIT_MEM1(SLJIT_SP), offset, float_arg_count)); + float_arg_count--; + break; + default: + switch (word_arg_count) { + case 1: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) { + EMIT_MOV(compiler, SLJIT_R2, 0, r2_offset != 0 ? SLJIT_MEM1(SLJIT_SP) : SLJIT_R0, 0); + break; + } +#endif + offset -= SSIZE_OF(sw); + if (r2_offset != 0) { + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), 0); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + } else + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R0, 0); + break; + case 2: +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + if (fast_call) + break; +#endif + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R1, 0); + break; + case 3: + offset -= SSIZE_OF(sw); + EMIT_MOV(compiler, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), r2_offset); + EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), offset, SLJIT_R2, 0); + break; + } + word_arg_count--; + break; + } + types >>= SLJIT_ARG_SHIFT; + } + +#if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) + /* Skip return address. */ + if (fast_call) + offset -= SSIZE_OF(sw); +#endif + + SLJIT_ASSERT(offset >= 0); + + if (offset == 0) + return SLJIT_SUCCESS; + + BINARY_IMM32(ADD, offset, SLJIT_SP, 0); + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_tail_call_end(struct sljit_compiler *compiler, sljit_s32 extra_space) +{ + /* Called when stack consumption cannot be reduced to 0. */ + sljit_u8 *inst; + + BINARY_IMM32(ADD, extra_space, SLJIT_SP, 0); + + inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); + FAIL_IF(!inst); + INC_SIZE(1); + RET(); + + return SLJIT_SUCCESS; +} + SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 arg_types) { struct sljit_jump *jump; - sljit_s32 stack_size = 0; + sljit_sw stack_size = 0; sljit_s32 word_arg_count; CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); + if (type & SLJIT_CALL_RETURN) { + stack_size = type; + PTR_FAIL_IF(tail_call_with_args(compiler, &stack_size, arg_types, SLJIT_IMM, 0)); + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + + if (stack_size == 0) { + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + return sljit_emit_jump(compiler, type); + } + + jump = sljit_emit_jump(compiler, type); + PTR_FAIL_IF(jump == NULL); + + PTR_FAIL_IF(emit_tail_call_end(compiler, stack_size)); + return jump; + } + #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) if ((type & 0xff) == SLJIT_CALL) { stack_size = c_fast_call_get_stack_size(arg_types, &word_arg_count); @@ -772,7 +1266,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi sljit_s32 arg_types, sljit_s32 src, sljit_sw srcw) { - sljit_s32 stack_size = 0; + sljit_sw stack_size = 0; sljit_s32 word_arg_count; #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) sljit_s32 swap_args; @@ -781,6 +1275,27 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); + if (type & SLJIT_CALL_RETURN) { + stack_size = type; + FAIL_IF(tail_call_with_args(compiler, &stack_size, arg_types, src, srcw)); + + if (!(src & SLJIT_IMM)) { + src = SLJIT_R0; + srcw = 0; + } + +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + + if (stack_size == 0) + return sljit_emit_ijump(compiler, SLJIT_JUMP, src, srcw); + + FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); + return emit_tail_call_end(compiler, stack_size); + } + #if (defined SLJIT_X86_32_FASTCALL && SLJIT_X86_32_FASTCALL) SLJIT_ASSERT(reg_map[SLJIT_R0] == 0 && reg_map[SLJIT_R2] == 1 && SLJIT_R0 == 1 && SLJIT_R2 == 3); @@ -800,7 +1315,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi FAIL_IF(c_fast_call_with_args(compiler, arg_types, stack_size, word_arg_count, swap_args)); - compiler->saveds_offset += stack_size; + compiler->scratches_offset += stack_size; compiler->locals_offset += stack_size; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -809,7 +1324,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi #endif FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); - compiler->saveds_offset -= stack_size; + compiler->scratches_offset -= stack_size; compiler->locals_offset -= stack_size; return post_call_with_args(compiler, arg_types, 0); @@ -819,7 +1334,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi stack_size = cdecl_call_get_stack_size(compiler, arg_types, &word_arg_count); FAIL_IF(cdecl_call_with_args(compiler, arg_types, stack_size, word_arg_count)); - compiler->saveds_offset += stack_size; + compiler->scratches_offset += stack_size; compiler->locals_offset += stack_size; #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -828,7 +1343,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi #endif FAIL_IF(sljit_emit_ijump(compiler, type, src, srcw)); - compiler->saveds_offset -= stack_size; + compiler->scratches_offset -= stack_size; compiler->locals_offset -= stack_size; return post_call_with_args(compiler, arg_types, stack_size); @@ -844,10 +1359,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * CHECK_EXTRA_REGS(dst, dstw, (void)0); - /* For UNUSED dst. Uncommon, but possible. */ - if (dst == SLJIT_UNUSED) - dst = TMP_REG1; - if (FAST_IS_REG(dst)) { /* Unused dest is possible here. */ inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); @@ -895,34 +1406,18 @@ static sljit_s32 emit_fast_return(struct sljit_compiler *compiler, sljit_s32 src static sljit_s32 skip_frames_before_return(struct sljit_compiler *compiler) { - sljit_s32 size, saved_size; - sljit_s32 has_f64_aligment; + sljit_sw size; /* Don't adjust shadow stack if it isn't enabled. */ - if (!cpu_has_shadow_stack ()) + if (!cpu_has_shadow_stack()) return SLJIT_SUCCESS; - SLJIT_ASSERT(compiler->args >= 0); + SLJIT_ASSERT(compiler->args_size >= 0); SLJIT_ASSERT(compiler->local_size > 0); -#if !defined(__APPLE__) - has_f64_aligment = compiler->options & SLJIT_F64_ALIGNMENT; -#else - has_f64_aligment = 0; -#endif - size = compiler->local_size; - saved_size = (1 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + (compiler->saveds <= 3 ? compiler->saveds : 3)) * sizeof(sljit_uw); - if (has_f64_aligment) { - /* mov TMP_REG1, [esp + local_size]. */ - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), size); - /* mov TMP_REG1, [TMP_REG1+ saved_size]. */ - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(TMP_REG1), saved_size); - /* Move return address to [esp]. */ - EMIT_MOV(compiler, SLJIT_MEM1(SLJIT_SP), 0, TMP_REG1, 0); - size = 0; - } else - size += saved_size; + size += (1 + (compiler->scratches > 9 ? (compiler->scratches - 9) : 0) + + (compiler->saveds <= 3 ? compiler->saveds : 3)) * SSIZE_OF(sw); - return adjust_shadow_stack(compiler, SLJIT_UNUSED, 0, SLJIT_SP, size); + return adjust_shadow_stack(compiler, SLJIT_MEM1(SLJIT_SP), size); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_64.c b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_64.c index e85b56a6..f37df6e1 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_64.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_64.c @@ -26,6 +26,10 @@ /* x86 64-bit arch dependent functions. */ +/* --------------------------------------------------------------------- */ +/* Operators */ +/* --------------------------------------------------------------------- */ + static sljit_s32 emit_load_imm64(struct sljit_compiler *compiler, sljit_s32 reg, sljit_sw imm) { sljit_u8 *inst; @@ -34,351 +38,15 @@ static sljit_s32 emit_load_imm64(struct sljit_compiler *compiler, sljit_s32 reg, FAIL_IF(!inst); INC_SIZE(2 + sizeof(sljit_sw)); *inst++ = REX_W | ((reg_map[reg] <= 7) ? 0 : REX_B); - *inst++ = MOV_r_i32 + (reg_map[reg] & 0x7); + *inst++ = U8(MOV_r_i32 | (reg_map[reg] & 0x7)); sljit_unaligned_store_sw(inst, imm); return SLJIT_SUCCESS; } -static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr) -{ - sljit_s32 type = jump->flags >> TYPE_SHIFT; - - int short_addr = !(jump->flags & SLJIT_REWRITABLE_JUMP) && !(jump->flags & JUMP_LABEL) && (jump->u.target <= 0xffffffff); - - /* The relative jump below specialized for this case. */ - SLJIT_ASSERT(reg_map[TMP_REG2] >= 8); - - if (type < SLJIT_JUMP) { - /* Invert type. */ - *code_ptr++ = get_jump_code(type ^ 0x1) - 0x10; - *code_ptr++ = short_addr ? (6 + 3) : (10 + 3); - } - - *code_ptr++ = short_addr ? REX_B : (REX_W | REX_B); - *code_ptr++ = MOV_r_i32 | reg_lmap[TMP_REG2]; - jump->addr = (sljit_uw)code_ptr; - - if (jump->flags & JUMP_LABEL) - jump->flags |= PATCH_MD; - else if (short_addr) - sljit_unaligned_store_s32(code_ptr, (sljit_s32)jump->u.target); - else - sljit_unaligned_store_sw(code_ptr, jump->u.target); - - code_ptr += short_addr ? sizeof(sljit_s32) : sizeof(sljit_sw); - - *code_ptr++ = REX_B; - *code_ptr++ = GROUP_FF; - *code_ptr++ = MOD_REG | (type >= SLJIT_FAST_CALL ? CALL_rm : JMP_rm) | reg_lmap[TMP_REG2]; - - return code_ptr; -} - -static sljit_u8* generate_put_label_code(struct sljit_put_label *put_label, sljit_u8 *code_ptr, sljit_uw max_label) -{ - if (max_label > HALFWORD_MAX) { - put_label->addr -= put_label->flags; - put_label->flags = PATCH_MD; - return code_ptr; - } - - if (put_label->flags == 0) { - /* Destination is register. */ - code_ptr = (sljit_u8*)put_label->addr - 2 - sizeof(sljit_uw); - - SLJIT_ASSERT((code_ptr[0] & 0xf8) == REX_W); - SLJIT_ASSERT((code_ptr[1] & 0xf8) == MOV_r_i32); - - if ((code_ptr[0] & 0x07) != 0) { - code_ptr[0] = (sljit_u8)(code_ptr[0] & ~0x08); - code_ptr += 2 + sizeof(sljit_s32); - } - else { - code_ptr[0] = code_ptr[1]; - code_ptr += 1 + sizeof(sljit_s32); - } - - put_label->addr = (sljit_uw)code_ptr; - return code_ptr; - } - - code_ptr -= put_label->flags + (2 + sizeof(sljit_uw)); - SLJIT_MEMMOVE(code_ptr, code_ptr + (2 + sizeof(sljit_uw)), put_label->flags); - - SLJIT_ASSERT((code_ptr[0] & 0xf8) == REX_W); - - if ((code_ptr[1] & 0xf8) == MOV_r_i32) { - code_ptr += 2 + sizeof(sljit_uw); - SLJIT_ASSERT((code_ptr[0] & 0xf8) == REX_W); - } - - SLJIT_ASSERT(code_ptr[1] == MOV_rm_r); - - code_ptr[0] = (sljit_u8)(code_ptr[0] & ~0x4); - code_ptr[1] = MOV_rm_i32; - code_ptr[2] = (sljit_u8)(code_ptr[2] & ~(0x7 << 3)); - - code_ptr = (sljit_u8*)(put_label->addr - (2 + sizeof(sljit_uw)) + sizeof(sljit_s32)); - put_label->addr = (sljit_uw)code_ptr; - put_label->flags = 0; - return code_ptr; -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, - sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, - sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) -{ - sljit_s32 args, i, tmp, size, saved_register_size; - sljit_u8 *inst; - - CHECK_ERROR(); - CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); - set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - - /* Emit ENDBR64 at function entry if needed. */ - FAIL_IF(emit_endbranch(compiler)); - - compiler->mode32 = 0; - -#ifdef _WIN64 - /* Two/four register slots for parameters plus space for xmm6 register if needed. */ - if (fscratches >= 6 || fsaveds >= 1) - compiler->locals_offset = 6 * sizeof(sljit_sw); - else - compiler->locals_offset = ((scratches > 2) ? 4 : 2) * sizeof(sljit_sw); -#endif - - /* Including the return address saved by the call instruction. */ - saved_register_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - - tmp = saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - saveds) : SLJIT_FIRST_SAVED_REG; - for (i = SLJIT_S0; i >= tmp; i--) { - size = reg_map[i] >= 8 ? 2 : 1; - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); - INC_SIZE(size); - if (reg_map[i] >= 8) - *inst++ = REX_B; - PUSH_REG(reg_lmap[i]); - } - - for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { - size = reg_map[i] >= 8 ? 2 : 1; - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); - INC_SIZE(size); - if (reg_map[i] >= 8) - *inst++ = REX_B; - PUSH_REG(reg_lmap[i]); - } - - args = get_arg_count(arg_types); - - if (args > 0) { - size = args * 3; - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); - - INC_SIZE(size); - -#ifndef _WIN64 - if (args > 0) { - inst[0] = REX_W; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_map[SLJIT_S0] << 3) | 0x7 /* rdi */; - inst += 3; - } - if (args > 1) { - inst[0] = REX_W | REX_R; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_lmap[SLJIT_S1] << 3) | 0x6 /* rsi */; - inst += 3; - } - if (args > 2) { - inst[0] = REX_W | REX_R; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_lmap[SLJIT_S2] << 3) | 0x2 /* rdx */; - } -#else - if (args > 0) { - inst[0] = REX_W; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_map[SLJIT_S0] << 3) | 0x1 /* rcx */; - inst += 3; - } - if (args > 1) { - inst[0] = REX_W; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_map[SLJIT_S1] << 3) | 0x2 /* rdx */; - inst += 3; - } - if (args > 2) { - inst[0] = REX_W | REX_B; - inst[1] = MOV_r_rm; - inst[2] = MOD_REG | (reg_map[SLJIT_S2] << 3) | 0x0 /* r8 */; - } -#endif - } - - local_size = ((local_size + SLJIT_LOCALS_OFFSET + saved_register_size + 15) & ~15) - saved_register_size; - compiler->local_size = local_size; - -#ifdef _WIN64 - if (local_size > 0) { - if (local_size <= 4 * 4096) { - if (local_size > 4096) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096); - if (local_size > 2 * 4096) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 2); - if (local_size > 3 * 4096) - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 3); - } - else { - EMIT_MOV(compiler, SLJIT_R0, 0, SLJIT_SP, 0); - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_IMM, (local_size - 1) >> 12); - - SLJIT_ASSERT (reg_map[SLJIT_R0] == 0); - - EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_MEM1(SLJIT_R0), -4096); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, 4096)); - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - TMP_REG1, 0, TMP_REG1, 0, SLJIT_IMM, 1)); - - inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); - FAIL_IF(!inst); - - INC_SIZE(2); - inst[0] = JNE_i8; - inst[1] = (sljit_s8) -19; - } - - EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -local_size); - } -#endif - - if (local_size > 0) { - FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), - SLJIT_SP, 0, SLJIT_SP, 0, SLJIT_IMM, local_size)); - } - -#ifdef _WIN64 - /* Save xmm6 register: movaps [rsp + 0x20], xmm6 */ - if (fscratches >= 6 || fsaveds >= 1) { - inst = (sljit_u8*)ensure_buf(compiler, 1 + 5); - FAIL_IF(!inst); - INC_SIZE(5); - *inst++ = GROUP_0F; - sljit_unaligned_store_s32(inst, 0x20247429); - } -#endif - - return SLJIT_SUCCESS; -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, - sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, - sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) -{ - sljit_s32 saved_register_size; - - CHECK_ERROR(); - CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); - set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); - -#ifdef _WIN64 - /* Two/four register slots for parameters plus space for xmm6 register if needed. */ - if (fscratches >= 6 || fsaveds >= 1) - compiler->locals_offset = 6 * sizeof(sljit_sw); - else - compiler->locals_offset = ((scratches > 2) ? 4 : 2) * sizeof(sljit_sw); -#endif - - /* Including the return address saved by the call instruction. */ - saved_register_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); - compiler->local_size = ((local_size + SLJIT_LOCALS_OFFSET + saved_register_size + 15) & ~15) - saved_register_size; - return SLJIT_SUCCESS; -} - -SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) -{ - sljit_s32 i, tmp, size; - sljit_u8 *inst; - - CHECK_ERROR(); - CHECK(check_sljit_emit_return(compiler, op, src, srcw)); - - FAIL_IF(emit_mov_before_return(compiler, op, src, srcw)); - -#ifdef _WIN64 - /* Restore xmm6 register: movaps xmm6, [rsp + 0x20] */ - if (compiler->fscratches >= 6 || compiler->fsaveds >= 1) { - inst = (sljit_u8*)ensure_buf(compiler, 1 + 5); - FAIL_IF(!inst); - INC_SIZE(5); - *inst++ = GROUP_0F; - sljit_unaligned_store_s32(inst, 0x20247428); - } -#endif - - if (compiler->local_size > 0) { - if (compiler->local_size <= 127) { - inst = (sljit_u8*)ensure_buf(compiler, 1 + 4); - FAIL_IF(!inst); - INC_SIZE(4); - *inst++ = REX_W; - *inst++ = GROUP_BINARY_83; - *inst++ = MOD_REG | ADD | 4; - *inst = compiler->local_size; - } - else { - inst = (sljit_u8*)ensure_buf(compiler, 1 + 7); - FAIL_IF(!inst); - INC_SIZE(7); - *inst++ = REX_W; - *inst++ = GROUP_BINARY_81; - *inst++ = MOD_REG | ADD | 4; - sljit_unaligned_store_s32(inst, compiler->local_size); - } - } - - tmp = compiler->scratches; - for (i = SLJIT_FIRST_SAVED_REG; i <= tmp; i++) { - size = reg_map[i] >= 8 ? 2 : 1; - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); - INC_SIZE(size); - if (reg_map[i] >= 8) - *inst++ = REX_B; - POP_REG(reg_lmap[i]); - } - - tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; - for (i = tmp; i <= SLJIT_S0; i++) { - size = reg_map[i] >= 8 ? 2 : 1; - inst = (sljit_u8*)ensure_buf(compiler, 1 + size); - FAIL_IF(!inst); - INC_SIZE(size); - if (reg_map[i] >= 8) - *inst++ = REX_B; - POP_REG(reg_lmap[i]); - } - - inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); - FAIL_IF(!inst); - INC_SIZE(1); - RET(); - return SLJIT_SUCCESS; -} - -/* --------------------------------------------------------------------- */ -/* Operators */ -/* --------------------------------------------------------------------- */ - static sljit_s32 emit_do_imm32(struct sljit_compiler *compiler, sljit_u8 rex, sljit_u8 opcode, sljit_sw imm) { sljit_u8 *inst; - sljit_s32 length = 1 + (rex ? 1 : 0) + sizeof(sljit_s32); + sljit_uw length = (rex ? 2 : 1) + sizeof(sljit_s32); inst = (sljit_u8*)ensure_buf(compiler, 1 + length); FAIL_IF(!inst); @@ -386,11 +54,11 @@ static sljit_s32 emit_do_imm32(struct sljit_compiler *compiler, sljit_u8 rex, sl if (rex) *inst++ = rex; *inst++ = opcode; - sljit_unaligned_store_s32(inst, imm); + sljit_unaligned_store_s32(inst, (sljit_s32)imm); return SLJIT_SUCCESS; } -static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 size, +static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_uw size, /* The register or immediate operand. */ sljit_s32 a, sljit_sw imma, /* The general operand (not immediate). */ @@ -399,8 +67,9 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 sljit_u8 *inst; sljit_u8 *buf_ptr; sljit_u8 rex = 0; - sljit_s32 flags = size & ~0xf; - sljit_s32 inst_size; + sljit_u8 reg_lmap_b; + sljit_uw flags = size; + sljit_uw inst_size; /* The immediate operand must be 32 bit. */ SLJIT_ASSERT(!(a & SLJIT_IMM) || compiler->mode32 || IS_HALFWORD(imma)); @@ -445,7 +114,7 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 b |= TO_OFFS_REG(SLJIT_SP); } - if ((b & REG_MASK) == SLJIT_UNUSED) + if (!(b & REG_MASK)) inst_size += 1 + sizeof(sljit_s32); /* SIB byte required to avoid RIP based addressing. */ else { if (reg_map[b & REG_MASK] >= 8) @@ -461,7 +130,7 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 else if (reg_lmap[b & REG_MASK] == 5) inst_size += sizeof(sljit_s8); - if ((b & OFFS_REG_MASK) != SLJIT_UNUSED) { + if (b & OFFS_REG_MASK) { inst_size += 1; /* SIB byte. */ if (reg_map[OFFS_REG(b)] >= 8) rex |= REX_X; @@ -533,9 +202,9 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 if (a & SLJIT_IMM) *buf_ptr = 0; else if (!(flags & EX86_SSE2_OP1)) - *buf_ptr = reg_lmap[a] << 3; + *buf_ptr = U8(reg_lmap[a] << 3); else - *buf_ptr = freg_lmap[a] << 3; + *buf_ptr = U8(freg_lmap[a] << 3); } else { if (a & SLJIT_IMM) { @@ -548,104 +217,490 @@ static sljit_u8* emit_x86_instruction(struct sljit_compiler *compiler, sljit_s32 *buf_ptr = 0; } - if (!(b & SLJIT_MEM)) - *buf_ptr++ |= MOD_REG + ((!(flags & EX86_SSE2_OP2)) ? reg_lmap[b] : freg_lmap[b]); - else if ((b & REG_MASK) != SLJIT_UNUSED) { - if ((b & OFFS_REG_MASK) == SLJIT_UNUSED || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP)) { - if (immb != 0 || reg_lmap[b & REG_MASK] == 5) { + if (!(b & SLJIT_MEM)) { + *buf_ptr = U8(*buf_ptr | MOD_REG | (!(flags & EX86_SSE2_OP2) ? reg_lmap[b] : freg_lmap[b])); + buf_ptr++; + } else if (b & REG_MASK) { + reg_lmap_b = reg_lmap[b & REG_MASK]; + + if (!(b & OFFS_REG_MASK) || (b & OFFS_REG_MASK) == TO_OFFS_REG(SLJIT_SP) || reg_lmap_b == 5) { + if (immb != 0 || reg_lmap_b == 5) { if (immb <= 127 && immb >= -128) *buf_ptr |= 0x40; else *buf_ptr |= 0x80; } - if ((b & OFFS_REG_MASK) == SLJIT_UNUSED) - *buf_ptr++ |= reg_lmap[b & REG_MASK]; + if (!(b & OFFS_REG_MASK)) + *buf_ptr++ |= reg_lmap_b; else { *buf_ptr++ |= 0x04; - *buf_ptr++ = reg_lmap[b & REG_MASK] | (reg_lmap[OFFS_REG(b)] << 3); + *buf_ptr++ = U8(reg_lmap_b | (reg_lmap[OFFS_REG(b)] << 3)); } - if (immb != 0 || reg_lmap[b & REG_MASK] == 5) { + if (immb != 0 || reg_lmap_b == 5) { if (immb <= 127 && immb >= -128) - *buf_ptr++ = immb; /* 8 bit displacement. */ + *buf_ptr++ = U8(immb); /* 8 bit displacement. */ else { - sljit_unaligned_store_s32(buf_ptr, immb); /* 32 bit displacement. */ + sljit_unaligned_store_s32(buf_ptr, (sljit_s32)immb); /* 32 bit displacement. */ buf_ptr += sizeof(sljit_s32); } } } else { - if (reg_lmap[b & REG_MASK] == 5) - *buf_ptr |= 0x40; *buf_ptr++ |= 0x04; - *buf_ptr++ = reg_lmap[b & REG_MASK] | (reg_lmap[OFFS_REG(b)] << 3) | (immb << 6); - if (reg_lmap[b & REG_MASK] == 5) - *buf_ptr++ = 0; + *buf_ptr++ = U8(reg_lmap_b | (reg_lmap[OFFS_REG(b)] << 3) | (immb << 6)); } } else { *buf_ptr++ |= 0x04; *buf_ptr++ = 0x25; - sljit_unaligned_store_s32(buf_ptr, immb); /* 32 bit displacement. */ + sljit_unaligned_store_s32(buf_ptr, (sljit_s32)immb); /* 32 bit displacement. */ buf_ptr += sizeof(sljit_s32); } if (a & SLJIT_IMM) { if (flags & EX86_BYTE_ARG) - *buf_ptr = imma; + *buf_ptr = U8(imma); else if (flags & EX86_HALF_ARG) - sljit_unaligned_store_s16(buf_ptr, imma); + sljit_unaligned_store_s16(buf_ptr, (sljit_s16)imma); else if (!(flags & EX86_SHIFT_INS)) - sljit_unaligned_store_s32(buf_ptr, imma); + sljit_unaligned_store_s32(buf_ptr, (sljit_s32)imma); } return !(flags & EX86_SHIFT_INS) ? inst : (inst + 1); } +/* --------------------------------------------------------------------- */ +/* Enter / return */ +/* --------------------------------------------------------------------- */ + +static sljit_u8* generate_far_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr) +{ + sljit_uw type = jump->flags >> TYPE_SHIFT; + + int short_addr = !(jump->flags & SLJIT_REWRITABLE_JUMP) && !(jump->flags & JUMP_LABEL) && (jump->u.target <= 0xffffffff); + + /* The relative jump below specialized for this case. */ + SLJIT_ASSERT(reg_map[TMP_REG2] >= 8); + + if (type < SLJIT_JUMP) { + /* Invert type. */ + *code_ptr++ = U8(get_jump_code(type ^ 0x1) - 0x10); + *code_ptr++ = short_addr ? (6 + 3) : (10 + 3); + } + + *code_ptr++ = short_addr ? REX_B : (REX_W | REX_B); + *code_ptr++ = MOV_r_i32 | reg_lmap[TMP_REG2]; + jump->addr = (sljit_uw)code_ptr; + + if (jump->flags & JUMP_LABEL) + jump->flags |= PATCH_MD; + else if (short_addr) + sljit_unaligned_store_s32(code_ptr, (sljit_s32)jump->u.target); + else + sljit_unaligned_store_sw(code_ptr, (sljit_sw)jump->u.target); + + code_ptr += short_addr ? sizeof(sljit_s32) : sizeof(sljit_sw); + + *code_ptr++ = REX_B; + *code_ptr++ = GROUP_FF; + *code_ptr++ = U8(MOD_REG | (type >= SLJIT_FAST_CALL ? CALL_rm : JMP_rm) | reg_lmap[TMP_REG2]); + + return code_ptr; +} + +static sljit_u8* generate_put_label_code(struct sljit_put_label *put_label, sljit_u8 *code_ptr, sljit_uw max_label) +{ + if (max_label > HALFWORD_MAX) { + put_label->addr -= put_label->flags; + put_label->flags = PATCH_MD; + return code_ptr; + } + + if (put_label->flags == 0) { + /* Destination is register. */ + code_ptr = (sljit_u8*)put_label->addr - 2 - sizeof(sljit_uw); + + SLJIT_ASSERT((code_ptr[0] & 0xf8) == REX_W); + SLJIT_ASSERT((code_ptr[1] & 0xf8) == MOV_r_i32); + + if ((code_ptr[0] & 0x07) != 0) { + code_ptr[0] = U8(code_ptr[0] & ~0x08); + code_ptr += 2 + sizeof(sljit_s32); + } + else { + code_ptr[0] = code_ptr[1]; + code_ptr += 1 + sizeof(sljit_s32); + } + + put_label->addr = (sljit_uw)code_ptr; + return code_ptr; + } + + code_ptr -= put_label->flags + (2 + sizeof(sljit_uw)); + SLJIT_MEMMOVE(code_ptr, code_ptr + (2 + sizeof(sljit_uw)), put_label->flags); + + SLJIT_ASSERT((code_ptr[0] & 0xf8) == REX_W); + + if ((code_ptr[1] & 0xf8) == MOV_r_i32) { + code_ptr += 2 + sizeof(sljit_uw); + SLJIT_ASSERT((code_ptr[0] & 0xf8) == REX_W); + } + + SLJIT_ASSERT(code_ptr[1] == MOV_rm_r); + + code_ptr[0] = U8(code_ptr[0] & ~0x4); + code_ptr[1] = MOV_rm_i32; + code_ptr[2] = U8(code_ptr[2] & ~(0x7 << 3)); + + code_ptr = (sljit_u8*)(put_label->addr - (2 + sizeof(sljit_uw)) + sizeof(sljit_s32)); + put_label->addr = (sljit_uw)code_ptr; + put_label->flags = 0; + return code_ptr; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, + sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) +{ + sljit_uw size; + sljit_s32 word_arg_count = 0; + sljit_s32 saved_arg_count = 0; + sljit_s32 saved_regs_size, tmp, i; +#ifdef _WIN64 + sljit_s32 saved_float_regs_size; + sljit_s32 saved_float_regs_offset = 0; + sljit_s32 float_arg_count = 0; +#endif /* _WIN64 */ + sljit_u8 *inst; + + CHECK_ERROR(); + CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); + set_emit_enter(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + + /* Emit ENDBR64 at function entry if needed. */ + FAIL_IF(emit_endbranch(compiler)); + + compiler->mode32 = 0; + + /* Including the return address saved by the call instruction. */ + saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); + + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0; i > tmp; i--) { + size = reg_map[i] >= 8 ? 2 : 1; + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + INC_SIZE(size); + if (reg_map[i] >= 8) + *inst++ = REX_B; + PUSH_REG(reg_lmap[i]); + } + + for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + size = reg_map[i] >= 8 ? 2 : 1; + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + INC_SIZE(size); + if (reg_map[i] >= 8) + *inst++ = REX_B; + PUSH_REG(reg_lmap[i]); + } + +#ifdef _WIN64 + local_size += SLJIT_LOCALS_OFFSET; + saved_float_regs_size = GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, 16); + + if (saved_float_regs_size > 0) { + saved_float_regs_offset = ((local_size + 0xf) & ~0xf); + local_size = saved_float_regs_offset + saved_float_regs_size; + } +#else /* !_WIN64 */ + SLJIT_ASSERT(SLJIT_LOCALS_OFFSET == 0); +#endif /* _WIN64 */ + + arg_types >>= SLJIT_ARG_SHIFT; + + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { + tmp = 0; +#ifndef _WIN64 + switch (word_arg_count) { + case 0: + tmp = SLJIT_R2; + break; + case 1: + tmp = SLJIT_R1; + break; + case 2: + tmp = TMP_REG1; + break; + default: + tmp = SLJIT_R3; + break; + } +#else /* !_WIN64 */ + switch (word_arg_count + float_arg_count) { + case 0: + tmp = SLJIT_R3; + break; + case 1: + tmp = SLJIT_R1; + break; + case 2: + tmp = SLJIT_R2; + break; + default: + tmp = TMP_REG1; + break; + } +#endif /* _WIN64 */ + if (arg_types & SLJIT_ARG_TYPE_SCRATCH_REG) { + if (tmp != SLJIT_R0 + word_arg_count) + EMIT_MOV(compiler, SLJIT_R0 + word_arg_count, 0, tmp, 0); + } else { + EMIT_MOV(compiler, SLJIT_S0 - saved_arg_count, 0, tmp, 0); + saved_arg_count++; + } + word_arg_count++; + } else { +#ifdef _WIN64 + SLJIT_COMPILE_ASSERT(SLJIT_FR0 == 1, float_register_index_start); + float_arg_count++; + if (float_arg_count != float_arg_count + word_arg_count) + FAIL_IF(emit_sse2_load(compiler, (arg_types & SLJIT_ARG_MASK) == SLJIT_ARG_TYPE_F32, + float_arg_count, float_arg_count + word_arg_count, 0)); +#endif /* _WIN64 */ + } + arg_types >>= SLJIT_ARG_SHIFT; + } + + local_size = ((local_size + saved_regs_size + 0xf) & ~0xf) - saved_regs_size; + compiler->local_size = local_size; + +#ifdef _WIN64 + if (local_size > 0) { + if (local_size <= 4 * 4096) { + if (local_size > 4096) + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096); + if (local_size > 2 * 4096) + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 2); + if (local_size > 3 * 4096) + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -4096 * 3); + } + else { + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_IMM, local_size >> 12); + + EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_MEM1(SLJIT_SP), -4096); + BINARY_IMM32(SUB, 4096, SLJIT_SP, 0); + BINARY_IMM32(SUB, 1, TMP_REG1, 0); + + inst = (sljit_u8*)ensure_buf(compiler, 1 + 2); + FAIL_IF(!inst); + + INC_SIZE(2); + inst[0] = JNE_i8; + inst[1] = (sljit_u8)-21; + local_size &= 0xfff; + } + + if (local_size > 0) + EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(SLJIT_SP), -local_size); + } +#endif /* _WIN64 */ + + if (local_size > 0) + BINARY_IMM32(SUB, local_size, SLJIT_SP, 0); + +#ifdef _WIN64 + if (saved_float_regs_size > 0) { + compiler->mode32 = 1; + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + inst = emit_x86_instruction(compiler, 2 | EX86_SSE2, i, 0, SLJIT_MEM1(SLJIT_SP), saved_float_regs_offset); + *inst++ = GROUP_0F; + *inst = MOVAPS_xm_x; + saved_float_regs_offset += 16; + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + inst = emit_x86_instruction(compiler, 2 | EX86_SSE2, i, 0, SLJIT_MEM1(SLJIT_SP), saved_float_regs_offset); + *inst++ = GROUP_0F; + *inst = MOVAPS_xm_x; + saved_float_regs_offset += 16; + } + } +#endif /* _WIN64 */ + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, sljit_s32 scratches, sljit_s32 saveds, + sljit_s32 fscratches, sljit_s32 fsaveds, sljit_s32 local_size) +{ + sljit_s32 saved_regs_size; +#ifdef _WIN64 + sljit_s32 saved_float_regs_size; +#endif /* _WIN64 */ + + CHECK_ERROR(); + CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size)); + set_set_context(compiler, options, arg_types, scratches, saveds, fscratches, fsaveds, local_size); + +#ifdef _WIN64 + local_size += SLJIT_LOCALS_OFFSET; + saved_float_regs_size = GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, 16); + + if (saved_float_regs_size > 0) + local_size = ((local_size + 0xf) & ~0xf) + saved_float_regs_size; +#else /* !_WIN64 */ + SLJIT_ASSERT(SLJIT_LOCALS_OFFSET == 0); +#endif /* _WIN64 */ + + /* Including the return address saved by the call instruction. */ + saved_regs_size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1); + compiler->local_size = ((local_size + saved_regs_size + 0xf) & ~0xf) - saved_regs_size; + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler) +{ + sljit_uw size; + sljit_s32 i, tmp; + sljit_u8 *inst; +#ifdef _WIN64 + sljit_s32 saved_float_regs_offset; + sljit_s32 fscratches = compiler->fscratches; + sljit_s32 fsaveds = compiler->fsaveds; +#endif /* _WIN64 */ + +#ifdef _WIN64 + saved_float_regs_offset = GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, 16); + + if (saved_float_regs_offset > 0) { + compiler->mode32 = 1; + saved_float_regs_offset = (compiler->local_size - saved_float_regs_offset) & ~0xf; + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + inst = emit_x86_instruction(compiler, 2 | EX86_SSE2, i, 0, SLJIT_MEM1(SLJIT_SP), saved_float_regs_offset); + *inst++ = GROUP_0F; + *inst = MOVAPS_x_xm; + saved_float_regs_offset += 16; + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + inst = emit_x86_instruction(compiler, 2 | EX86_SSE2, i, 0, SLJIT_MEM1(SLJIT_SP), saved_float_regs_offset); + *inst++ = GROUP_0F; + *inst = MOVAPS_x_xm; + saved_float_regs_offset += 16; + } + } +#endif /* _WIN64 */ + + if (compiler->local_size > 0) { + if (compiler->local_size <= 127) { + inst = (sljit_u8*)ensure_buf(compiler, 1 + 4); + FAIL_IF(!inst); + INC_SIZE(4); + *inst++ = REX_W; + *inst++ = GROUP_BINARY_83; + *inst++ = MOD_REG | ADD | 4; + *inst = U8(compiler->local_size); + } + else { + inst = (sljit_u8*)ensure_buf(compiler, 1 + 7); + FAIL_IF(!inst); + INC_SIZE(7); + *inst++ = REX_W; + *inst++ = GROUP_BINARY_81; + *inst++ = MOD_REG | ADD | 4; + sljit_unaligned_store_s32(inst, compiler->local_size); + } + } + + tmp = compiler->scratches; + for (i = SLJIT_FIRST_SAVED_REG; i <= tmp; i++) { + size = reg_map[i] >= 8 ? 2 : 1; + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + INC_SIZE(size); + if (reg_map[i] >= 8) + *inst++ = REX_B; + POP_REG(reg_lmap[i]); + } + + tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; + for (i = tmp; i <= SLJIT_S0; i++) { + size = reg_map[i] >= 8 ? 2 : 1; + inst = (sljit_u8*)ensure_buf(compiler, 1 + size); + FAIL_IF(!inst); + INC_SIZE(size); + if (reg_map[i] >= 8) + *inst++ = REX_B; + POP_REG(reg_lmap[i]); + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + sljit_u8 *inst; + + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(emit_stack_frame_release(compiler)); + + inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); + FAIL_IF(!inst); + INC_SIZE(1); + RET(); + return SLJIT_SUCCESS; +} + /* --------------------------------------------------------------------- */ /* Call / return instructions */ /* --------------------------------------------------------------------- */ #ifndef _WIN64 -static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src_ptr, sljit_sw srcw) +static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src_ptr) { sljit_s32 src = src_ptr ? (*src_ptr) : 0; sljit_s32 word_arg_count = 0; SLJIT_ASSERT(reg_map[SLJIT_R1] == 6 && reg_map[SLJIT_R3] == 1 && reg_map[TMP_REG1] == 2); - - compiler->mode32 = 0; + SLJIT_ASSERT(!(src & SLJIT_MEM)); /* Remove return value. */ - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - if ((arg_types & SLJIT_DEF_MASK) < SLJIT_ARG_TYPE_F32) + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) word_arg_count++; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } if (word_arg_count == 0) return SLJIT_SUCCESS; - if (src & SLJIT_MEM) { - ADJUST_LOCAL_OFFSET(src, srcw); - EMIT_MOV(compiler, TMP_REG2, 0, src, srcw); - *src_ptr = TMP_REG2; - } - else if (src == SLJIT_R2 && word_arg_count >= SLJIT_R2) - *src_ptr = TMP_REG1; - - if (word_arg_count >= 3) + if (word_arg_count >= 3) { + if (src == SLJIT_R2) + *src_ptr = TMP_REG1; EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_R2, 0); + } + return emit_mov(compiler, SLJIT_R2, 0, SLJIT_R0, 0); } #else -static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src_ptr, sljit_sw srcw) +static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_types, sljit_s32 *src_ptr) { sljit_s32 src = src_ptr ? (*src_ptr) : 0; sljit_s32 arg_count = 0; @@ -656,16 +711,16 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t static sljit_u8 word_arg_regs[5] = { 0, SLJIT_R3, SLJIT_R1, SLJIT_R2, TMP_REG1 }; SLJIT_ASSERT(reg_map[SLJIT_R3] == 1 && reg_map[SLJIT_R1] == 2 && reg_map[SLJIT_R2] == 8 && reg_map[TMP_REG1] == 9); + SLJIT_ASSERT(!(src & SLJIT_MEM)); - compiler->mode32 = 0; - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; while (arg_types) { - types = (types << SLJIT_DEF_SHIFT) | (arg_types & SLJIT_DEF_MASK); + types = (types << SLJIT_ARG_SHIFT) | (arg_types & SLJIT_ARG_MASK); - switch (arg_types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: + switch (arg_types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: arg_count++; float_arg_count++; @@ -687,32 +742,26 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - arg_types >>= SLJIT_DEF_SHIFT; + arg_types >>= SLJIT_ARG_SHIFT; } if (!data_trandfer) return SLJIT_SUCCESS; - if (src & SLJIT_MEM) { - ADJUST_LOCAL_OFFSET(src, srcw); - EMIT_MOV(compiler, TMP_REG2, 0, src, srcw); - *src_ptr = TMP_REG2; - } - while (types) { - switch (types & SLJIT_DEF_MASK) { - case SLJIT_ARG_TYPE_F32: - if (arg_count != float_arg_count) - FAIL_IF(emit_sse2_load(compiler, 1, arg_count, float_arg_count, 0)); - arg_count--; - float_arg_count--; - break; + switch (types & SLJIT_ARG_MASK) { case SLJIT_ARG_TYPE_F64: if (arg_count != float_arg_count) FAIL_IF(emit_sse2_load(compiler, 0, arg_count, float_arg_count, 0)); arg_count--; float_arg_count--; break; + case SLJIT_ARG_TYPE_F32: + if (arg_count != float_arg_count) + FAIL_IF(emit_sse2_load(compiler, 1, arg_count, float_arg_count, 0)); + arg_count--; + float_arg_count--; + break; default: if (arg_count != word_arg_count || arg_count != word_arg_regs[arg_count]) EMIT_MOV(compiler, word_arg_regs[arg_count], 0, word_arg_count, 0); @@ -721,7 +770,7 @@ static sljit_s32 call_with_args(struct sljit_compiler *compiler, sljit_s32 arg_t break; } - types >>= SLJIT_DEF_SHIFT; + types >>= SLJIT_ARG_SHIFT; } return SLJIT_SUCCESS; @@ -735,13 +784,19 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compile CHECK_ERROR_PTR(); CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); - PTR_FAIL_IF(call_with_args(compiler, arg_types, NULL, 0)); + compiler->mode32 = 0; + + PTR_FAIL_IF(call_with_args(compiler, arg_types, NULL)); + + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) compiler->skip_checks = 1; #endif - return sljit_emit_jump(compiler, type); } @@ -752,7 +807,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compi CHECK_ERROR(); CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); - FAIL_IF(call_with_args(compiler, arg_types, &src, srcw)); + compiler->mode32 = 0; + + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + EMIT_MOV(compiler, TMP_REG2, 0, src, srcw); + src = TMP_REG2; + } + + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= SLJIT_S0) { + EMIT_MOV(compiler, TMP_REG2, 0, src, srcw); + src = TMP_REG2; + } + + FAIL_IF(emit_stack_frame_release(compiler)); + type = SLJIT_JUMP; + } + + FAIL_IF(call_with_args(compiler, arg_types, &src)); #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) @@ -770,10 +843,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler * CHECK(check_sljit_emit_fast_enter(compiler, dst, dstw)); ADJUST_LOCAL_OFFSET(dst, dstw); - /* For UNUSED dst. Uncommon, but possible. */ - if (dst == SLJIT_UNUSED) - dst = TMP_REG1; - if (FAST_IS_REG(dst)) { if (reg_map[dst] < 8) { inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); @@ -850,9 +919,6 @@ static sljit_s32 emit_mov_int(struct sljit_compiler *compiler, sljit_s32 sign, compiler->mode32 = 0; - if (dst == SLJIT_UNUSED && !(src & SLJIT_MEM)) - return SLJIT_SUCCESS; /* Empty instruction. */ - if (src & SLJIT_IMM) { if (FAST_IS_REG(dst)) { if (sign || ((sljit_uw)srcw <= 0x7fffffff)) { @@ -903,16 +969,16 @@ static sljit_s32 skip_frames_before_return(struct sljit_compiler *compiler) sljit_s32 tmp, size; /* Don't adjust shadow stack if it isn't enabled. */ - if (!cpu_has_shadow_stack ()) + if (!cpu_has_shadow_stack()) return SLJIT_SUCCESS; size = compiler->local_size; tmp = compiler->scratches; if (tmp >= SLJIT_FIRST_SAVED_REG) - size += (tmp - SLJIT_FIRST_SAVED_REG + 1) * sizeof(sljit_uw); + size += (tmp - SLJIT_FIRST_SAVED_REG + 1) * SSIZE_OF(sw); tmp = compiler->saveds < SLJIT_NUMBER_OF_SAVED_REGISTERS ? (SLJIT_S0 + 1 - compiler->saveds) : SLJIT_FIRST_SAVED_REG; if (SLJIT_S0 >= tmp) - size += (SLJIT_S0 - tmp + 1) * sizeof(sljit_uw); + size += (SLJIT_S0 - tmp + 1) * SSIZE_OF(sw); - return adjust_shadow_stack(compiler, SLJIT_UNUSED, 0, SLJIT_SP, size); + return adjust_shadow_stack(compiler, SLJIT_MEM1(SLJIT_SP), size); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_common.c b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_common.c index 515d98ae..c7dd9be8 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitNativeX86_common.c +++ b/src/3rdparty/pcre2/src/sljit/sljitNativeX86_common.c @@ -65,6 +65,8 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) 15 - R15 */ +#define TMP_FREG (0) + #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) /* Last register + 1. */ @@ -77,9 +79,9 @@ static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 3] = { #define CHECK_EXTRA_REGS(p, w, do) \ if (p >= SLJIT_R3 && p <= SLJIT_S3) { \ if (p <= compiler->scratches) \ - w = compiler->saveds_offset - ((p) - SLJIT_R2) * (sljit_sw)sizeof(sljit_sw); \ + w = compiler->scratches_offset + ((p) - SLJIT_R3) * SSIZE_OF(sw); \ else \ - w = compiler->locals_offset + ((p) - SLJIT_S2) * (sljit_sw)sizeof(sljit_sw); \ + w = compiler->locals_offset + ((p) - SLJIT_S2) * SSIZE_OF(sw); \ p = SLJIT_MEM1(SLJIT_SP); \ do; \ } @@ -115,11 +117,11 @@ static const sljit_u8 reg_lmap[SLJIT_NUMBER_OF_REGISTERS + 4] = { /* Args: xmm0-xmm3 */ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { - 4, 0, 1, 2, 3, 5, 6 + 4, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; /* low-map. freg_map & 0x7. */ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { - 4, 0, 1, 2, 3, 5, 6 + 4, 0, 1, 2, 3, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7 }; #define REX_W 0x48 @@ -143,7 +145,8 @@ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { #endif /* SLJIT_CONFIG_X86_32 */ -#define TMP_FREG (0) +#define U8(v) ((sljit_u8)(v)) + /* Size flags for emit_x86_instruction: */ #define EX86_BIN_INS 0x0010 @@ -205,12 +208,15 @@ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { #define JMP_i32 0xe9 #define JMP_rm (/* GROUP_FF */ 4 << 3) #define LEA_r_m 0x8d +#define LOOP_i8 0xe2 #define MOV_r_rm 0x8b #define MOV_r_i32 0xb8 #define MOV_rm_r 0x89 #define MOV_rm_i32 0xc7 #define MOV_rm8_i8 0xc6 #define MOV_rm8_r8 0x88 +#define MOVAPS_x_xm 0x28 +#define MOVAPS_xm_x 0x29 #define MOVSD_x_xm 0x10 #define MOVSD_xm_x 0x11 #define MOVSXD_r_rm 0x63 @@ -274,14 +280,12 @@ static const sljit_u8 freg_lmap[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1] = { #define MOD_REG 0xc0 #define MOD_DISP8 0x40 -#define INC_SIZE(s) (*inst++ = (s), compiler->size += (s)) +#define INC_SIZE(s) (*inst++ = U8(s), compiler->size += (s)) -#define PUSH_REG(r) (*inst++ = (PUSH_r + (r))) -#define POP_REG(r) (*inst++ = (POP_r + (r))) -#define RET() (*inst++ = (RET_near)) -#define RET_I16(n) (*inst++ = (RET_i16), *inst++ = n, *inst++ = 0) -/* r32, r/m32 */ -#define MOV_RM(mod, reg, rm) (*inst++ = (MOV_r_rm), *inst++ = (mod) << 6 | (reg) << 3 | (rm)) +#define PUSH_REG(r) (*inst++ = U8(PUSH_r + (r))) +#define POP_REG(r) (*inst++ = U8(POP_r + (r))) +#define RET() (*inst++ = RET_near) +#define RET_I16(n) (*inst++ = RET_i16, *inst++ = U8(n), *inst++ = 0) /* Multithreading does not affect these static variables, since they store built-in CPU features. Therefore they can be overwritten by different threads @@ -371,7 +375,7 @@ static void get_cpu_features(void) cpu_has_cmov = (features >> 15) & 0x1; } -static sljit_u8 get_jump_code(sljit_s32 type) +static sljit_u8 get_jump_code(sljit_uw type) { switch (type) { case SLJIT_EQUAL: @@ -383,10 +387,12 @@ static sljit_u8 get_jump_code(sljit_s32 type) return 0x85 /* jne */; case SLJIT_LESS: + case SLJIT_CARRY: case SLJIT_LESS_F64: return 0x82 /* jc */; case SLJIT_GREATER_EQUAL: + case SLJIT_NOT_CARRY: case SLJIT_GREATER_EQUAL_F64: return 0x83 /* jae */; @@ -434,14 +440,14 @@ static sljit_u8* generate_put_label_code(struct sljit_put_label *put_label, slji static sljit_u8* generate_near_jump_code(struct sljit_jump *jump, sljit_u8 *code_ptr, sljit_u8 *code, sljit_sw executable_offset) { - sljit_s32 type = jump->flags >> TYPE_SHIFT; + sljit_uw type = jump->flags >> TYPE_SHIFT; sljit_s32 short_jump; sljit_uw label_addr; if (jump->flags & JUMP_LABEL) label_addr = (sljit_uw)(code + jump->u.label->size); else - label_addr = jump->u.target - executable_offset; + label_addr = jump->u.target - (sljit_uw)executable_offset; short_jump = (sljit_sw)(label_addr - (jump->addr + 2)) >= -128 && (sljit_sw)(label_addr - (jump->addr + 2)) <= 127; @@ -463,7 +469,7 @@ static sljit_u8* generate_near_jump_code(struct sljit_jump *jump, sljit_u8 *code jump->addr++; } else if (short_jump) { - *code_ptr++ = get_jump_code(type) - 0x10; + *code_ptr++ = U8(get_jump_code(type) - 0x10); jump->addr++; } else { @@ -492,7 +498,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil sljit_u8 *buf_end; sljit_u8 len; sljit_sw executable_offset; - sljit_sw jump_addr; + sljit_uw jump_addr; struct sljit_label *label; struct sljit_jump *jump; @@ -530,7 +536,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil switch (*buf_ptr) { case 0: label->addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); - label->size = code_ptr - code; + label->size = (sljit_uw)(code_ptr - code); label = label->next; break; case 1: @@ -575,11 +581,11 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil jump = compiler->jumps; while (jump) { - jump_addr = jump->addr + executable_offset; + jump_addr = jump->addr + (sljit_uw)executable_offset; if (jump->flags & PATCH_MB) { SLJIT_ASSERT((sljit_sw)(jump->u.label->addr - (jump_addr + sizeof(sljit_s8))) >= -128 && (sljit_sw)(jump->u.label->addr - (jump_addr + sizeof(sljit_s8))) <= 127); - *(sljit_u8*)jump->addr = (sljit_u8)(jump->u.label->addr - (jump_addr + sizeof(sljit_s8))); + *(sljit_u8*)jump->addr = U8(jump->u.label->addr - (jump_addr + sizeof(sljit_s8))); } else if (jump->flags & PATCH_MW) { if (jump->flags & JUMP_LABEL) { #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) @@ -600,7 +606,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil } #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) else if (jump->flags & PATCH_MD) - sljit_unaligned_store_sw((void*)jump->addr, jump->u.label->addr); + sljit_unaligned_store_sw((void*)jump->addr, (sljit_sw)jump->u.label->addr); #endif jump = jump->next; @@ -626,7 +632,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil compiler->error = SLJIT_ERR_COMPILED; compiler->executable_offset = executable_offset; - compiler->executable_size = code_ptr - code; + compiler->executable_size = (sljit_uw)(code_ptr - code); code = (sljit_u8*)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); @@ -682,17 +688,40 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) #define BINARY_OPCODE(opcode) (((opcode ## _EAX_i32) << 24) | ((opcode ## _r_rm) << 16) | ((opcode ## _rm_r) << 8) | (opcode)) -static sljit_s32 emit_cum_binary(struct sljit_compiler *compiler, - sljit_u32 op_types, - sljit_s32 dst, sljit_sw dstw, - sljit_s32 src1, sljit_sw src1w, - sljit_s32 src2, sljit_sw src2w); +#define BINARY_IMM32(op_imm, immw, arg, argw) \ + do { \ + inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, immw, arg, argw); \ + FAIL_IF(!inst); \ + *(inst + 1) |= (op_imm); \ + } while (0) -static sljit_s32 emit_non_cum_binary(struct sljit_compiler *compiler, - sljit_u32 op_types, - sljit_s32 dst, sljit_sw dstw, - sljit_s32 src1, sljit_sw src1w, - sljit_s32 src2, sljit_sw src2w); +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + +#define BINARY_IMM(op_imm, op_mr, immw, arg, argw) \ + do { \ + if (IS_HALFWORD(immw) || compiler->mode32) { \ + BINARY_IMM32(op_imm, immw, arg, argw); \ + } \ + else { \ + FAIL_IF(emit_load_imm64(compiler, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, immw)); \ + inst = emit_x86_instruction(compiler, 1, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, 0, arg, argw); \ + FAIL_IF(!inst); \ + *inst = (op_mr); \ + } \ + } while (0) + +#define BINARY_EAX_IMM(op_eax_imm, immw) \ + FAIL_IF(emit_do_imm32(compiler, (!compiler->mode32) ? REX_W : 0, (op_eax_imm), immw)) + +#else /* !SLJIT_CONFIG_X86_64 */ + +#define BINARY_IMM(op_imm, op_mr, immw, arg, argw) \ + BINARY_IMM32(op_imm, immw, arg, argw) + +#define BINARY_EAX_IMM(op_eax_imm, immw) \ + FAIL_IF(emit_do_imm(compiler, (op_eax_imm), immw)) + +#endif /* SLJIT_CONFIG_X86_64 */ static sljit_s32 emit_mov(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw dstw, @@ -795,7 +824,7 @@ static SLJIT_INLINE sljit_s32 cpu_has_shadow_stack(void) } static SLJIT_INLINE sljit_s32 adjust_shadow_stack(struct sljit_compiler *compiler, - sljit_s32 src, sljit_sw srcw, sljit_s32 base, sljit_sw disp) + sljit_s32 src, sljit_sw srcw) { #if (defined SLJIT_CONFIG_X86_CET && SLJIT_CONFIG_X86_CET) && defined (__SHSTK__) sljit_u8 *inst, *jz_after_cmp_inst; @@ -821,12 +850,6 @@ static SLJIT_INLINE sljit_s32 adjust_shadow_stack(struct sljit_compiler *compile EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_MEM1(TMP_REG1), 0); #endif /* SLJIT_CONFIG_X86_32 */ - if (src == SLJIT_UNUSED) { - /* Return address is on stack. */ - src = SLJIT_MEM1(base); - srcw = disp; - } - /* Compare return address against TMP_REG1. */ FAIL_IF(emit_cmp_binary (compiler, TMP_REG1, 0, src, srcw)); @@ -861,8 +884,6 @@ static SLJIT_INLINE sljit_s32 adjust_shadow_stack(struct sljit_compiler *compile SLJIT_UNUSED_ARG(compiler); SLJIT_UNUSED_ARG(src); SLJIT_UNUSED_ARG(srcw); - SLJIT_UNUSED_ARG(base); - SLJIT_UNUSED_ARG(disp); #endif /* SLJIT_CONFIG_X86_CET && __SHSTK__ */ return SLJIT_SUCCESS; } @@ -879,8 +900,6 @@ static sljit_s32 emit_mov(struct sljit_compiler *compiler, { sljit_u8* inst; - SLJIT_ASSERT(dst != SLJIT_UNUSED); - if (FAST_IS_REG(src)) { inst = emit_x86_instruction(compiler, 1, src, 0, dst, dstw); FAIL_IF(!inst); @@ -890,14 +909,14 @@ static sljit_s32 emit_mov(struct sljit_compiler *compiler, if (src & SLJIT_IMM) { if (FAST_IS_REG(dst)) { #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - return emit_do_imm(compiler, MOV_r_i32 + reg_map[dst], srcw); + return emit_do_imm(compiler, MOV_r_i32 | reg_map[dst], srcw); #else if (!compiler->mode32) { if (NOT_HALFWORD(srcw)) return emit_load_imm64(compiler, dst, srcw); } else - return emit_do_imm32(compiler, (reg_map[dst] >= 8) ? REX_B : 0, MOV_r_i32 + reg_lmap[dst], srcw); + return emit_do_imm32(compiler, (reg_map[dst] >= 8) ? REX_B : 0, U8(MOV_r_i32 | reg_lmap[dst]), srcw); #endif } #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) @@ -938,7 +957,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile { sljit_u8 *inst; #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - sljit_s32 size; + sljit_uw size; #endif CHECK_ERROR(); @@ -975,7 +994,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile && reg_map[SLJIT_R1] < 7 && reg_map[TMP_REG1] == 2); #endif - compiler->mode32 = op & SLJIT_I32_OP; + compiler->mode32 = op & SLJIT_32; #endif SLJIT_COMPILE_ASSERT((SLJIT_DIVMOD_UW & 0x2) == 0 && SLJIT_DIV_UW - 0x2 == SLJIT_DIVMOD_UW, bad_div_opcode_assignments); @@ -1084,7 +1103,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); \ FAIL_IF(!inst); \ INC_SIZE(1); \ - *inst = (prefix); \ + *inst = U8(prefix); \ } while (0) static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, @@ -1104,7 +1123,7 @@ static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, if (src & SLJIT_IMM) { if (FAST_IS_REG(dst)) { #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - return emit_do_imm(compiler, MOV_r_i32 + reg_map[dst], srcw); + return emit_do_imm(compiler, MOV_r_i32 | reg_map[dst], srcw); #else inst = emit_x86_instruction(compiler, 1, SLJIT_IMM, srcw, dst, 0); FAIL_IF(!inst); @@ -1134,7 +1153,7 @@ static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) else if (FAST_IS_REG(src) && reg_map[src] >= 4) { /* src, dst are registers. */ - SLJIT_ASSERT(SLOW_IS_REG(dst)); + SLJIT_ASSERT(FAST_IS_REG(dst)); if (reg_map[dst] < 4) { if (dst != src) EMIT_MOV(compiler, dst, 0, src, 0); @@ -1193,7 +1212,7 @@ static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, } if (work_r == SLJIT_R0) { - ENCODE_PREFIX(XCHG_EAX_r + reg_map[TMP_REG1]); + ENCODE_PREFIX(XCHG_EAX_r | reg_map[TMP_REG1]); } else { inst = emit_x86_instruction(compiler, 1, work_r, 0, dst_r, 0); @@ -1206,7 +1225,7 @@ static sljit_s32 emit_mov_byte(struct sljit_compiler *compiler, sljit_s32 sign, *inst = MOV_rm8_r8; if (work_r == SLJIT_R0) { - ENCODE_PREFIX(XCHG_EAX_r + reg_map[TMP_REG1]); + ENCODE_PREFIX(XCHG_EAX_r | reg_map[TMP_REG1]); } else { inst = emit_x86_instruction(compiler, 1, work_r, 0, dst_r, 0); @@ -1267,7 +1286,7 @@ static sljit_s32 emit_mov_half(struct sljit_compiler *compiler, sljit_s32 sign, if (src & SLJIT_IMM) { if (FAST_IS_REG(dst)) { #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - return emit_do_imm(compiler, MOV_r_i32 + reg_map[dst], srcw); + return emit_do_imm(compiler, MOV_r_i32 | reg_map[dst], srcw); #else inst = emit_x86_instruction(compiler, 1, SLJIT_IMM, srcw, dst, 0); FAIL_IF(!inst); @@ -1316,9 +1335,6 @@ static sljit_s32 emit_unary(struct sljit_compiler *compiler, sljit_u8 opcode, return SLJIT_SUCCESS; } - if (SLJIT_UNLIKELY(dst == SLJIT_UNUSED)) - dst = TMP_REG1; - if (FAST_IS_REG(dst)) { EMIT_MOV(compiler, dst, 0, src, srcw); inst = emit_x86_instruction(compiler, 1, 0, 0, dst, 0); @@ -1343,9 +1359,6 @@ static sljit_s32 emit_not_with_flags(struct sljit_compiler *compiler, { sljit_u8* inst; - if (dst == SLJIT_UNUSED) - dst = TMP_REG1; - if (FAST_IS_REG(dst)) { EMIT_MOV(compiler, dst, 0, src, srcw); inst = emit_x86_instruction(compiler, 1, 0, 0, dst, 0); @@ -1412,7 +1425,7 @@ static sljit_s32 emit_clz(struct sljit_compiler *compiler, sljit_s32 op_flags, inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, 31, dst_r, 0); #else if (cpu_has_cmov) { - EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_IMM, !(op_flags & SLJIT_I32_OP) ? (64 + 63) : (32 + 31)); + EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_IMM, !(op_flags & SLJIT_32) ? (64 + 63) : (32 + 31)); inst = emit_x86_instruction(compiler, 2, dst_r, 0, TMP_REG2, 0); FAIL_IF(!inst); @@ -1420,9 +1433,9 @@ static sljit_s32 emit_clz(struct sljit_compiler *compiler, sljit_s32 op_flags, *inst = CMOVE_r_rm; } else - FAIL_IF(sljit_emit_cmov_generic(compiler, SLJIT_EQUAL, dst_r, SLJIT_IMM, !(op_flags & SLJIT_I32_OP) ? (64 + 63) : (32 + 31))); + FAIL_IF(sljit_emit_cmov_generic(compiler, SLJIT_EQUAL, dst_r, SLJIT_IMM, !(op_flags & SLJIT_32) ? (64 + 63) : (32 + 31))); - inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, !(op_flags & SLJIT_I32_OP) ? 63 : 31, dst_r, 0); + inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, !(op_flags & SLJIT_32) ? 63 : 31, dst_r, 0); #endif FAIL_IF(!inst); @@ -1450,7 +1463,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile CHECK_EXTRA_REGS(dst, dstw, dst_is_ereg = 1); CHECK_EXTRA_REGS(src, srcw, (void)0); #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - compiler->mode32 = op_flags & SLJIT_I32_OP; + compiler->mode32 = op_flags & SLJIT_32; #endif op = GET_OPCODE(op); @@ -1465,8 +1478,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return SLJIT_SUCCESS; } - if (op_flags & SLJIT_I32_OP) { #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + if (op_flags & SLJIT_32) { if (src & SLJIT_MEM) { if (op == SLJIT_MOV_S32) op = SLJIT_MOV_U32; @@ -1475,8 +1488,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile if (op == SLJIT_MOV_U32) op = SLJIT_MOV_S32; } -#endif } +#endif if (src & SLJIT_IMM) { switch (op) { @@ -1520,8 +1533,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) case SLJIT_MOV_U32: case SLJIT_MOV_S32: + case SLJIT_MOV32: #endif - FAIL_IF(emit_mov(compiler, dst, dstw, src, srcw)); + EMIT_MOV(compiler, dst, dstw, src, srcw); break; case SLJIT_MOV_U8: FAIL_IF(emit_mov_byte(compiler, 0, dst, dstw, src, srcw)); @@ -1542,6 +1556,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile case SLJIT_MOV_S32: FAIL_IF(emit_mov_int(compiler, 1, dst, dstw, src, srcw)); break; + case SLJIT_MOV32: + compiler->mode32 = 1; + EMIT_MOV(compiler, dst, dstw, src, srcw); + compiler->mode32 = 0; + break; #endif } @@ -1558,9 +1577,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return emit_not_with_flags(compiler, dst, dstw, src, srcw); return emit_unary(compiler, NOT_rm, dst, dstw, src, srcw); - case SLJIT_NEG: - return emit_unary(compiler, NEG_rm, dst, dstw, src, srcw); - case SLJIT_CLZ: return emit_clz(compiler, op_flags, dst, dstw, src, srcw); } @@ -1568,36 +1584,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile return SLJIT_SUCCESS; } -#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - -#define BINARY_IMM(op_imm, op_mr, immw, arg, argw) \ - if (IS_HALFWORD(immw) || compiler->mode32) { \ - inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, immw, arg, argw); \ - FAIL_IF(!inst); \ - *(inst + 1) |= (op_imm); \ - } \ - else { \ - FAIL_IF(emit_load_imm64(compiler, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, immw)); \ - inst = emit_x86_instruction(compiler, 1, (arg == TMP_REG1) ? TMP_REG2 : TMP_REG1, 0, arg, argw); \ - FAIL_IF(!inst); \ - *inst = (op_mr); \ - } - -#define BINARY_EAX_IMM(op_eax_imm, immw) \ - FAIL_IF(emit_do_imm32(compiler, (!compiler->mode32) ? REX_W : 0, (op_eax_imm), immw)) - -#else - -#define BINARY_IMM(op_imm, op_mr, immw, arg, argw) \ - inst = emit_x86_instruction(compiler, 1 | EX86_BIN_INS, SLJIT_IMM, immw, arg, argw); \ - FAIL_IF(!inst); \ - *(inst + 1) |= (op_imm); - -#define BINARY_EAX_IMM(op_eax_imm, immw) \ - FAIL_IF(emit_do_imm(compiler, (op_eax_imm), immw)) - -#endif - static sljit_s32 emit_cum_binary(struct sljit_compiler *compiler, sljit_u32 op_types, sljit_s32 dst, sljit_sw dstw, @@ -1605,23 +1591,10 @@ static sljit_s32 emit_cum_binary(struct sljit_compiler *compiler, sljit_s32 src2, sljit_sw src2w) { sljit_u8* inst; - sljit_u8 op_eax_imm = (op_types >> 24); - sljit_u8 op_rm = (op_types >> 16) & 0xff; - sljit_u8 op_mr = (op_types >> 8) & 0xff; - sljit_u8 op_imm = op_types & 0xff; - - if (dst == SLJIT_UNUSED) { - EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w); - if (src2 & SLJIT_IMM) { - BINARY_IMM(op_imm, op_mr, src2w, TMP_REG1, 0); - } - else { - inst = emit_x86_instruction(compiler, 1, TMP_REG1, 0, src2, src2w); - FAIL_IF(!inst); - *inst = op_rm; - } - return SLJIT_SUCCESS; - } + sljit_u8 op_eax_imm = U8(op_types >> 24); + sljit_u8 op_rm = U8((op_types >> 16) & 0xff); + sljit_u8 op_mr = U8((op_types >> 8) & 0xff); + sljit_u8 op_imm = U8(op_types & 0xff); if (dst == src1 && dstw == src1w) { if (src2 & SLJIT_IMM) { @@ -1725,23 +1698,10 @@ static sljit_s32 emit_non_cum_binary(struct sljit_compiler *compiler, sljit_s32 src2, sljit_sw src2w) { sljit_u8* inst; - sljit_u8 op_eax_imm = (op_types >> 24); - sljit_u8 op_rm = (op_types >> 16) & 0xff; - sljit_u8 op_mr = (op_types >> 8) & 0xff; - sljit_u8 op_imm = op_types & 0xff; - - if (dst == SLJIT_UNUSED) { - EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w); - if (src2 & SLJIT_IMM) { - BINARY_IMM(op_imm, op_mr, src2w, TMP_REG1, 0); - } - else { - inst = emit_x86_instruction(compiler, 1, TMP_REG1, 0, src2, src2w); - FAIL_IF(!inst); - *inst = op_rm; - } - return SLJIT_SUCCESS; - } + sljit_u8 op_eax_imm = U8(op_types >> 24); + sljit_u8 op_rm = U8((op_types >> 16) & 0xff); + sljit_u8 op_mr = U8((op_types >> 8) & 0xff); + sljit_u8 op_imm = U8(op_types & 0xff); if (dst == src1 && dstw == src1w) { if (src2 & SLJIT_IMM) { @@ -1810,9 +1770,7 @@ static sljit_s32 emit_mul(struct sljit_compiler *compiler, sljit_s32 src2, sljit_sw src2w) { sljit_u8* inst; - sljit_s32 dst_r; - - dst_r = SLOW_IS_REG(dst) ? dst : TMP_REG1; + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1; /* Register destination. */ if (dst_r == src1 && !(src2 & SLJIT_IMM)) { @@ -1841,7 +1799,7 @@ static sljit_s32 emit_mul(struct sljit_compiler *compiler, inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); FAIL_IF(!inst); INC_SIZE(1); - *inst = (sljit_s8)src1w; + *inst = U8(src1w); } #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) else { @@ -1884,7 +1842,7 @@ static sljit_s32 emit_mul(struct sljit_compiler *compiler, inst = (sljit_u8*)ensure_buf(compiler, 1 + 1); FAIL_IF(!inst); INC_SIZE(1); - *inst = (sljit_s8)src2w; + *inst = U8(src2w); } #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) else { @@ -2167,13 +2125,6 @@ static sljit_s32 emit_shift(struct sljit_compiler *compiler, *inst |= mode; return SLJIT_SUCCESS; } - if (dst == SLJIT_UNUSED) { - EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w); - inst = emit_x86_instruction(compiler, 1 | EX86_SHIFT_INS, src2, src2w, TMP_REG1, 0); - FAIL_IF(!inst); - *inst |= mode; - return SLJIT_SUCCESS; - } if (dst == SLJIT_PREF_SHIFT_REG && src2 == SLJIT_PREF_SHIFT_REG) { EMIT_MOV(compiler, TMP_REG1, 0, src1, src1w); inst = emit_x86_instruction(compiler, 1 | EX86_SHIFT_INS, SLJIT_PREF_SHIFT_REG, 0, TMP_REG1, 0); @@ -2206,7 +2157,7 @@ static sljit_s32 emit_shift(struct sljit_compiler *compiler, *inst |= mode; EMIT_MOV(compiler, SLJIT_PREF_SHIFT_REG, 0, TMP_REG1, 0); } - else if (SLOW_IS_REG(dst) && dst != src2 && !ADDRESSING_DEPENDS_ON(src2, dst)) { + else if (FAST_IS_REG(dst) && dst != src2 && dst != TMP_REG1 && !ADDRESSING_DEPENDS_ON(src2, dst)) { if (src1 != dst) EMIT_MOV(compiler, dst, 0, src1, src1w); EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_PREF_SHIFT_REG, 0); @@ -2235,7 +2186,7 @@ static sljit_s32 emit_shift(struct sljit_compiler *compiler, *inst |= mode; EMIT_MOV(compiler, SLJIT_PREF_SHIFT_REG, 0, TMP_REG2, 0); #endif - if (dst != SLJIT_UNUSED) + if (dst != TMP_REG1) return emit_mov(compiler, dst, dstw, TMP_REG1, 0); } @@ -2273,7 +2224,7 @@ static sljit_s32 emit_shift_with_flags(struct sljit_compiler *compiler, FAIL_IF(emit_shift(compiler, mode, dst, dstw, src1, src1w, src2, src2w)); if (FAST_IS_REG(dst)) - return emit_cmp_binary(compiler, (dst == SLJIT_UNUSED) ? TMP_REG1 : dst, dstw, SLJIT_IMM, 0); + return emit_cmp_binary(compiler, dst, dstw, SLJIT_IMM, 0); return SLJIT_SUCCESS; } @@ -2283,7 +2234,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile sljit_s32 src2, sljit_sw src2w) { CHECK_ERROR(); - CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); ADJUST_LOCAL_OFFSET(dst, dstw); ADJUST_LOCAL_OFFSET(src1, src1w); ADJUST_LOCAL_OFFSET(src2, src2w); @@ -2292,11 +2243,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile CHECK_EXTRA_REGS(src1, src1w, (void)0); CHECK_EXTRA_REGS(src2, src2w, (void)0); #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - compiler->mode32 = op & SLJIT_I32_OP; + compiler->mode32 = op & SLJIT_32; #endif - if (dst == SLJIT_UNUSED && !HAS_FLAGS(op)) - return SLJIT_SUCCESS; + SLJIT_ASSERT(dst != TMP_REG1 || HAS_FLAGS(op)); switch (GET_OPCODE(op)) { case SLJIT_ADD: @@ -2310,17 +2260,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return emit_cum_binary(compiler, BINARY_OPCODE(ADC), dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUB: + if (src1 == SLJIT_IMM && src1w == 0) + return emit_unary(compiler, NEG_rm, dst, dstw, src2, src2w); + if (!HAS_FLAGS(op)) { if ((src2 & SLJIT_IMM) && emit_lea_binary(compiler, dst, dstw, src1, src1w, SLJIT_IMM, -src2w) != SLJIT_ERR_UNSUPPORTED) return compiler->error; - if (SLOW_IS_REG(dst) && src2 == dst) { + if (FAST_IS_REG(dst) && src2 == dst) { FAIL_IF(emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), dst, 0, dst, 0, src1, src1w)); return emit_unary(compiler, NEG_rm, dst, 0, dst, 0); } } - if (dst == SLJIT_UNUSED) - return emit_cmp_binary(compiler, src1, src1w, src2, src2w); return emit_non_cum_binary(compiler, BINARY_OPCODE(SUB), dst, dstw, src1, src1w, src2, src2w); case SLJIT_SUBC: @@ -2329,8 +2280,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile case SLJIT_MUL: return emit_mul(compiler, dst, dstw, src1, src1w, src2, src2w); case SLJIT_AND: - if (dst == SLJIT_UNUSED) - return emit_test_binary(compiler, src1, src1w, src2, src2w); return emit_cum_binary(compiler, BINARY_OPCODE(AND), dst, dstw, src1, src1w, src2, src2w); case SLJIT_OR: @@ -2353,6 +2302,38 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile return SLJIT_SUCCESS; } +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 opcode = GET_OPCODE(op); + + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + + if (opcode != SLJIT_SUB && opcode != SLJIT_AND) { +#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ + || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS) + compiler->skip_checks = 1; +#endif + return sljit_emit_op2(compiler, op, TMP_REG1, 0, src1, src1w, src2, src2w); + } + + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + CHECK_EXTRA_REGS(src1, src1w, (void)0); + CHECK_EXTRA_REGS(src2, src2w, (void)0); +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + compiler->mode32 = op & SLJIT_32; +#endif + + if (opcode == SLJIT_SUB) { + return emit_cmp_binary(compiler, src1, src1w, src2, src2w); + } + return emit_test_binary(compiler, src1, src1w, src2, src2w); +} + SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 src, sljit_sw srcw) { @@ -2369,7 +2350,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *comp /* Don't adjust shadow stack if it isn't enabled. */ if (!cpu_has_shadow_stack ()) return SLJIT_SUCCESS; - return adjust_shadow_stack(compiler, src, srcw, SLJIT_UNUSED, 0); + return adjust_shadow_stack(compiler, src, srcw); case SLJIT_PREFETCH_L1: case SLJIT_PREFETCH_L2: case SLJIT_PREFETCH_L3: @@ -2401,7 +2382,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg) } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, - void *instruction, sljit_s32 size) + void *instruction, sljit_u32 size) { sljit_u8 *inst; @@ -2420,13 +2401,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *c /* --------------------------------------------------------------------- */ /* Alignment(3) + 4 * 16 bytes. */ -static sljit_s32 sse2_data[3 + (4 * 4)]; -static sljit_s32 *sse2_buffer; +static sljit_u32 sse2_data[3 + (4 * 4)]; +static sljit_u32 *sse2_buffer; static void init_compiler(void) { /* Align to 16 bytes. */ - sse2_buffer = (sljit_s32*)(((sljit_uw)sse2_data + 15) & ~0xf); + sse2_buffer = (sljit_u32*)(((sljit_uw)sse2_data + 15) & ~(sljit_uw)0xf); /* Single precision constants (each constant is 16 byte long). */ sse2_buffer[0] = 0x80000000; @@ -2486,7 +2467,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_comp compiler->mode32 = 0; #endif - inst = emit_x86_instruction(compiler, 2 | ((op & SLJIT_F32_OP) ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2_OP2, dst_r, 0, src, srcw); + inst = emit_x86_instruction(compiler, 2 | ((op & SLJIT_32) ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2_OP2, dst_r, 0, src, srcw); FAIL_IF(!inst); *inst++ = GROUP_0F; *inst = CVTTSD2SI_r_xm; @@ -2518,7 +2499,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp srcw = 0; } - inst = emit_x86_instruction(compiler, 2 | ((op & SLJIT_F32_OP) ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2_OP1, dst_r, 0, src, srcw); + inst = emit_x86_instruction(compiler, 2 | ((op & SLJIT_32) ? EX86_PREF_F3 : EX86_PREF_F2) | EX86_SSE2_OP1, dst_r, 0, src, srcw); FAIL_IF(!inst); *inst++ = GROUP_0F; *inst = CVTSI2SD_x_rm; @@ -2527,7 +2508,7 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_comp compiler->mode32 = 1; #endif if (dst_r == TMP_FREG) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); return SLJIT_SUCCESS; } @@ -2536,11 +2517,11 @@ static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compile sljit_s32 src2, sljit_sw src2w) { if (!FAST_IS_REG(src1)) { - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, TMP_FREG, src1, src1w)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src1, src1w)); src1 = TMP_FREG; } - return emit_sse2_logic(compiler, UCOMISD_x_xm, !(op & SLJIT_F32_OP), src1, src2, src2w); + return emit_sse2_logic(compiler, UCOMISD_x_xm, !(op & SLJIT_32), src1, src2, src2w); } SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op, @@ -2558,11 +2539,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil if (GET_OPCODE(op) == SLJIT_MOV_F64) { if (FAST_IS_REG(dst)) - return emit_sse2_load(compiler, op & SLJIT_F32_OP, dst, src, srcw); + return emit_sse2_load(compiler, op & SLJIT_32, dst, src, srcw); if (FAST_IS_REG(src)) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, src); - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, TMP_FREG, src, srcw)); - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, src); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src, srcw)); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); } if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) { @@ -2571,41 +2552,41 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compil /* We overwrite the high bits of source. From SLJIT point of view, this is not an issue. Note: In SSE3, we could also use MOVDDUP and MOVSLDUP. */ - FAIL_IF(emit_sse2_logic(compiler, UNPCKLPD_x_xm, op & SLJIT_F32_OP, src, src, 0)); + FAIL_IF(emit_sse2_logic(compiler, UNPCKLPD_x_xm, op & SLJIT_32, src, src, 0)); } else { - FAIL_IF(emit_sse2_load(compiler, !(op & SLJIT_F32_OP), TMP_FREG, src, srcw)); + FAIL_IF(emit_sse2_load(compiler, !(op & SLJIT_32), TMP_FREG, src, srcw)); src = TMP_FREG; } - FAIL_IF(emit_sse2_logic(compiler, CVTPD2PS_x_xm, op & SLJIT_F32_OP, dst_r, src, 0)); + FAIL_IF(emit_sse2_logic(compiler, CVTPD2PS_x_xm, op & SLJIT_32, dst_r, src, 0)); if (dst_r == TMP_FREG) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); return SLJIT_SUCCESS; } if (FAST_IS_REG(dst)) { dst_r = dst; if (dst != src) - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, dst_r, src, srcw)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, dst_r, src, srcw)); } else { dst_r = TMP_FREG; - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, dst_r, src, srcw)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, dst_r, src, srcw)); } switch (GET_OPCODE(op)) { case SLJIT_NEG_F64: - FAIL_IF(emit_sse2_logic(compiler, XORPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_F32_OP ? sse2_buffer : sse2_buffer + 8))); + FAIL_IF(emit_sse2_logic(compiler, XORPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_32 ? sse2_buffer : sse2_buffer + 8))); break; case SLJIT_ABS_F64: - FAIL_IF(emit_sse2_logic(compiler, ANDPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_F32_OP ? sse2_buffer + 4 : sse2_buffer + 12))); + FAIL_IF(emit_sse2_logic(compiler, ANDPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_32 ? sse2_buffer + 4 : sse2_buffer + 12))); break; } if (dst_r == TMP_FREG) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); return SLJIT_SUCCESS; } @@ -2636,37 +2617,37 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compil src2w = src1w; } else if (dst != src2) - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, dst_r, src1, src1w)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, dst_r, src1, src1w)); else { dst_r = TMP_FREG; - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, TMP_FREG, src1, src1w)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src1, src1w)); } } else { dst_r = TMP_FREG; - FAIL_IF(emit_sse2_load(compiler, op & SLJIT_F32_OP, TMP_FREG, src1, src1w)); + FAIL_IF(emit_sse2_load(compiler, op & SLJIT_32, TMP_FREG, src1, src1w)); } switch (GET_OPCODE(op)) { case SLJIT_ADD_F64: - FAIL_IF(emit_sse2(compiler, ADDSD_x_xm, op & SLJIT_F32_OP, dst_r, src2, src2w)); + FAIL_IF(emit_sse2(compiler, ADDSD_x_xm, op & SLJIT_32, dst_r, src2, src2w)); break; case SLJIT_SUB_F64: - FAIL_IF(emit_sse2(compiler, SUBSD_x_xm, op & SLJIT_F32_OP, dst_r, src2, src2w)); + FAIL_IF(emit_sse2(compiler, SUBSD_x_xm, op & SLJIT_32, dst_r, src2, src2w)); break; case SLJIT_MUL_F64: - FAIL_IF(emit_sse2(compiler, MULSD_x_xm, op & SLJIT_F32_OP, dst_r, src2, src2w)); + FAIL_IF(emit_sse2(compiler, MULSD_x_xm, op & SLJIT_32, dst_r, src2, src2w)); break; case SLJIT_DIV_F64: - FAIL_IF(emit_sse2(compiler, DIVSD_x_xm, op & SLJIT_F32_OP, dst_r, src2, src2w)); + FAIL_IF(emit_sse2(compiler, DIVSD_x_xm, op & SLJIT_32, dst_r, src2, src2w)); break; } if (dst_r == TMP_FREG) - return emit_sse2_store(compiler, op & SLJIT_F32_OP, dst, dstw, TMP_FREG); + return emit_sse2_store(compiler, op & SLJIT_32, dst, dstw, TMP_FREG); return SLJIT_SUCCESS; } @@ -2708,7 +2689,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); PTR_FAIL_IF_NULL(jump); - set_jump(jump, compiler, (type & SLJIT_REWRITABLE_JUMP) | ((type & 0xff) << TYPE_SHIFT)); + set_jump(jump, compiler, (sljit_u32)((type & SLJIT_REWRITABLE_JUMP) | ((type & 0xff) << TYPE_SHIFT))); type &= 0xff; /* Worst case size. */ @@ -2740,8 +2721,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi if (src == SLJIT_IMM) { jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); FAIL_IF_NULL(jump); - set_jump(jump, compiler, JUMP_ADDR | (type << TYPE_SHIFT)); - jump->u.target = srcw; + set_jump(jump, compiler, (sljit_u32)(JUMP_ADDR | (type << TYPE_SHIFT))); + jump->u.target = (sljit_uw)srcw; /* Worst case size. */ #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) @@ -2764,7 +2745,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi inst = emit_x86_instruction(compiler, 1, 0, 0, src, srcw); FAIL_IF(!inst); *inst++ = GROUP_FF; - *inst |= (type >= SLJIT_FAST_CALL) ? CALL_rm : JMP_rm; + *inst = U8(*inst | ((type >= SLJIT_FAST_CALL) ? CALL_rm : JMP_rm)); } return SLJIT_SUCCESS; } @@ -2790,7 +2771,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co type &= 0xff; /* setcc = jcc + 0x10. */ - cond_set = get_jump_code(type) + 0x10; + cond_set = U8(get_jump_code((sljit_uw)type) + 0x10); #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) if (GET_OPCODE(op) == SLJIT_OR && !GET_ALL_FLAGS(op) && FAST_IS_REG(dst)) { @@ -2802,9 +2783,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co *inst++ = GROUP_0F; *inst++ = cond_set; *inst++ = MOD_REG | reg_lmap[TMP_REG1]; - *inst++ = REX | (reg_map[TMP_REG1] <= 7 ? 0 : REX_R) | (reg_map[dst] <= 7 ? 0 : REX_B); + *inst++ = U8(REX | (reg_map[TMP_REG1] <= 7 ? 0 : REX_R) | (reg_map[dst] <= 7 ? 0 : REX_B)); *inst++ = OR_rm8_r8; - *inst++ = MOD_REG | (reg_lmap[TMP_REG1] << 3) | reg_lmap[dst]; + *inst++ = U8(MOD_REG | (reg_lmap[TMP_REG1] << 3) | reg_lmap[dst]); return SLJIT_SUCCESS; } @@ -2822,7 +2803,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co /* The movzx instruction does not affect flags. */ *inst++ = GROUP_0F; *inst++ = MOVZX_r_rm8; - *inst = MOD_REG | (reg_lmap[reg] << 3) | reg_lmap[reg]; + *inst = U8(MOD_REG | (reg_lmap[reg] << 3) | reg_lmap[reg]); if (reg != TMP_REG1) return SLJIT_SUCCESS; @@ -2849,11 +2830,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co /* Set low byte to conditional flag. */ *inst++ = GROUP_0F; *inst++ = cond_set; - *inst++ = MOD_REG | reg_map[dst]; + *inst++ = U8(MOD_REG | reg_map[dst]); *inst++ = GROUP_0F; *inst++ = MOVZX_r_rm8; - *inst = MOD_REG | (reg_map[dst] << 3) | reg_map[dst]; + *inst = U8(MOD_REG | (reg_map[dst] << 3) | reg_map[dst]); return SLJIT_SUCCESS; } @@ -2872,15 +2853,15 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co *inst++ = GROUP_0F; /* cmovcc = setcc - 0x50. */ - *inst++ = cond_set - 0x50; - *inst++ = MOD_REG | (reg_map[dst] << 3) | reg_map[TMP_REG1]; + *inst++ = U8(cond_set - 0x50); + *inst++ = U8(MOD_REG | (reg_map[dst] << 3) | reg_map[TMP_REG1]); return SLJIT_SUCCESS; } inst = (sljit_u8*)ensure_buf(compiler, 1 + 1 + 3 + 3 + 1); FAIL_IF(!inst); INC_SIZE(1 + 3 + 3 + 1); - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); /* Set al to conditional flag. */ *inst++ = GROUP_0F; *inst++ = cond_set; @@ -2888,8 +2869,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co *inst++ = GROUP_0F; *inst++ = MOVZX_r_rm8; - *inst++ = MOD_REG | (reg_map[dst] << 3) | 0 /* eax */; - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(MOD_REG | (reg_map[dst] << 3) | 0 /* eax */); + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); return SLJIT_SUCCESS; } @@ -2901,13 +2882,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co FAIL_IF(!inst); INC_SIZE(1 + 3 + 2 + 1); /* Set low register to conditional flag. */ - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); *inst++ = GROUP_0F; *inst++ = cond_set; *inst++ = MOD_REG | 0 /* eax */; *inst++ = OR_rm8_r8; *inst++ = MOD_REG | (0 /* eax */ << 3) | reg_map[dst]; - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); } else { inst = (sljit_u8*)ensure_buf(compiler, 1 + 2 + 3 + 2 + 2); @@ -2915,14 +2896,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co INC_SIZE(2 + 3 + 2 + 2); /* Set low register to conditional flag. */ *inst++ = XCHG_r_rm; - *inst++ = MOD_REG | (1 /* ecx */ << 3) | reg_map[TMP_REG1]; + *inst++ = U8(MOD_REG | (1 /* ecx */ << 3) | reg_map[TMP_REG1]); *inst++ = GROUP_0F; *inst++ = cond_set; *inst++ = MOD_REG | 1 /* ecx */; *inst++ = OR_rm8_r8; *inst++ = MOD_REG | (1 /* ecx */ << 3) | 0 /* eax */; *inst++ = XCHG_r_rm; - *inst++ = MOD_REG | (1 /* ecx */ << 3) | reg_map[TMP_REG1]; + *inst++ = U8(MOD_REG | (1 /* ecx */ << 3) | reg_map[TMP_REG1]); } return SLJIT_SUCCESS; } @@ -2931,7 +2912,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co inst = (sljit_u8*)ensure_buf(compiler, 1 + 1 + 3 + 3 + 1); FAIL_IF(!inst); INC_SIZE(1 + 3 + 3 + 1); - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); /* Set al to conditional flag. */ *inst++ = GROUP_0F; *inst++ = cond_set; @@ -2941,7 +2922,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co *inst++ = MOVZX_r_rm8; *inst++ = MOD_REG | (0 << 3) /* eax */ | 0 /* eax */; - *inst++ = XCHG_EAX_r + reg_map[TMP_REG1]; + *inst++ = U8(XCHG_EAX_r | reg_map[TMP_REG1]); if (GET_OPCODE(op) < SLJIT_ADD) return emit_mov(compiler, dst, dstw, TMP_REG1, 0); @@ -2964,7 +2945,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw)); #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - dst_reg &= ~SLJIT_I32_OP; + dst_reg &= ~SLJIT_32; if (!sljit_has_cpu_feature(SLJIT_HAS_CMOV) || (dst_reg >= SLJIT_R3 && dst_reg <= SLJIT_S3)) return sljit_emit_cmov_generic(compiler, type, dst_reg, src, srcw); @@ -2977,8 +2958,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil CHECK_EXTRA_REGS(src, srcw, (void)0); #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - compiler->mode32 = dst_reg & SLJIT_I32_OP; - dst_reg &= ~SLJIT_I32_OP; + compiler->mode32 = dst_reg & SLJIT_32; + dst_reg &= ~SLJIT_32; #endif if (SLJIT_UNLIKELY(src & SLJIT_IMM)) { @@ -2990,7 +2971,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil inst = emit_x86_instruction(compiler, 2, dst_reg, 0, src, srcw); FAIL_IF(!inst); *inst++ = GROUP_0F; - *inst = get_jump_code(type & 0xff) - 0x40; + *inst = U8(get_jump_code(type & 0xff) - 0x40); return SLJIT_SUCCESS; } @@ -3123,9 +3104,9 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_ta SLJIT_UPDATE_WX_FLAGS((void*)addr, (void*)(addr + sizeof(sljit_uw)), 0); #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) - sljit_unaligned_store_sw((void*)addr, new_target - (addr + 4) - (sljit_uw)executable_offset); + sljit_unaligned_store_sw((void*)addr, (sljit_sw)(new_target - (addr + 4) - (sljit_uw)executable_offset)); #else - sljit_unaligned_store_sw((void*)addr, (sljit_sw) new_target); + sljit_unaligned_store_sw((void*)addr, (sljit_sw)new_target); #endif SLJIT_UPDATE_WX_FLAGS((void*)addr, (void*)(addr + sizeof(sljit_uw)), 1); } diff --git a/src/3rdparty/pcre2/src/sljit/sljitProtExecAllocator.c b/src/3rdparty/pcre2/src/sljit/sljitProtExecAllocator.c index 147175af..915411fb 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitProtExecAllocator.c +++ b/src/3rdparty/pcre2/src/sljit/sljitProtExecAllocator.c @@ -66,7 +66,7 @@ /* --------------------------------------------------------------------- */ /* 64 KByte. */ -#define CHUNK_SIZE 0x10000 +#define CHUNK_SIZE (sljit_uw)0x10000 struct chunk_header { void *executable; @@ -194,7 +194,7 @@ static SLJIT_INLINE struct chunk_header* alloc_chunk(sljit_uw size) if (fd == -1) return NULL; - if (ftruncate(fd, size)) { + if (ftruncate(fd, (off_t)size)) { close(fd); return NULL; } @@ -281,7 +281,7 @@ struct free_block { #define AS_FREE_BLOCK(base, offset) \ ((struct free_block*)(((sljit_u8*)base) + offset)) #define MEM_START(base) ((void*)((base) + 1)) -#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7) & ~7) +#define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7u) & ~(sljit_uw)7) static struct free_block* free_blocks; static sljit_uw allocated_size; diff --git a/src/3rdparty/pcre2/src/sljit/sljitUtils.c b/src/3rdparty/pcre2/src/sljit/sljitUtils.c index 9bce7147..967593b1 100644 --- a/src/3rdparty/pcre2/src/sljit/sljitUtils.c +++ b/src/3rdparty/pcre2/src/sljit/sljitUtils.c @@ -131,12 +131,12 @@ static SLJIT_INLINE int open_dev_zero(void) #ifdef _WIN32 -static SLJIT_INLINE sljit_sw get_page_alignment(void) { +static SLJIT_INLINE sljit_uw get_page_alignment(void) { SYSTEM_INFO si; - static sljit_sw sljit_page_align; + static sljit_uw sljit_page_align = 0; if (!sljit_page_align) { GetSystemInfo(&si); - sljit_page_align = si.dwPageSize - 1; + sljit_page_align = (sljit_uw)si.dwPageSize - 1; } return sljit_page_align; } @@ -145,18 +145,21 @@ static SLJIT_INLINE sljit_sw get_page_alignment(void) { #include -static SLJIT_INLINE sljit_sw get_page_alignment(void) { - static sljit_sw sljit_page_align = -1; - if (sljit_page_align < 0) { +static SLJIT_INLINE sljit_uw get_page_alignment(void) { + static sljit_uw sljit_page_align = 0; + + sljit_sw align; + + if (!sljit_page_align) { #ifdef _SC_PAGESIZE - sljit_page_align = sysconf(_SC_PAGESIZE); + align = sysconf(_SC_PAGESIZE); #else - sljit_page_align = getpagesize(); + align = getpagesize(); #endif /* Should never happen. */ - if (sljit_page_align < 0) - sljit_page_align = 4096; - sljit_page_align--; + if (align < 0) + align = 4096; + sljit_page_align = (sljit_uw)align - 1; } return sljit_page_align; } @@ -227,7 +230,7 @@ SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *st SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *stack, void *allocator_data) { SLJIT_UNUSED_ARG(allocator_data); - munmap((void*)stack->min_start, stack->end - stack->min_start); + munmap((void*)stack->min_start, (size_t)(stack->end - stack->min_start)); SLJIT_FREE(stack, allocator_data); } @@ -237,7 +240,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_FUNC sljit_allocate_stack(slj { struct sljit_stack *stack; void *ptr; - sljit_sw page_align; + sljit_uw page_align; SLJIT_UNUSED_ARG(allocator_data); @@ -295,7 +298,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_st #if defined _WIN32 || defined(POSIX_MADV_DONTNEED) sljit_uw aligned_old_start; sljit_uw aligned_new_start; - sljit_sw page_align; + sljit_uw page_align; #endif if ((new_start < stack->min_start) || (new_start >= stack->end)) diff --git a/src/3rdparty/zlib/qt_attribution.json b/src/3rdparty/zlib/qt_attribution.json index ea3a476e..07bea6ba 100644 --- a/src/3rdparty/zlib/qt_attribution.json +++ b/src/3rdparty/zlib/qt_attribution.json @@ -6,10 +6,10 @@ "Description": "zlib is a general purpose data compression library.", "Homepage": "http://zlib.net/", - "Version": "1.2.11", + "Version": "1.2.12", "License": "zlib License", "LicenseId": "Zlib", "LicenseFile": "LICENSE", - "Copyright": "(C) 1995-2017 Jean-loup Gailly and Mark Adler" + "Copyright": "(C) 1995-2022 Jean-loup Gailly and Mark Adler" } diff --git a/src/3rdparty/zlib/qtpatches.diff b/src/3rdparty/zlib/qtpatches.diff index 105dda96..681697af 100644 --- a/src/3rdparty/zlib/qtpatches.diff +++ b/src/3rdparty/zlib/qtpatches.diff @@ -1,21 +1,21 @@ diff -ruN orig/ChangeLog src/ChangeLog ---- orig/ChangeLog 2017-08-03 08:25:11.347386101 +0200 -+++ src/ChangeLog 2017-08-03 08:25:21.477268439 +0200 +--- orig/ChangeLog ++++ src/ChangeLog @@ -1,6 +1,10 @@ ChangeLog file for zlib -+Changes in 1.2.11 (Qt) (28 Jul 2017) ++Changes in 1.2.12 (Qt) (28 Mar 2022) +- This is a stripped down copy of zlib that contains patches to + make it compile as part of Qt. See also "qtpatches.diff". + - Changes in 1.2.11 (15 Jan 2017) - - Fix deflate stored bug when pulling last block from window - - Permit immediate deflateParams changes before any deflate input + Changes in 1.2.12 (27 Mar 2022) + - Cygwin does not have _wopen(), so do not create gzopen_w() there + - Permit a deflateParams() parameter change as soon as possible diff -ruN orig/gzguts.h src/gzguts.h ---- orig/gzguts.h 2017-08-03 08:25:11.347386101 +0200 -+++ src/gzguts.h 2017-08-03 08:25:21.477268439 +0200 -@@ -3,6 +3,15 @@ +--- orig/gzguts.h ++++ src/gzguts.h +@@ -3,6 +3,25 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -26,6 +26,8 @@ diff -ruN orig/gzguts.h src/gzguts.h +# ifndef _CRT_NONSTDC_NO_DEPRECATE +# define _CRT_NONSTDC_NO_DEPRECATE +# endif ++// disable warnings like '=': conversion from 'size_t' to 'unsigned int', possible loss of data ++# pragma warning(disable: 4267; disable: 4244) +#endif + #ifdef _LARGEFILE64_SOURCE @@ -43,13 +45,12 @@ diff -ruN orig/gzguts.h src/gzguts.h +#define HAVE_HIDDEN +#endif + -+ - #ifdef HAVE_HIDDEN - # define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) - #else + #ifdef _LARGEFILE64_SOURCE + # ifndef _LARGEFILE_SOURCE + # define _LARGEFILE_SOURCE 1 diff -ruN orig/README src/README ---- orig/README 2017-08-03 08:25:11.347386101 +0200 -+++ src/README 2017-08-03 08:25:21.477268439 +0200 +--- orig/README ++++ src/README @@ -6,6 +6,9 @@ http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). @@ -61,8 +62,8 @@ diff -ruN orig/README src/README (volunteer to write man pages welcome, contact zlib@gzip.org). A usage example of the library is given in the file test/example.c which also tests that diff -ruN orig/zconf.h src/zconf.h ---- orig/zconf.h 2017-08-03 08:25:11.347386101 +0200 -+++ src/zconf.h 2017-08-03 08:25:21.477268439 +0200 +--- orig/zconf.h ++++ src/zconf.h @@ -8,6 +8,9 @@ #ifndef ZCONF_H #define ZCONF_H @@ -91,9 +92,9 @@ diff -ruN orig/zconf.h src/zconf.h #endif diff -ruN orig/zlib.h src/zlib.h ---- orig/zlib.h 2017-08-03 08:25:11.347386101 +0200 -+++ src/zlib.h 2017-08-03 08:25:21.480601733 +0200 -@@ -33,12 +33,16 @@ +--- orig/zlib.h ++++ src/zlib.h +@@ -33,11 +33,15 @@ #include "zconf.h" @@ -105,17 +106,15 @@ diff -ruN orig/zlib.h src/zlib.h extern "C" { #endif --#define ZLIB_VERSION "1.2.11" --#define ZLIB_VERNUM 0x12b0 -+#define ZLIB_VERSION "1.2.11 (Qt)" -+#define ZLIB_VERNUM 0x12b0f +-#define ZLIB_VERSION "1.2.12" ++#define ZLIB_VERSION "1.2.12 (Qt)" + #define ZLIB_VERNUM 0x12c0 #define ZLIB_VER_MAJOR 1 #define ZLIB_VER_MINOR 2 - #define ZLIB_VER_REVISION 11 diff -ruN orig/zutil.h src/zutil.h ---- orig/zutil.h 2017-08-03 08:25:11.347386101 +0200 -+++ src/zutil.h 2017-08-03 08:30:04.490657570 +0200 -@@ -13,6 +13,15 @@ +--- orig/zutil.h ++++ src/zutil.h +@@ -13,6 +13,14 @@ #ifndef ZUTIL_H #define ZUTIL_H @@ -126,12 +125,11 @@ diff -ruN orig/zutil.h src/zutil.h +#ifdef QT_VISIBILITY_AVAILABLE +#define HAVE_HIDDEN +#endif -+ + #ifdef HAVE_HIDDEN # define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) #else -@@ -136,6 +145,11 @@ +@@ -143,6 +151,11 @@ # if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os # include /* for fdopen */ # else @@ -143,7 +141,7 @@ diff -ruN orig/zutil.h src/zutil.h # ifndef fdopen # define fdopen(fd,mode) NULL /* No fdopen() */ # endif -@@ -159,7 +173,7 @@ +@@ -166,7 +179,7 @@ # define OS_CODE 18 #endif diff --git a/src/3rdparty/zlib/src/ChangeLog b/src/3rdparty/zlib/src/ChangeLog index 251a3226..14939b20 100644 --- a/src/3rdparty/zlib/src/ChangeLog +++ b/src/3rdparty/zlib/src/ChangeLog @@ -1,10 +1,73 @@ ChangeLog file for zlib -Changes in 1.2.11 (Qt) (28 Jul 2017) +Changes in 1.2.12 (Qt) (28 Mar 2022) - This is a stripped down copy of zlib that contains patches to make it compile as part of Qt. See also "qtpatches.diff". +Changes in 1.2.12 (27 Mar 2022) +- Cygwin does not have _wopen(), so do not create gzopen_w() there +- Permit a deflateParams() parameter change as soon as possible +- Limit hash table inserts after switch from stored deflate +- Fix bug when window full in deflate_stored() +- Fix CLEAR_HASH macro to be usable as a single statement +- Avoid a conversion error in gzseek when off_t type too small +- Have Makefile return non-zero error code on test failure +- Avoid some conversion warnings in gzread.c and gzwrite.c +- Update use of errno for newer Windows CE versions +- Small speedup to inflate [psumbera] +- Return an error if the gzputs string length can't fit in an int +- Add address checking in clang to -w option of configure +- Don't compute check value for raw inflate if asked to validate +- Handle case where inflateSync used when header never processed +- Avoid the use of ptrdiff_t +- Avoid an undefined behavior of memcpy() in gzappend() +- Avoid undefined behaviors of memcpy() in gz*printf() +- Avoid an undefined behavior of memcpy() in _tr_stored_block() +- Make the names in functions declarations identical to definitions +- Remove old assembler code in which bugs have manifested +- Fix deflateEnd() to not report an error at start of raw deflate +- Add legal disclaimer to README +- Emphasize the need to continue decompressing gzip members +- Correct the initialization requirements for deflateInit2() +- Fix a bug that can crash deflate on some input when using Z_FIXED +- Assure that the number of bits for deflatePrime() is valid +- Use a structure to make globals in enough.c evident +- Use a macro for the printf format of big_t in enough.c +- Clean up code style in enough.c, update version +- Use inline function instead of macro for index in enough.c +- Clarify that prefix codes are counted in enough.c +- Show all the codes for the maximum tables size in enough.c +- Add gznorm.c example, which normalizes gzip files +- Fix the zran.c example to work on a multiple-member gzip file +- Add tables for crc32_combine(), to speed it up by a factor of 200 +- Add crc32_combine_gen() and crc32_combine_op() for fast combines +- Speed up software CRC-32 computation by a factor of 1.5 to 3 +- Use atomic test and set, if available, for dynamic CRC tables +- Don't bother computing check value after successful inflateSync() +- Correct comment in crc32.c +- Add use of the ARMv8 crc32 instructions when requested +- Use ARM crc32 instructions if the ARM architecture has them +- Explicitly note that the 32-bit check values are 32 bits +- Avoid adding empty gzip member after gzflush with Z_FINISH +- Fix memory leak on error in gzlog.c +- Fix error in comment on the polynomial representation of a byte +- Clarify gz* function interfaces, referring to parameter names +- Change macro name in inflate.c to avoid collision in VxWorks +- Correct typo in blast.c +- Improve portability of contrib/minizip +- Fix indentation in minizip's zip.c +- Replace black/white with allow/block. (theresa-m) +- minizip warning fix if MAXU32 already defined. (gvollant) +- Fix unztell64() in minizip to work past 4GB. (Daniël Hörchner) +- Clean up minizip to reduce warnings for testing +- Add fallthrough comments for gcc +- Eliminate use of ULL constants +- Separate out address sanitizing from warnings in configure +- Remove destructive aspects of make distclean +- Check for cc masquerading as gcc or clang in configure +- Fix crc32.c to compile local functions only if used + Changes in 1.2.11 (15 Jan 2017) - Fix deflate stored bug when pulling last block from window - Permit immediate deflateParams changes before any deflate input @@ -515,7 +578,7 @@ Changes in 1.2.3.5 (8 Jan 2010) - Don't use _vsnprintf on later versions of MSVC [Lowman] - Add CMake build script and input file [Lowman] - Update contrib/minizip to 1.1 [Svensson, Vollant] -- Moved nintendods directory from contrib to . +- Moved nintendods directory from contrib to root - Replace gzio.c with a new set of routines with the same functionality - Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above - Update contrib/minizip to 1.1b @@ -689,7 +752,7 @@ Changes in 1.2.2.4 (11 July 2005) - Be more strict on incomplete code sets in inflate_table() and increase ENOUGH and MAXD -- this repairs a possible security vulnerability for invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for - discovering the vulnerability and providing test cases. + discovering the vulnerability and providing test cases - Add ia64 support to configure for HP-UX [Smith] - Add error return to gzread() for format or i/o error [Levin] - Use malloc.h for OS/2 [Necasek] @@ -725,7 +788,7 @@ Changes in 1.2.2.2 (30 December 2004) - Add Z_FIXED strategy option to deflateInit2() to force fixed trees - Add updated make_vms.com [Coghlan], update README - Create a new "examples" directory, move gzappend.c there, add zpipe.c, - fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html. + fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html - Add FAQ entry and comments in deflate.c on uninitialized memory access - Add Solaris 9 make options in configure [Gilbert] - Allow strerror() usage in gzio.c for STDC @@ -796,7 +859,7 @@ Changes in 1.2.1.1 (9 January 2004) - Fix a big fat bug in inftrees.c that prevented decoding valid dynamic blocks with only literals and no distance codes -- Thanks to "Hot Emu" for the bug report and sample file -- Add a note to puff.c on no distance codes case. +- Add a note to puff.c on no distance codes case Changes in 1.2.1 (17 November 2003) - Remove a tab in contrib/gzappend/gzappend.c @@ -1040,14 +1103,14 @@ Changes in 1.2.0 (9 March 2003) - Add contrib/puff/ simple inflate for deflate format description Changes in 1.1.4 (11 March 2002) -- ZFREE was repeated on same allocation on some error conditions. +- ZFREE was repeated on same allocation on some error conditions This creates a security problem described in http://www.zlib.org/advisory-2002-03-11.txt - Returned incorrect error (Z_MEM_ERROR) on some invalid data - Avoid accesses before window for invalid distances with inflate window - less than 32K. + less than 32K - force windowBits > 8 to avoid a bug in the encoder for a window size - of 256 bytes. (A complete fix will be available in 1.1.5). + of 256 bytes. (A complete fix will be available in 1.1.5) Changes in 1.1.3 (9 July 1998) - fix "an inflate input buffer bug that shows up on rare but persistent @@ -1121,7 +1184,7 @@ Changes in 1.1.1 (27 Feb 98) - remove block truncation heuristic which had very marginal effect for zlib (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the compression ratio on some files. This also allows inlining _tr_tally for - matches in deflate_slow. + matches in deflate_slow - added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) Changes in 1.1.0 (24 Feb 98) @@ -1166,7 +1229,7 @@ Changes in 1.0.8 (27 Jan 1998) - include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) - use constant arrays for the static trees in trees.c instead of computing them at run time (thanks to Ken Raeburn for this suggestion). To create - trees.h, compile with GEN_TREES_H and run "make test". + trees.h, compile with GEN_TREES_H and run "make test" - check return code of example in "make test" and display result - pass minigzip command line options to file_compress - simplifying code of inflateSync to avoid gcc 2.8 bug @@ -1205,12 +1268,12 @@ Changes in 1.0.6 (19 Jan 1998) - add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) - Fix a deflate bug occurring only with compression level 0 (thanks to - Andy Buckler for finding this one). -- In minigzip, pass transparently also the first byte for .Z files. + Andy Buckler for finding this one) +- In minigzip, pass transparently also the first byte for .Z files - return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() - check Z_FINISH in inflate (thanks to Marc Schluper) - Implement deflateCopy (thanks to Adam Costello) -- make static libraries by default in configure, add --shared option. +- make static libraries by default in configure, add --shared option - move MSDOS or Windows specific files to directory msdos - suppress the notion of partial flush to simplify the interface (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) @@ -1222,7 +1285,7 @@ Changes in 1.0.6 (19 Jan 1998) - added Makefile.nt (thanks to Stephen Williams) - added the unsupported "contrib" directory: contrib/asm386/ by Gilles Vollant - 386 asm code replacing longest_match(). + 386 asm code replacing longest_match() contrib/iostream/ by Kevin Ruland A C++ I/O streams interface to the zlib gz* functions contrib/iostream2/ by Tyge Løvset @@ -1230,7 +1293,7 @@ Changes in 1.0.6 (19 Jan 1998) contrib/untgz/ by "Pedro A. Aranda Guti\irrez" A very simple tar.gz file extractor using zlib contrib/visual-basic.txt by Carlos Rios - How to use compress(), uncompress() and the gz* functions from VB. + How to use compress(), uncompress() and the gz* functions from VB - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression level) in minigzip (thanks to Tom Lane) @@ -1239,8 +1302,8 @@ Changes in 1.0.6 (19 Jan 1998) - add undocumented function inflateSyncPoint() (hack for Paul Mackerras) - add undocumented function zError to convert error code to string (for Tim Smithers) -- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code. -- Use default memcpy for Symantec MSDOS compiler. +- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code +- Use default memcpy for Symantec MSDOS compiler - Add EXPORT keyword for check_func (needed for Windows DLL) - add current directory to LD_LIBRARY_PATH for "make test" - create also a link for libz.so.1 @@ -1253,7 +1316,7 @@ Changes in 1.0.6 (19 Jan 1998) - allow compilation with ANSI keywords only enabled for TurboC in large model - avoid "versionString"[0] (Borland bug) - add NEED_DUMMY_RETURN for Borland -- use variable z_verbose for tracing in debug mode (L. Peter Deutsch). +- use variable z_verbose for tracing in debug mode (L. Peter Deutsch) - allow compilation with CC - defined STDC for OS/2 (David Charlap) - limit external names to 8 chars for MVS (Thomas Lund) @@ -1263,7 +1326,7 @@ Changes in 1.0.6 (19 Jan 1998) - use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) - added makelcc.bat for lcc-win32 (Tom St Denis) - in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) -- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion. +- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion - check for unistd.h in configure (for off_t) - remove useless check parameter in inflate_blocks_free - avoid useless assignment of s->check to itself in inflate_blocks_new @@ -1284,7 +1347,7 @@ Changes in 1.0.5 (3 Jan 98) Changes in 1.0.4 (24 Jul 96) - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF bit, so the decompressor could decompress all the correct data but went - on to attempt decompressing extra garbage data. This affected minigzip too. + on to attempt decompressing extra garbage data. This affected minigzip too - zlibVersion and gzerror return const char* (needed for DLL) - port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) - use z_error only for DEBUG (avoid problem with DLLs) @@ -1314,7 +1377,7 @@ Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] - fix array overlay in deflate.c which sometimes caused bad compressed data - fix inflate bug with empty stored block - fix MSDOS medium model which was broken in 0.99 -- fix deflateParams() which could generate bad compressed data. +- fix deflateParams() which could generate bad compressed data - Bytef is define'd instead of typedef'ed (work around Borland bug) - added an INDEX file - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), @@ -1335,7 +1398,7 @@ Changes in 0.99 (27 Jan 96) - allow preset dictionary shared between compressor and decompressor - allow compression level 0 (no compression) - add deflateParams in zlib.h: allow dynamic change of compression level - and compression strategy. + and compression strategy - test large buffers and deflateParams in example.c - add optional "configure" to build zlib as a shared library - suppress Makefile.qnx, use configure instead @@ -1377,30 +1440,30 @@ Changes in 0.99 (27 Jan 96) - use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... - use Z_BINARY instead of BINARY - document that gzclose after gzdopen will close the file -- allow "a" as mode in gzopen. +- allow "a" as mode in gzopen - fix error checking in gzread - allow skipping .gz extra-field on pipes - added reference to Perl interface in README - put the crc table in FAR data (I dislike more and more the medium model :) - added get_crc_table -- added a dimension to all arrays (Borland C can't count). +- added a dimension to all arrays (Borland C can't count) - workaround Borland C bug in declaration of inflate_codes_new & inflate_fast - guard against multiple inclusion of *.h (for precompiled header on Mac) -- Watcom C pretends to be Microsoft C small model even in 32 bit mode. +- Watcom C pretends to be Microsoft C small model even in 32 bit mode - don't use unsized arrays to avoid silly warnings by Visual C++: warning C4746: 'inflate_mask' : unsized array treated as '__far' - (what's wrong with far data in far model?). + (what's wrong with far data in far model?) - define enum out of inflate_blocks_state to allow compilation with C++ Changes in 0.95 (16 Aug 95) - fix MSDOS small and medium model (now easier to adapt to any compiler) - inlined send_bits - fix the final (:-) bug for deflate with flush (output was correct but - not completely flushed in rare occasions). + not completely flushed in rare occasions) - default window size is same for compression and decompression - (it's now sufficient to set MAX_WBITS in zconf.h). + (it's now sufficient to set MAX_WBITS in zconf.h) - voidp -> voidpf and voidnp -> voidp (for consistency with other - typedefs and because voidnp was not near in large model). + typedefs and because voidnp was not near in large model) Changes in 0.94 (13 Aug 95) - support MSDOS medium model @@ -1409,12 +1472,12 @@ Changes in 0.94 (13 Aug 95) - added support for VMS - allow a compression level in gzopen() - gzflush now calls fflush -- For deflate with flush, flush even if no more input is provided. +- For deflate with flush, flush even if no more input is provided - rename libgz.a as libz.a - avoid complex expression in infcodes.c triggering Turbo C bug - work around a problem with gcc on Alpha (in INSERT_STRING) - don't use inline functions (problem with some gcc versions) -- allow renaming of Byte, uInt, etc... with #define. +- allow renaming of Byte, uInt, etc... with #define - avoid warning about (unused) pointer before start of array in deflate.c - avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c - avoid reserved word 'new' in trees.c @@ -1433,7 +1496,7 @@ Changes in 0.92 (3 May 95) - no memcpy on Pyramid - suppressed inftest.c - optimized fill_window, put longest_match inline for gcc -- optimized inflate on stored blocks. +- optimized inflate on stored blocks - untabify all sources to simplify patches Changes in 0.91 (2 May 95) @@ -1451,7 +1514,7 @@ Changes in 0.9 (1 May 95) - let again gzread copy uncompressed data unchanged (was working in 0.71) - deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented - added a test of inflateSync in example.c -- moved MAX_WBITS to zconf.h because users might want to change that. +- moved MAX_WBITS to zconf.h because users might want to change that - document explicitly that zalloc(64K) on MSDOS must return a normalized pointer (zero offset) - added Makefiles for Microsoft C, Turbo C, Borland C++ @@ -1460,7 +1523,7 @@ Changes in 0.9 (1 May 95) Changes in 0.8 (29 April 95) - added fast inflate (inffast.c) - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this - is incompatible with previous versions of zlib which returned Z_OK. + is incompatible with previous versions of zlib which returned Z_OK - work around a TurboC compiler bug (bad code for b << 0, see infutil.h) (actually that was not a compiler bug, see 0.81 above) - gzread no longer reads one extra byte in certain cases @@ -1470,50 +1533,50 @@ Changes in 0.8 (29 April 95) Changes in 0.71 (14 April 95) - Fixed more MSDOS compilation problems :( There is still a bug with - TurboC large model. + TurboC large model Changes in 0.7 (14 April 95) -- Added full inflate support. +- Added full inflate support - Simplified the crc32() interface. The pre- and post-conditioning (one's complement) is now done inside crc32(). WARNING: this is - incompatible with previous versions; see zlib.h for the new usage. + incompatible with previous versions; see zlib.h for the new usage Changes in 0.61 (12 April 95) -- workaround for a bug in TurboC. example and minigzip now work on MSDOS. +- workaround for a bug in TurboC. example and minigzip now work on MSDOS Changes in 0.6 (11 April 95) - added minigzip.c - added gzdopen to reopen a file descriptor as gzFile -- added transparent reading of non-gziped files in gzread. +- added transparent reading of non-gziped files in gzread - fixed bug in gzread (don't read crc as data) -- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose). +- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose) - don't allocate big arrays in the stack (for MSDOS) - fix some MSDOS compilation problems Changes in 0.5: - do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but - not yet Z_FULL_FLUSH. + not yet Z_FULL_FLUSH - support decompression but only in a single step (forced Z_FINISH) -- added opaque object for zalloc and zfree. +- added opaque object for zalloc and zfree - added deflateReset and inflateReset -- added a variable zlib_version for consistency checking. -- renamed the 'filter' parameter of deflateInit2 as 'strategy'. - Added Z_FILTERED and Z_HUFFMAN_ONLY constants. +- added a variable zlib_version for consistency checking +- renamed the 'filter' parameter of deflateInit2 as 'strategy' + Added Z_FILTERED and Z_HUFFMAN_ONLY constants Changes in 0.4: -- avoid "zip" everywhere, use zlib instead of ziplib. +- avoid "zip" everywhere, use zlib instead of ziplib - suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush - if compression method == 8. + if compression method == 8 - added adler32 and crc32 - renamed deflateOptions as deflateInit2, call one or the other but not both -- added the method parameter for deflateInit2. +- added the method parameter for deflateInit2 - added inflateInit2 - simplied considerably deflateInit and inflateInit by not supporting user-provided history buffer. This is supported only in deflateInit2 - and inflateInit2. + and inflateInit2 Changes in 0.3: - prefix all macro names with Z_ -- use Z_FINISH instead of deflateEnd to finish compression. +- use Z_FINISH instead of deflateEnd to finish compression - added Z_HUFFMAN_ONLY - added gzerror() diff --git a/src/3rdparty/zlib/src/README b/src/3rdparty/zlib/src/README index 4dc7436a..1e4f3918 100644 --- a/src/3rdparty/zlib/src/README +++ b/src/3rdparty/zlib/src/README @@ -1,6 +1,6 @@ ZLIB DATA COMPRESSION LIBRARY -zlib 1.2.11 is a general purpose data compression library. All the code is +zlib 1.2.12 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and @@ -34,7 +34,7 @@ Mark Nelson wrote an article about zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available at http://marknelson.us/1997/01/01/zlib-engine/ . -The changes made in version 1.2.11 are documented in the file ChangeLog. +The changes made in version 1.2.12 are documented in the file ChangeLog. Unsupported third party contributions are provided in directory contrib/ . @@ -87,7 +87,7 @@ Acknowledgments: Copyright notice: - (C) 1995-2017 Jean-loup Gailly and Mark Adler + (C) 1995-2022 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -111,7 +111,10 @@ Copyright notice: If you use the zlib library in a product, we would appreciate *not* receiving lengthy legal documents to sign. The sources are provided for free but without warranty of any kind. The library has been entirely written by Jean-loup -Gailly and Mark Adler; it does not include third-party code. +Gailly and Mark Adler; it does not include third-party code. We make all +contributions to and distributions of this project solely in our personal +capacity, and are not conveying any rights to any intellectual property of +any third parties. If you redistribute modified sources, we would appreciate that you include in the file ChangeLog history information documenting your changes. Please read diff --git a/src/3rdparty/zlib/src/crc32.c b/src/3rdparty/zlib/src/crc32.c index 9580440c..a1bdce5c 100644 --- a/src/3rdparty/zlib/src/crc32.c +++ b/src/3rdparty/zlib/src/crc32.c @@ -1,12 +1,10 @@ /* crc32.c -- compute the CRC-32 of a data stream - * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler + * Copyright (C) 1995-2022 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * - * Thanks to Rodney Brown for his contribution of faster - * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing - * tables for updating the shift register in one step with three exclusive-ors - * instead of four steps with four exclusive-ors. This results in about a - * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. + * This interleaved implementation of a CRC makes use of pipelined multiple + * arithmetic-logic units, commonly found in modern CPU cores. It is due to + * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution. */ /* @(#) $Id$ */ @@ -14,11 +12,12 @@ /* Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore protection on the static variables used to control the first-use generation - of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should + of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should first call get_crc_table() to initialize the tables before allowing more than one thread to use crc32(). - DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h. + MAKECRCH can be #defined to write out crc32.h. A main() routine is also + produced, so that this one source file can be compiled to an executable. */ #ifdef MAKECRCH @@ -28,175 +27,713 @@ # endif /* !DYNAMIC_CRC_TABLE */ #endif /* MAKECRCH */ -#include "zutil.h" /* for STDC and FAR definitions */ +#include "zutil.h" /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */ -/* Definitions for doing the crc four data bytes at a time. */ -#if !defined(NOBYFOUR) && defined(Z_U4) -# define BYFOUR -#endif -#ifdef BYFOUR - local unsigned long crc32_little OF((unsigned long, - const unsigned char FAR *, z_size_t)); - local unsigned long crc32_big OF((unsigned long, - const unsigned char FAR *, z_size_t)); -# define TBLS 8 + /* + A CRC of a message is computed on N braids of words in the message, where + each word consists of W bytes (4 or 8). If N is 3, for example, then three + running sparse CRCs are calculated respectively on each braid, at these + indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ... + This is done starting at a word boundary, and continues until as many blocks + of N * W bytes as are available have been processed. The results are combined + into a single CRC at the end. For this code, N must be in the range 1..6 and + W must be 4 or 8. The upper limit on N can be increased if desired by adding + more #if blocks, extending the patterns apparent in the code. In addition, + crc32.h would need to be regenerated, if the maximum N value is increased. + + N and W are chosen empirically by benchmarking the execution time on a given + processor. The choices for N and W below were based on testing on Intel Kaby + Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64 + Octeon II processors. The Intel, AMD, and ARM processors were all fastest + with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4. + They were all tested with either gcc or clang, all using the -O3 optimization + level. Your mileage may vary. + */ + +/* Define N */ +#ifdef Z_TESTN +# define N Z_TESTN #else -# define TBLS 1 -#endif /* BYFOUR */ +# define N 5 +#endif +#if N < 1 || N > 6 +# error N must be in 1..6 +#endif -/* Local functions for crc concatenation */ -local unsigned long gf2_matrix_times OF((unsigned long *mat, - unsigned long vec)); -local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); -local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2)); +/* + z_crc_t must be at least 32 bits. z_word_t must be at least as long as + z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and + that bytes are eight bits. + */ +/* + Define W and the associated z_word_t type. If W is not defined, then a + braided calculation is not used, and the associated tables and code are not + compiled. + */ +#ifdef Z_TESTW +# if Z_TESTW-1 != -1 +# define W Z_TESTW +# endif +#else +# ifdef MAKECRCH +# define W 8 /* required for MAKECRCH */ +# else +# if defined(__x86_64__) || defined(__aarch64__) +# define W 8 +# else +# define W 4 +# endif +# endif +#endif +#ifdef W +# if W == 8 && defined(Z_U8) + typedef Z_U8 z_word_t; +# elif defined(Z_U4) +# undef W +# define W 4 + typedef Z_U4 z_word_t; +# else +# undef W +# endif +#endif + +/* Local functions. */ +local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); +local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); + +/* If available, use the ARM processor CRC32 instruction. */ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 +# define ARMCRC32 +#endif + +#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) +/* + Swap the bytes in a z_word_t to convert between little and big endian. Any + self-respecting compiler will optimize this to a single machine byte-swap + instruction, if one is available. This assumes that word_t is either 32 bits + or 64 bits. + */ +local z_word_t byte_swap(word) + z_word_t word; +{ +# if W == 8 + return + (word & 0xff00000000000000) >> 56 | + (word & 0xff000000000000) >> 40 | + (word & 0xff0000000000) >> 24 | + (word & 0xff00000000) >> 8 | + (word & 0xff000000) << 8 | + (word & 0xff0000) << 24 | + (word & 0xff00) << 40 | + (word & 0xff) << 56; +# else /* W == 4 */ + return + (word & 0xff000000) >> 24 | + (word & 0xff0000) >> 8 | + (word & 0xff00) << 8 | + (word & 0xff) << 24; +# endif +} +#endif + +/* CRC polynomial. */ +#define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */ #ifdef DYNAMIC_CRC_TABLE -local volatile int crc_table_empty = 1; -local z_crc_t FAR crc_table[TBLS][256]; +local z_crc_t FAR crc_table[256]; +local z_crc_t FAR x2n_table[32]; local void make_crc_table OF((void)); +#ifdef W + local z_word_t FAR crc_big_table[256]; + local z_crc_t FAR crc_braid_table[W][256]; + local z_word_t FAR crc_braid_big_table[W][256]; + local void braid OF((z_crc_t [][256], z_word_t [][256], int, int)); +#endif #ifdef MAKECRCH - local void write_table OF((FILE *, const z_crc_t FAR *)); + local void write_table OF((FILE *, const z_crc_t FAR *, int)); + local void write_table32hi OF((FILE *, const z_word_t FAR *, int)); + local void write_table64 OF((FILE *, const z_word_t FAR *, int)); #endif /* MAKECRCH */ + +/* + Define a once() function depending on the availability of atomics. If this is + compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in + multiple threads, and if atomics are not available, then get_crc_table() must + be called to initialize the tables and must return before any threads are + allowed to compute or combine CRCs. + */ + +/* Definition of once functionality. */ +typedef struct once_s once_t; +local void once OF((once_t *, void (*)(void))); + +/* Check for the availability of atomics. */ +#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ + !defined(__STDC_NO_ATOMICS__) + +#include + +/* Structure for once(), which must be initialized with ONCE_INIT. */ +struct once_s { + atomic_flag begun; + atomic_int done; +}; +#define ONCE_INIT {ATOMIC_FLAG_INIT, 0} + +/* + Run the provided init() function exactly once, even if multiple threads + invoke once() at the same time. The state must be a once_t initialized with + ONCE_INIT. + */ +local void once(state, init) + once_t *state; + void (*init)(void); +{ + if (!atomic_load(&state->done)) { + if (atomic_flag_test_and_set(&state->begun)) + while (!atomic_load(&state->done)) + ; + else { + init(); + atomic_store(&state->done, 1); + } + } +} + +#else /* no atomics */ + +/* Structure for once(), which must be initialized with ONCE_INIT. */ +struct once_s { + volatile int begun; + volatile int done; +}; +#define ONCE_INIT {0, 0} + +/* Test and set. Alas, not atomic, but tries to minimize the period of + vulnerability. */ +local int test_and_set OF((int volatile *)); +local int test_and_set(flag) + int volatile *flag; +{ + int was; + + was = *flag; + *flag = 1; + return was; +} + +/* Run the provided init() function once. This is not thread-safe. */ +local void once(state, init) + once_t *state; + void (*init)(void); +{ + if (!state->done) { + if (test_and_set(&state->begun)) + while (!state->done) + ; + else { + init(); + state->done = 1; + } + } +} + +#endif + +/* State for once(). */ +local once_t made = ONCE_INIT; + /* Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. Polynomials over GF(2) are represented in binary, one bit per coefficient, - with the lowest powers in the most significant bit. Then adding polynomials + with the lowest powers in the most significant bit. Then adding polynomials is just exclusive-or, and multiplying a polynomial by x is a right shift by - one. If we call the above polynomial p, and represent a byte as the + one. If we call the above polynomial p, and represent a byte as the polynomial q, also with the lowest power in the most significant bit (so the - byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p, where a mod b means the remainder after dividing a by b. This calculation is done using the shift-register method of multiplying and - taking the remainder. The register is initialized to zero, and for each + taking the remainder. The register is initialized to zero, and for each incoming bit, x^32 is added mod p to the register if the bit is a one (where - x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by - x (which is shifting right by one and adding x^32 mod p if the bit shifted - out is a one). We start with the highest power (least significant bit) of - q and repeat for all eight bits of q. + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x + (which is shifting right by one and adding x^32 mod p if the bit shifted out + is a one). We start with the highest power (least significant bit) of q and + repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all the + information needed to generate CRCs on data a byte at a time for all + combinations of CRC register values and incoming bytes. + */ - The first table is simply the CRC of all possible eight bit values. This is - all the information needed to generate CRCs on data a byte at a time for all - combinations of CRC register values and incoming bytes. The remaining tables - allow for word-at-a-time CRC calculation for both big-endian and little- - endian machines, where a word is four bytes. -*/ local void make_crc_table() { - z_crc_t c; - int n, k; - z_crc_t poly; /* polynomial exclusive-or pattern */ - /* terms of polynomial defining this crc (except x^32): */ - static volatile int first = 1; /* flag to limit concurrent making */ - static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + unsigned i, j, n; + z_crc_t p; - /* See if another task is already doing this (not thread-safe, but better - than nothing -- significantly reduces duration of vulnerability in - case the advice about DYNAMIC_CRC_TABLE is ignored) */ - if (first) { - first = 0; - - /* make exclusive-or pattern from polynomial (0xedb88320UL) */ - poly = 0; - for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++) - poly |= (z_crc_t)1 << (31 - p[n]); - - /* generate a crc for every 8-bit value */ - for (n = 0; n < 256; n++) { - c = (z_crc_t)n; - for (k = 0; k < 8; k++) - c = c & 1 ? poly ^ (c >> 1) : c >> 1; - crc_table[0][n] = c; - } - -#ifdef BYFOUR - /* generate crc for each value followed by one, two, and three zeros, - and then the byte reversal of those as well as the first table */ - for (n = 0; n < 256; n++) { - c = crc_table[0][n]; - crc_table[4][n] = ZSWAP32(c); - for (k = 1; k < 4; k++) { - c = crc_table[0][c & 0xff] ^ (c >> 8); - crc_table[k][n] = c; - crc_table[k + 4][n] = ZSWAP32(c); - } - } -#endif /* BYFOUR */ - - crc_table_empty = 0; - } - else { /* not first */ - /* wait for the other guy to finish (not efficient, but rare) */ - while (crc_table_empty) - ; + /* initialize the CRC of bytes tables */ + for (i = 0; i < 256; i++) { + p = i; + for (j = 0; j < 8; j++) + p = p & 1 ? (p >> 1) ^ POLY : p >> 1; + crc_table[i] = p; +#ifdef W + crc_big_table[i] = byte_swap(p); +#endif } + /* initialize the x^2^n mod p(x) table */ + p = (z_crc_t)1 << 30; /* x^1 */ + x2n_table[0] = p; + for (n = 1; n < 32; n++) + x2n_table[n] = p = multmodp(p, p); + +#ifdef W + /* initialize the braiding tables -- needs x2n_table[] */ + braid(crc_braid_table, crc_braid_big_table, N, W); +#endif + #ifdef MAKECRCH - /* write out CRC tables to crc32.h */ { + /* + The crc32.h header file contains tables for both 32-bit and 64-bit + z_word_t's, and so requires a 64-bit type be available. In that case, + z_word_t must be defined to be 64-bits. This code then also generates + and writes out the tables for the case that z_word_t is 32 bits. + */ +#if !defined(W) || W != 8 +# error Need a 64-bit integer type in order to generate crc32.h. +#endif FILE *out; + int k, n; + z_crc_t ltl[8][256]; + z_word_t big[8][256]; out = fopen("crc32.h", "w"); if (out == NULL) return; - fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); - fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); - fprintf(out, "local const z_crc_t FAR "); - fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); - write_table(out, crc_table[0]); -# ifdef BYFOUR - fprintf(out, "#ifdef BYFOUR\n"); - for (k = 1; k < 8; k++) { - fprintf(out, " },\n {\n"); - write_table(out, crc_table[k]); + + /* write out little-endian CRC table to crc32.h */ + fprintf(out, + "/* crc32.h -- tables for rapid CRC calculation\n" + " * Generated automatically by crc32.c\n */\n" + "\n" + "local const z_crc_t FAR crc_table[] = {\n" + " "); + write_table(out, crc_table, 256); + fprintf(out, + "};\n"); + + /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#ifdef W\n" + "\n" + "#if W == 8\n" + "\n" + "local const z_word_t FAR crc_big_table[] = {\n" + " "); + write_table64(out, crc_big_table, 256); + fprintf(out, + "};\n"); + + /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#else /* W == 4 */\n" + "\n" + "local const z_word_t FAR crc_big_table[] = {\n" + " "); + write_table32hi(out, crc_big_table, 256); + fprintf(out, + "};\n" + "\n" + "#endif\n"); + + /* write out braid tables for each value of N */ + for (n = 1; n <= 6; n++) { + fprintf(out, + "\n" + "#if N == %d\n", n); + + /* compute braid tables for this N and 64-bit word_t */ + braid(ltl, big, n, 8); + + /* write out braid tables for 64-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#if W == 8\n" + "\n" + "local const z_crc_t FAR crc_braid_table[][256] = {\n"); + for (k = 0; k < 8; k++) { + fprintf(out, " {"); + write_table(out, ltl[k], 256); + fprintf(out, "}%s", k < 7 ? ",\n" : ""); + } + fprintf(out, + "};\n" + "\n" + "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); + for (k = 0; k < 8; k++) { + fprintf(out, " {"); + write_table64(out, big[k], 256); + fprintf(out, "}%s", k < 7 ? ",\n" : ""); + } + fprintf(out, + "};\n"); + + /* compute braid tables for this N and 32-bit word_t */ + braid(ltl, big, n, 4); + + /* write out braid tables for 32-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#else /* W == 4 */\n" + "\n" + "local const z_crc_t FAR crc_braid_table[][256] = {\n"); + for (k = 0; k < 4; k++) { + fprintf(out, " {"); + write_table(out, ltl[k], 256); + fprintf(out, "}%s", k < 3 ? ",\n" : ""); + } + fprintf(out, + "};\n" + "\n" + "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); + for (k = 0; k < 4; k++) { + fprintf(out, " {"); + write_table32hi(out, big[k], 256); + fprintf(out, "}%s", k < 3 ? ",\n" : ""); + } + fprintf(out, + "};\n" + "\n" + "#endif\n" + "\n" + "#endif\n"); } - fprintf(out, "#endif\n"); -# endif /* BYFOUR */ - fprintf(out, " }\n};\n"); + fprintf(out, + "\n" + "#endif\n"); + + /* write out zeros operator table to crc32.h */ + fprintf(out, + "\n" + "local const z_crc_t FAR x2n_table[] = {\n" + " "); + write_table(out, x2n_table, 32); + fprintf(out, + "};\n"); fclose(out); } #endif /* MAKECRCH */ } #ifdef MAKECRCH -local void write_table(out, table) + +/* + Write the 32-bit values in table[0..k-1] to out, five per line in + hexadecimal separated by commas. + */ +local void write_table(out, table, k) FILE *out; const z_crc_t FAR *table; + int k; { int n; - for (n = 0; n < 256; n++) - fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", + for (n = 0; n < k; n++) + fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", (unsigned long)(table[n]), - n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); + n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); } + +/* + Write the high 32-bits of each value in table[0..k-1] to out, five per line + in hexadecimal separated by commas. + */ +local void write_table32hi(out, table, k) +FILE *out; +const z_word_t FAR *table; +int k; +{ + int n; + + for (n = 0; n < k; n++) + fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", + (unsigned long)(table[n] >> 32), + n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); +} + +/* + Write the 64-bit values in table[0..k-1] to out, three per line in + hexadecimal separated by commas. This assumes that if there is a 64-bit + type, then there is also a long long integer type, and it is at least 64 + bits. If not, then the type cast and format string can be adjusted + accordingly. + */ +local void write_table64(out, table, k) + FILE *out; + const z_word_t FAR *table; + int k; +{ + int n; + + for (n = 0; n < k; n++) + fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : " ", + (unsigned long long)(table[n]), + n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", ")); +} + +/* Actually do the deed. */ +int main() +{ + make_crc_table(); + return 0; +} + #endif /* MAKECRCH */ +#ifdef W +/* + Generate the little and big-endian braid tables for the given n and z_word_t + size w. Each array must have room for w blocks of 256 elements. + */ +local void braid(ltl, big, n, w) + z_crc_t ltl[][256]; + z_word_t big[][256]; + int n; + int w; +{ + int k; + z_crc_t i, p, q; + for (k = 0; k < w; k++) { + p = x2nmodp((n * w + 3 - k) << 3, 0); + ltl[k][0] = 0; + big[w - 1 - k][0] = 0; + for (i = 1; i < 256; i++) { + ltl[k][i] = q = multmodp(i << 24, p); + big[w - 1 - k][i] = byte_swap(q); + } + } +} +#endif + #else /* !DYNAMIC_CRC_TABLE */ /* ======================================================================== - * Tables of CRC-32s of all single-byte values, made by make_crc_table(). + * Tables for byte-wise and braided CRC-32 calculations, and a table of powers + * of x for combining CRC-32s, all made by make_crc_table(). */ #include "crc32.h" #endif /* DYNAMIC_CRC_TABLE */ +/* ======================================================================== + * Routines used for CRC calculation. Some are also required for the table + * generation above. + */ + +/* + Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, + reflected. For speed, this requires that a not be zero. + */ +local z_crc_t multmodp(a, b) + z_crc_t a; + z_crc_t b; +{ + z_crc_t m, p; + + m = (z_crc_t)1 << 31; + p = 0; + for (;;) { + if (a & m) { + p ^= b; + if ((a & (m - 1)) == 0) + break; + } + m >>= 1; + b = b & 1 ? (b >> 1) ^ POLY : b >> 1; + } + return p; +} + +/* + Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been + initialized. + */ +local z_crc_t x2nmodp(n, k) + z_off64_t n; + unsigned k; +{ + z_crc_t p; + + p = (z_crc_t)1 << 31; /* x^0 == 1 */ + while (n) { + if (n & 1) + p = multmodp(x2n_table[k & 31], p); + n >>= 1; + k++; + } + return p; +} + /* ========================================================================= - * This function can be used by asm versions of crc32() + * This function can be used by asm versions of crc32(), and to force the + * generation of the CRC tables in a threaded application. */ const z_crc_t FAR * ZEXPORT get_crc_table() { #ifdef DYNAMIC_CRC_TABLE - if (crc_table_empty) - make_crc_table(); + once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ return (const z_crc_t FAR *)crc_table; } -/* ========================================================================= */ -#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) -#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 +/* ========================================================================= + * Use ARM machine instructions if available. This will compute the CRC about + * ten times faster than the braided calculation. This code does not check for + * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will + * only be defined if the compilation specifies an ARM processor architecture + * that has the instructions. For example, compiling with -march=armv8.1-a or + * -march=armv8-a+crc, or -march=native if the compile machine has the crc32 + * instructions. + */ +#ifdef ARMCRC32 + +/* + Constants empirically determined to maximize speed. These values are from + measurements on a Cortex-A57. Your mileage may vary. + */ +#define Z_BATCH 3990 /* number of words in a batch */ +#define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ +#define Z_BATCH_MIN 800 /* fewest words in a final batch */ + +unsigned long ZEXPORT crc32_z(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + z_size_t len; +{ + z_crc_t val; + z_word_t crc1, crc2; + const z_word_t *word; + z_word_t val0, val1, val2; + z_size_t last, last2, i; + z_size_t num; + + /* Return initial CRC, if requested. */ + if (buf == Z_NULL) return 0; + +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + + /* Pre-condition the CRC */ + crc ^= 0xffffffff; + + /* Compute the CRC up to a word boundary. */ + while (len && ((z_size_t)buf & 7) != 0) { + len--; + val = *buf++; + __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); + } + + /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */ + word = (z_word_t const *)buf; + num = len >> 3; + len &= 7; + + /* Do three interleaved CRCs to realize the throughput of one crc32x + instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three + CRCs are combined into a single CRC after each set of batches. */ + while (num >= 3 * Z_BATCH) { + crc1 = 0; + crc2 = 0; + for (i = 0; i < Z_BATCH; i++) { + val0 = word[i]; + val1 = word[i + Z_BATCH]; + val2 = word[i + 2 * Z_BATCH]; + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); + } + word += 3 * Z_BATCH; + num -= 3 * Z_BATCH; + crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1; + crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2; + } + + /* Do one last smaller batch with the remaining words, if there are enough + to pay for the combination of CRCs. */ + last = num / 3; + if (last >= Z_BATCH_MIN) { + last2 = last << 1; + crc1 = 0; + crc2 = 0; + for (i = 0; i < last; i++) { + val0 = word[i]; + val1 = word[i + last]; + val2 = word[i + last2]; + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); + } + word += 3 * last; + num -= 3 * last; + val = x2nmodp(last, 6); + crc = multmodp(val, crc) ^ crc1; + crc = multmodp(val, crc) ^ crc2; + } + + /* Compute the CRC on any remaining words. */ + for (i = 0; i < num; i++) { + val0 = word[i]; + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); + } + word += num; + + /* Complete the CRC on any remaining bytes. */ + buf = (const unsigned char FAR *)word; + while (len) { + len--; + val = *buf++; + __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); + } + + /* Return the CRC, post-conditioned. */ + return crc ^ 0xffffffff; +} + +#else + +#ifdef W + +/* + Return the CRC of the W bytes in the word_t data, taking the + least-significant byte of the word as the first byte of data, without any pre + or post conditioning. This is used to combine the CRCs of each braid. + */ +local z_crc_t crc_word(data) + z_word_t data; +{ + int k; + for (k = 0; k < W; k++) + data = (data >> 8) ^ crc_table[data & 0xff]; + return (z_crc_t)data; +} + +local z_word_t crc_word_big(data) + z_word_t data; +{ + int k; + for (k = 0; k < W; k++) + data = (data << 8) ^ + crc_big_table[(data >> ((W - 1) << 3)) & 0xff]; + return data; +} + +#endif /* ========================================================================= */ unsigned long ZEXPORT crc32_z(crc, buf, len) @@ -204,35 +741,324 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) const unsigned char FAR *buf; z_size_t len; { - if (buf == Z_NULL) return 0UL; + /* Return initial CRC, if requested. */ + if (buf == Z_NULL) return 0; #ifdef DYNAMIC_CRC_TABLE - if (crc_table_empty) - make_crc_table(); + once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ -#ifdef BYFOUR - if (sizeof(void *) == sizeof(ptrdiff_t)) { - z_crc_t endian; + /* Pre-condition the CRC */ + crc ^= 0xffffffff; +#ifdef W + + /* If provided enough bytes, do a braided CRC calculation. */ + if (len >= N * W + W - 1) { + z_size_t blks; + z_word_t const *words; + unsigned endian; + int k; + + /* Compute the CRC up to a z_word_t boundary. */ + while (len && ((z_size_t)buf & (W - 1)) != 0) { + len--; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + } + + /* Compute the CRC on as many N z_word_t blocks as are available. */ + blks = len / (N * W); + len -= blks * N * W; + words = (z_word_t const *)buf; + + /* Do endian check at execution time instead of compile time, since ARM + processors can change the endianess at execution time. If the + compiler knows what the endianess will be, it can optimize out the + check and the unused branch. */ endian = 1; - if (*((unsigned char *)(&endian))) - return crc32_little(crc, buf, len); - else - return crc32_big(crc, buf, len); + if (*(unsigned char *)&endian) { + /* Little endian. */ + + z_crc_t crc0; + z_word_t word0; +#if N > 1 + z_crc_t crc1; + z_word_t word1; +#if N > 2 + z_crc_t crc2; + z_word_t word2; +#if N > 3 + z_crc_t crc3; + z_word_t word3; +#if N > 4 + z_crc_t crc4; + z_word_t word4; +#if N > 5 + z_crc_t crc5; + z_word_t word5; +#endif +#endif +#endif +#endif +#endif + + /* Initialize the CRC for each braid. */ + crc0 = crc; +#if N > 1 + crc1 = 0; +#if N > 2 + crc2 = 0; +#if N > 3 + crc3 = 0; +#if N > 4 + crc4 = 0; +#if N > 5 + crc5 = 0; +#endif +#endif +#endif +#endif +#endif + + /* + Process the first blks-1 blocks, computing the CRCs on each braid + independently. + */ + while (--blks) { + /* Load the word for each braid into registers. */ + word0 = crc0 ^ words[0]; +#if N > 1 + word1 = crc1 ^ words[1]; +#if N > 2 + word2 = crc2 ^ words[2]; +#if N > 3 + word3 = crc3 ^ words[3]; +#if N > 4 + word4 = crc4 ^ words[4]; +#if N > 5 + word5 = crc5 ^ words[5]; +#endif +#endif +#endif +#endif +#endif + words += N; + + /* Compute and update the CRC for each word. The loop should + get unrolled. */ + crc0 = crc_braid_table[0][word0 & 0xff]; +#if N > 1 + crc1 = crc_braid_table[0][word1 & 0xff]; +#if N > 2 + crc2 = crc_braid_table[0][word2 & 0xff]; +#if N > 3 + crc3 = crc_braid_table[0][word3 & 0xff]; +#if N > 4 + crc4 = crc_braid_table[0][word4 & 0xff]; +#if N > 5 + crc5 = crc_braid_table[0][word5 & 0xff]; +#endif +#endif +#endif +#endif +#endif + for (k = 1; k < W; k++) { + crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff]; +#if N > 1 + crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff]; +#if N > 2 + crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff]; +#if N > 3 + crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff]; +#if N > 4 + crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff]; +#if N > 5 + crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff]; +#endif +#endif +#endif +#endif +#endif + } + } + + /* + Process the last block, combining the CRCs of the N braids at the + same time. + */ + crc = crc_word(crc0 ^ words[0]); +#if N > 1 + crc = crc_word(crc1 ^ words[1] ^ crc); +#if N > 2 + crc = crc_word(crc2 ^ words[2] ^ crc); +#if N > 3 + crc = crc_word(crc3 ^ words[3] ^ crc); +#if N > 4 + crc = crc_word(crc4 ^ words[4] ^ crc); +#if N > 5 + crc = crc_word(crc5 ^ words[5] ^ crc); +#endif +#endif +#endif +#endif +#endif + words += N; + } + else { + /* Big endian. */ + + z_word_t crc0, word0, comb; +#if N > 1 + z_word_t crc1, word1; +#if N > 2 + z_word_t crc2, word2; +#if N > 3 + z_word_t crc3, word3; +#if N > 4 + z_word_t crc4, word4; +#if N > 5 + z_word_t crc5, word5; +#endif +#endif +#endif +#endif +#endif + + /* Initialize the CRC for each braid. */ + crc0 = byte_swap(crc); +#if N > 1 + crc1 = 0; +#if N > 2 + crc2 = 0; +#if N > 3 + crc3 = 0; +#if N > 4 + crc4 = 0; +#if N > 5 + crc5 = 0; +#endif +#endif +#endif +#endif +#endif + + /* + Process the first blks-1 blocks, computing the CRCs on each braid + independently. + */ + while (--blks) { + /* Load the word for each braid into registers. */ + word0 = crc0 ^ words[0]; +#if N > 1 + word1 = crc1 ^ words[1]; +#if N > 2 + word2 = crc2 ^ words[2]; +#if N > 3 + word3 = crc3 ^ words[3]; +#if N > 4 + word4 = crc4 ^ words[4]; +#if N > 5 + word5 = crc5 ^ words[5]; +#endif +#endif +#endif +#endif +#endif + words += N; + + /* Compute and update the CRC for each word. The loop should + get unrolled. */ + crc0 = crc_braid_big_table[0][word0 & 0xff]; +#if N > 1 + crc1 = crc_braid_big_table[0][word1 & 0xff]; +#if N > 2 + crc2 = crc_braid_big_table[0][word2 & 0xff]; +#if N > 3 + crc3 = crc_braid_big_table[0][word3 & 0xff]; +#if N > 4 + crc4 = crc_braid_big_table[0][word4 & 0xff]; +#if N > 5 + crc5 = crc_braid_big_table[0][word5 & 0xff]; +#endif +#endif +#endif +#endif +#endif + for (k = 1; k < W; k++) { + crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff]; +#if N > 1 + crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff]; +#if N > 2 + crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff]; +#if N > 3 + crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff]; +#if N > 4 + crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff]; +#if N > 5 + crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff]; +#endif +#endif +#endif +#endif +#endif + } + } + + /* + Process the last block, combining the CRCs of the N braids at the + same time. + */ + comb = crc_word_big(crc0 ^ words[0]); +#if N > 1 + comb = crc_word_big(crc1 ^ words[1] ^ comb); +#if N > 2 + comb = crc_word_big(crc2 ^ words[2] ^ comb); +#if N > 3 + comb = crc_word_big(crc3 ^ words[3] ^ comb); +#if N > 4 + comb = crc_word_big(crc4 ^ words[4] ^ comb); +#if N > 5 + comb = crc_word_big(crc5 ^ words[5] ^ comb); +#endif +#endif +#endif +#endif +#endif + words += N; + crc = byte_swap(comb); + } + + /* + Update the pointer to the remaining bytes to process. + */ + buf = (unsigned char const *)words; } -#endif /* BYFOUR */ - crc = crc ^ 0xffffffffUL; + +#endif /* W */ + + /* Complete the computation of the CRC on any remaining bytes. */ while (len >= 8) { - DO8; len -= 8; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; } - if (len) do { - DO1; - } while (--len); - return crc ^ 0xffffffffUL; + while (len) { + len--; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + } + + /* Return the CRC, post-conditioned. */ + return crc ^ 0xffffffff; } +#endif + /* ========================================================================= */ unsigned long ZEXPORT crc32(crc, buf, len) unsigned long crc; @@ -242,186 +1068,16 @@ unsigned long ZEXPORT crc32(crc, buf, len) return crc32_z(crc, buf, len); } -#ifdef BYFOUR - -/* - This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit - integer pointer type. This violates the strict aliasing rule, where a - compiler can assume, for optimization purposes, that two pointers to - fundamentally different types won't ever point to the same memory. This can - manifest as a problem only if one of the pointers is written to. This code - only reads from those pointers. So long as this code remains isolated in - this compilation unit, there won't be a problem. For this reason, this code - should not be copied and pasted into a compilation unit in which other code - writes to the buffer that is passed to these routines. - */ - /* ========================================================================= */ -#define DOLIT4 c ^= *buf4++; \ - c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ - crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] -#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 - -/* ========================================================================= */ -local unsigned long crc32_little(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - z_size_t len; -{ - register z_crc_t c; - register const z_crc_t FAR *buf4; - - c = (z_crc_t)crc; - c = ~c; - while (len && ((ptrdiff_t)buf & 3)) { - c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); - len--; - } - - buf4 = (const z_crc_t FAR *)(const void FAR *)buf; - while (len >= 32) { - DOLIT32; - len -= 32; - } - while (len >= 4) { - DOLIT4; - len -= 4; - } - buf = (const unsigned char FAR *)buf4; - - if (len) do { - c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); - } while (--len); - c = ~c; - return (unsigned long)c; -} - -/* ========================================================================= */ -#define DOBIG4 c ^= *buf4++; \ - c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ - crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] -#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 - -/* ========================================================================= */ -local unsigned long crc32_big(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - z_size_t len; -{ - register z_crc_t c; - register const z_crc_t FAR *buf4; - - c = ZSWAP32((z_crc_t)crc); - c = ~c; - while (len && ((ptrdiff_t)buf & 3)) { - c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); - len--; - } - - buf4 = (const z_crc_t FAR *)(const void FAR *)buf; - while (len >= 32) { - DOBIG32; - len -= 32; - } - while (len >= 4) { - DOBIG4; - len -= 4; - } - buf = (const unsigned char FAR *)buf4; - - if (len) do { - c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); - } while (--len); - c = ~c; - return (unsigned long)(ZSWAP32(c)); -} - -#endif /* BYFOUR */ - -#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */ - -/* ========================================================================= */ -local unsigned long gf2_matrix_times(mat, vec) - unsigned long *mat; - unsigned long vec; -{ - unsigned long sum; - - sum = 0; - while (vec) { - if (vec & 1) - sum ^= *mat; - vec >>= 1; - mat++; - } - return sum; -} - -/* ========================================================================= */ -local void gf2_matrix_square(square, mat) - unsigned long *square; - unsigned long *mat; -{ - int n; - - for (n = 0; n < GF2_DIM; n++) - square[n] = gf2_matrix_times(mat, mat[n]); -} - -/* ========================================================================= */ -local uLong crc32_combine_(crc1, crc2, len2) +uLong ZEXPORT crc32_combine64(crc1, crc2, len2) uLong crc1; uLong crc2; z_off64_t len2; { - int n; - unsigned long row; - unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ - unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ - - /* degenerate case (also disallow negative lengths) */ - if (len2 <= 0) - return crc1; - - /* put operator for one zero bit in odd */ - odd[0] = 0xedb88320UL; /* CRC-32 polynomial */ - row = 1; - for (n = 1; n < GF2_DIM; n++) { - odd[n] = row; - row <<= 1; - } - - /* put operator for two zero bits in even */ - gf2_matrix_square(even, odd); - - /* put operator for four zero bits in odd */ - gf2_matrix_square(odd, even); - - /* apply len2 zeros to crc1 (first square will put the operator for one - zero byte, eight zero bits, in even) */ - do { - /* apply zeros operator for this bit of len2 */ - gf2_matrix_square(even, odd); - if (len2 & 1) - crc1 = gf2_matrix_times(even, crc1); - len2 >>= 1; - - /* if no more bits set, then done */ - if (len2 == 0) - break; - - /* another iteration of the loop with odd and even swapped */ - gf2_matrix_square(odd, even); - if (len2 & 1) - crc1 = gf2_matrix_times(odd, crc1); - len2 >>= 1; - - /* if no more bits set, then done */ - } while (len2 != 0); - - /* return combined crc */ - crc1 ^= crc2; - return crc1; +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + return multmodp(x2nmodp(len2, 3), crc1) ^ crc2; } /* ========================================================================= */ @@ -430,13 +1086,31 @@ uLong ZEXPORT crc32_combine(crc1, crc2, len2) uLong crc2; z_off_t len2; { - return crc32_combine_(crc1, crc2, len2); + return crc32_combine64(crc1, crc2, len2); } -uLong ZEXPORT crc32_combine64(crc1, crc2, len2) - uLong crc1; - uLong crc2; +/* ========================================================================= */ +uLong ZEXPORT crc32_combine_gen64(len2) z_off64_t len2; { - return crc32_combine_(crc1, crc2, len2); +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + return x2nmodp(len2, 3); +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine_gen(len2) + z_off_t len2; +{ + return crc32_combine_gen64(len2); +} + +/* ========================================================================= */ +uLong crc32_combine_op(crc1, crc2, op) + uLong crc1; + uLong crc2; + uLong op; +{ + return multmodp(op, crc1) ^ crc2; } diff --git a/src/3rdparty/zlib/src/crc32.h b/src/3rdparty/zlib/src/crc32.h index 9e0c7781..137df68d 100644 --- a/src/3rdparty/zlib/src/crc32.h +++ b/src/3rdparty/zlib/src/crc32.h @@ -2,440 +2,9445 @@ * Generated automatically by crc32.c */ -local const z_crc_t FAR crc_table[TBLS][256] = -{ - { - 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, - 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, - 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, - 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, - 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, - 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, - 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, - 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, - 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, - 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, - 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, - 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, - 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, - 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, - 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, - 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, - 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, - 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, - 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, - 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, - 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, - 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, - 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, - 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, - 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, - 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, - 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, - 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, - 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, - 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, - 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, - 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, - 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, - 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, - 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, - 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, - 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, - 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, - 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, - 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, - 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, - 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, - 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, - 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, - 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, - 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, - 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, - 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, - 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, - 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, - 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, - 0x2d02ef8dUL -#ifdef BYFOUR - }, - { - 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, - 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, - 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, - 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, - 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, - 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, - 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, - 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, - 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, - 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, - 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, - 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, - 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, - 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, - 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, - 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, - 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, - 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, - 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, - 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, - 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, - 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, - 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, - 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, - 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, - 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, - 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, - 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, - 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, - 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, - 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, - 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, - 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, - 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, - 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, - 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, - 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, - 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, - 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, - 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, - 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, - 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, - 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, - 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, - 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, - 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, - 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, - 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, - 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, - 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, - 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, - 0x9324fd72UL - }, - { - 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, - 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, - 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, - 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, - 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, - 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, - 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, - 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, - 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, - 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, - 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, - 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, - 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, - 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, - 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, - 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, - 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, - 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, - 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, - 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, - 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, - 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, - 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, - 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, - 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, - 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, - 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, - 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, - 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, - 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, - 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, - 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, - 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, - 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, - 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, - 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, - 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, - 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, - 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, - 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, - 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, - 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, - 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, - 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, - 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, - 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, - 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, - 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, - 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, - 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, - 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, - 0xbe9834edUL - }, - { - 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, - 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, - 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, - 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, - 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, - 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, - 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, - 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, - 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, - 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, - 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, - 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, - 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, - 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, - 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, - 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, - 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, - 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, - 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, - 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, - 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, - 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, - 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, - 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, - 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, - 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, - 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, - 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, - 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, - 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, - 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, - 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, - 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, - 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, - 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, - 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, - 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, - 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, - 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, - 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, - 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, - 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, - 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, - 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, - 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, - 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, - 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, - 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, - 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, - 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, - 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, - 0xde0506f1UL - }, - { - 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, - 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, - 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, - 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, - 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, - 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, - 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, - 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, - 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, - 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, - 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, - 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, - 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, - 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, - 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, - 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, - 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, - 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, - 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, - 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, - 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, - 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, - 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, - 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, - 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, - 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, - 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, - 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, - 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, - 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, - 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, - 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, - 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, - 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, - 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, - 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, - 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, - 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, - 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, - 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, - 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, - 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, - 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, - 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, - 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, - 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, - 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, - 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, - 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, - 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, - 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, - 0x8def022dUL - }, - { - 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, - 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, - 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, - 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, - 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, - 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, - 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, - 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, - 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, - 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, - 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, - 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, - 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, - 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, - 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, - 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, - 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, - 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, - 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, - 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, - 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, - 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, - 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, - 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, - 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, - 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, - 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, - 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, - 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, - 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, - 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, - 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, - 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, - 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, - 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, - 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, - 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, - 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, - 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, - 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, - 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, - 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, - 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, - 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, - 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, - 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, - 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, - 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, - 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, - 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, - 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, - 0x72fd2493UL - }, - { - 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, - 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, - 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, - 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, - 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, - 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, - 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, - 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, - 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, - 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, - 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, - 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, - 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, - 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, - 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, - 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, - 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, - 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, - 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, - 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, - 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, - 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, - 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, - 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, - 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, - 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, - 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, - 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, - 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, - 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, - 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, - 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, - 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, - 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, - 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, - 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, - 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, - 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, - 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, - 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, - 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, - 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, - 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, - 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, - 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, - 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, - 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, - 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, - 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, - 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, - 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, - 0xed3498beUL - }, - { - 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, - 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, - 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, - 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, - 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, - 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, - 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, - 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, - 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, - 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, - 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, - 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, - 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, - 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, - 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, - 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, - 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, - 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, - 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, - 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, - 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, - 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, - 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, - 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, - 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, - 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, - 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, - 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, - 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, - 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, - 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, - 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, - 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, - 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, - 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, - 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, - 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, - 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, - 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, - 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, - 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, - 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, - 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, - 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, - 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, - 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, - 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, - 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, - 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, - 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, - 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, - 0xf10605deUL +local const z_crc_t FAR crc_table[] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d}; + +#ifdef W + +#if W == 8 + +local const z_word_t FAR crc_big_table[] = { + 0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, + 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, + 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, + 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, + 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, + 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, + 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, + 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, + 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, + 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, + 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, + 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, + 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, + 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, + 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, + 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, + 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, + 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, + 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, + 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, + 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, + 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, + 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, + 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, + 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, + 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, + 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, + 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, + 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, + 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, + 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, + 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, + 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, + 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, + 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, + 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, + 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, + 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, + 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, + 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, + 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, + 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, + 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, + 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, + 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, + 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, + 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, + 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, + 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, + 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, + 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, + 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, + 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, + 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, + 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, + 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, + 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, + 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, + 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, + 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, + 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, + 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, + 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, + 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, + 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, + 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, + 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, + 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, + 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, + 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, + 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, + 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, + 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, + 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, + 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, + 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, + 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, + 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, + 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, + 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, + 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, + 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, + 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, + 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, + 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, + 0x8def022d00000000}; + +#else /* W == 4 */ + +local const z_word_t FAR crc_big_table[] = { + 0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, + 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, + 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, + 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, + 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, + 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, + 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, + 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, + 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, + 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, + 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, + 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, + 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, + 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, + 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, + 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, + 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, + 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, + 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, + 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, + 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, + 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, + 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, + 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, + 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, + 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, + 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, + 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, + 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, + 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, + 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, + 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, + 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, + 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, + 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, + 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, + 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, + 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, + 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, + 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, + 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, + 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, + 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, + 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, + 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, + 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, + 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, + 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, + 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, + 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, + 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, + 0x8def022d}; + #endif - } -}; + +#if N == 1 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, + 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, + 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, + 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, + 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, + 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, + 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, + 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, + 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, + 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, + 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, + 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, + 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, + 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, + 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, + 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, + 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, + 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, + 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, + 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, + 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, + 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, + 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, + 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, + 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, + 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, + 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, + 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, + 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, + 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, + 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, + 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, + 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, + 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, + 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, + 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, + 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, + 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, + 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, + 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, + 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, + 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, + 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, + 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, + 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, + 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, + 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, + 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, + 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, + 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, + 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, + 0x264b06e6}, + {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, + 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, + 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, + 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, + 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, + 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, + 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, + 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, + 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, + 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, + 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, + 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, + 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, + 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, + 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, + 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, + 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, + 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, + 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, + 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, + 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, + 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, + 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, + 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, + 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, + 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, + 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, + 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, + 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, + 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, + 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, + 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, + 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, + 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, + 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, + 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, + 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, + 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, + 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, + 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, + 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, + 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, + 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, + 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, + 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, + 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, + 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, + 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, + 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, + 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, + 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, + 0x92364a30}, + {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, + 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, + 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, + 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, + 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, + 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, + 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, + 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, + 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, + 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, + 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, + 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, + 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, + 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, + 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, + 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, + 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, + 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, + 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, + 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, + 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, + 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, + 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, + 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, + 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, + 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, + 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, + 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, + 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, + 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, + 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, + 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, + 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, + 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, + 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, + 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, + 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, + 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, + 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, + 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, + 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, + 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, + 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, + 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, + 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, + 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, + 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, + 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, + 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, + 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, + 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, + 0xe4c4abcc}, + {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, + 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, + 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, + 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, + 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, + 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, + 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, + 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, + 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, + 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, + 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, + 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, + 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, + 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, + 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, + 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, + 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, + 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, + 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, + 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, + 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, + 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, + 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, + 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, + 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, + 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, + 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, + 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, + 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, + 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, + 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, + 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, + 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, + 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, + 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, + 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, + 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, + 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, + 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, + 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, + 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, + 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, + 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, + 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, + 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, + 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, + 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, + 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, + 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, + 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, + 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, + 0xca64c78c}, + {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, + 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, + 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, + 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, + 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, + 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, + 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, + 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, + 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, + 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, + 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, + 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, + 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, + 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, + 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, + 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, + 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, + 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, + 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, + 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, + 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, + 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, + 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, + 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, + 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, + 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, + 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, + 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, + 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, + 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, + 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, + 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, + 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, + 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, + 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, + 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, + 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, + 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, + 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, + 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, + 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, + 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, + 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, + 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, + 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, + 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, + 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, + 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, + 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, + 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, + 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, + 0xde0506f1}, + {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, + 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, + 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, + 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, + 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, + 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, + 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, + 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, + 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, + 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, + 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, + 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, + 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, + 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, + 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, + 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, + 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, + 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, + 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, + 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, + 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, + 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, + 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, + 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, + 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, + 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, + 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, + 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, + 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, + 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, + 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, + 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, + 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, + 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, + 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, + 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, + 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, + 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, + 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, + 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, + 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, + 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, + 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, + 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, + 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, + 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, + 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, + 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, + 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, + 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, + 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, + 0xbe9834ed}, + {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, + 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, + 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, + 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, + 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, + 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, + 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, + 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, + 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, + 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, + 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, + 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, + 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, + 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, + 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, + 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, + 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, + 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, + 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, + 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, + 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, + 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, + 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, + 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, + 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, + 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, + 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, + 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, + 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, + 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, + 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, + 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, + 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, + 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, + 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, + 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, + 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, + 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, + 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, + 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, + 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, + 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, + 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, + 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, + 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, + 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, + 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, + 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, + 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, + 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, + 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, + 0x9324fd72}, + {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, + 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, + 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, + 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, + 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, + 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, + 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, + 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, + 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, + 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, + 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, + 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, + 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, + 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, + 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, + 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, + 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, + 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, + 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, + 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, + 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, + 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, + 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, + 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, + 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, + 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, + 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, + 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, + 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, + 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, + 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, + 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, + 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, + 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, + 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, + 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, + 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, + 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, + 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, + 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, + 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, + 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, + 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, + 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, + 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, + 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, + 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, + 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, + 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, + 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, + 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, + 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, + 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, + 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, + 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, + 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, + 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, + 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, + 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, + 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, + 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, + 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, + 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, + 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, + 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, + 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, + 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, + 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, + 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, + 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, + 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, + 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, + 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, + 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, + 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, + 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, + 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, + 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, + 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, + 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, + 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, + 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, + 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, + 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, + 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, + 0x8def022d00000000}, + {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000, + 0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000, + 0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000, + 0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000, + 0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000, + 0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000, + 0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000, + 0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000, + 0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000, + 0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000, + 0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000, + 0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000, + 0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000, + 0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000, + 0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000, + 0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000, + 0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000, + 0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000, + 0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000, + 0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000, + 0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000, + 0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000, + 0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000, + 0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000, + 0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000, + 0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000, + 0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000, + 0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000, + 0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000, + 0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000, + 0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000, + 0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000, + 0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000, + 0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000, + 0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000, + 0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000, + 0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000, + 0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000, + 0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000, + 0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000, + 0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000, + 0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000, + 0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000, + 0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000, + 0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000, + 0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000, + 0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000, + 0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000, + 0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000, + 0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000, + 0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000, + 0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000, + 0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000, + 0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000, + 0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000, + 0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000, + 0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000, + 0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000, + 0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000, + 0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000, + 0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000, + 0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000, + 0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000, + 0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000, + 0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000, + 0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000, + 0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000, + 0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000, + 0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000, + 0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000, + 0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000, + 0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000, + 0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000, + 0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000, + 0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000, + 0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000, + 0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000, + 0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000, + 0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000, + 0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000, + 0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000, + 0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000, + 0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000, + 0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000, + 0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000, + 0x72fd249300000000}, + {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000, + 0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000, + 0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000, + 0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000, + 0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000, + 0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000, + 0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000, + 0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000, + 0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000, + 0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000, + 0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000, + 0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000, + 0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000, + 0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000, + 0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000, + 0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000, + 0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000, + 0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000, + 0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000, + 0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000, + 0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000, + 0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000, + 0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000, + 0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000, + 0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000, + 0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000, + 0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000, + 0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000, + 0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000, + 0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000, + 0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000, + 0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000, + 0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000, + 0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000, + 0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000, + 0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000, + 0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000, + 0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000, + 0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000, + 0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000, + 0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000, + 0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000, + 0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000, + 0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000, + 0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000, + 0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000, + 0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000, + 0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000, + 0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000, + 0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000, + 0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000, + 0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000, + 0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000, + 0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000, + 0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000, + 0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000, + 0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000, + 0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000, + 0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000, + 0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000, + 0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000, + 0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000, + 0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000, + 0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000, + 0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000, + 0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000, + 0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000, + 0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000, + 0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000, + 0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000, + 0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000, + 0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000, + 0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000, + 0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000, + 0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000, + 0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000, + 0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000, + 0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000, + 0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000, + 0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000, + 0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000, + 0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000, + 0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000, + 0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000, + 0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000, + 0xed3498be00000000}, + {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000, + 0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000, + 0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000, + 0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000, + 0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000, + 0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000, + 0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000, + 0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000, + 0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000, + 0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000, + 0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000, + 0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000, + 0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000, + 0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000, + 0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000, + 0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000, + 0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000, + 0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000, + 0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000, + 0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000, + 0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000, + 0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000, + 0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000, + 0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000, + 0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000, + 0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000, + 0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000, + 0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000, + 0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000, + 0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000, + 0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000, + 0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000, + 0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000, + 0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000, + 0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000, + 0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000, + 0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000, + 0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000, + 0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000, + 0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000, + 0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000, + 0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000, + 0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000, + 0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000, + 0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000, + 0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000, + 0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000, + 0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000, + 0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000, + 0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000, + 0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000, + 0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000, + 0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000, + 0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000, + 0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000, + 0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000, + 0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000, + 0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000, + 0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000, + 0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000, + 0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000, + 0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000, + 0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000, + 0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000, + 0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000, + 0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000, + 0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000, + 0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000, + 0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000, + 0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000, + 0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000, + 0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000, + 0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000, + 0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000, + 0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000, + 0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000, + 0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000, + 0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000, + 0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000, + 0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000, + 0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000, + 0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000, + 0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000, + 0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000, + 0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000, + 0xf10605de00000000}, + {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000, + 0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000, + 0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000, + 0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000, + 0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000, + 0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000, + 0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000, + 0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000, + 0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000, + 0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000, + 0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000, + 0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000, + 0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000, + 0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000, + 0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000, + 0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000, + 0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000, + 0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000, + 0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000, + 0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000, + 0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000, + 0x572f712300000000, 0x4958f35800000000, 0xf971936500000000, + 0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000, + 0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000, + 0x8813836800000000, 0x383ae35500000000, 0xe840431200000000, + 0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000, + 0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000, + 0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000, + 0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000, + 0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000, + 0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000, + 0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000, + 0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000, + 0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000, + 0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000, + 0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000, + 0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000, + 0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000, + 0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000, + 0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000, + 0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000, + 0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000, + 0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000, + 0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000, + 0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000, + 0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000, + 0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000, + 0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000, + 0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000, + 0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000, + 0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000, + 0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000, + 0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000, + 0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000, + 0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000, + 0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000, + 0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000, + 0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000, + 0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000, + 0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000, + 0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000, + 0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000, + 0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000, + 0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000, + 0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000, + 0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000, + 0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000, + 0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000, + 0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000, + 0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000, + 0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000, + 0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000, + 0x983485b900000000, 0x281de58400000000, 0xf86745c300000000, + 0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000, + 0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000, + 0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000, + 0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000, + 0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000, + 0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000, + 0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000, + 0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000, + 0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000, + 0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000, + 0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000, + 0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000, + 0x8cc764ca00000000}, + {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000, + 0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000, + 0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000, + 0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000, + 0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000, + 0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000, + 0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000, + 0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000, + 0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000, + 0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000, + 0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000, + 0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000, + 0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000, + 0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000, + 0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000, + 0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000, + 0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000, + 0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000, + 0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000, + 0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000, + 0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000, + 0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000, + 0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000, + 0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000, + 0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000, + 0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000, + 0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000, + 0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000, + 0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000, + 0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000, + 0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000, + 0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000, + 0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000, + 0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000, + 0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000, + 0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000, + 0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000, + 0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000, + 0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000, + 0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000, + 0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000, + 0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000, + 0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000, + 0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000, + 0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000, + 0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000, + 0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000, + 0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000, + 0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000, + 0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000, + 0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000, + 0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000, + 0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000, + 0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000, + 0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000, + 0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000, + 0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000, + 0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000, + 0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000, + 0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000, + 0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000, + 0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000, + 0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000, + 0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000, + 0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000, + 0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000, + 0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000, + 0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000, + 0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000, + 0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000, + 0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000, + 0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000, + 0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000, + 0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000, + 0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000, + 0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000, + 0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000, + 0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000, + 0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000, + 0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000, + 0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000, + 0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000, + 0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000, + 0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000, + 0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000, + 0xccabc4e400000000}, + {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000, + 0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000, + 0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000, + 0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000, + 0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000, + 0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000, + 0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000, + 0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000, + 0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000, + 0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000, + 0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000, + 0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000, + 0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000, + 0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000, + 0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000, + 0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000, + 0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000, + 0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000, + 0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000, + 0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000, + 0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000, + 0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000, + 0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000, + 0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000, + 0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000, + 0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000, + 0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000, + 0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000, + 0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000, + 0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000, + 0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000, + 0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000, + 0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000, + 0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000, + 0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000, + 0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000, + 0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000, + 0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000, + 0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000, + 0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000, + 0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000, + 0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000, + 0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000, + 0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000, + 0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000, + 0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000, + 0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000, + 0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000, + 0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000, + 0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000, + 0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000, + 0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000, + 0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000, + 0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000, + 0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000, + 0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000, + 0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000, + 0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000, + 0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000, + 0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000, + 0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000, + 0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000, + 0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000, + 0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000, + 0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000, + 0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000, + 0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000, + 0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000, + 0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000, + 0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000, + 0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000, + 0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000, + 0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000, + 0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000, + 0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000, + 0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000, + 0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000, + 0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000, + 0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000, + 0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000, + 0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000, + 0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000, + 0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000, + 0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000, + 0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000, + 0x304a369200000000}, + {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000, + 0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000, + 0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000, + 0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000, + 0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000, + 0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000, + 0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000, + 0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000, + 0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000, + 0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000, + 0x1923316900000000, 0x87239ba500000000, 0x566276f900000000, + 0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000, + 0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000, + 0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000, + 0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000, + 0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000, + 0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000, + 0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000, + 0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000, + 0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000, + 0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000, + 0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000, + 0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000, + 0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000, + 0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000, + 0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000, + 0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000, + 0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000, + 0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000, + 0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000, + 0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000, + 0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000, + 0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000, + 0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000, + 0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000, + 0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000, + 0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000, + 0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000, + 0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000, + 0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000, + 0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000, + 0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000, + 0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000, + 0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000, + 0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000, + 0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000, + 0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000, + 0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000, + 0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000, + 0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000, + 0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000, + 0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000, + 0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000, + 0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000, + 0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000, + 0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000, + 0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000, + 0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000, + 0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000, + 0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000, + 0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000, + 0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000, + 0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000, + 0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000, + 0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000, + 0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000, + 0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000, + 0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000, + 0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000, + 0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000, + 0x6171384400000000, 0xff71928800000000, 0xe678578200000000, + 0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000, + 0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000, + 0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000, + 0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000, + 0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000, + 0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000, + 0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000, + 0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000, + 0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000, + 0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000, + 0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000, + 0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000, + 0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000, + 0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000, + 0xe6064b2600000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, + 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, + 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, + 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, + 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, + 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, + 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, + 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, + 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, + 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, + 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, + 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, + 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, + 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, + 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, + 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, + 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, + 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, + 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, + 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, + 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, + 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, + 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, + 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, + 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, + 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, + 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, + 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, + 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, + 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, + 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, + 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, + 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, + 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, + 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, + 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, + 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, + 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, + 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, + 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, + 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, + 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, + 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, + 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, + 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, + 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, + 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, + 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, + 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, + 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, + 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, + 0xde0506f1}, + {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, + 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, + 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, + 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, + 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, + 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, + 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, + 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, + 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, + 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, + 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, + 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, + 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, + 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, + 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, + 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, + 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, + 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, + 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, + 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, + 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, + 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, + 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, + 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, + 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, + 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, + 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, + 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, + 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, + 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, + 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, + 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, + 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, + 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, + 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, + 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, + 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, + 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, + 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, + 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, + 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, + 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, + 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, + 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, + 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, + 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, + 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, + 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, + 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, + 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, + 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, + 0xbe9834ed}, + {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, + 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, + 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, + 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, + 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, + 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, + 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, + 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, + 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, + 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, + 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, + 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, + 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, + 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, + 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, + 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, + 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, + 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, + 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, + 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, + 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, + 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, + 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, + 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, + 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, + 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, + 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, + 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, + 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, + 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, + 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, + 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, + 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, + 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, + 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, + 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, + 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, + 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, + 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, + 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, + 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, + 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, + 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, + 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, + 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, + 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, + 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, + 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, + 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, + 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, + 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, + 0x9324fd72}, + {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, + 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, + 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, + 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, + 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, + 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, + 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, + 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, + 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, + 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, + 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, + 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, + 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, + 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, + 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, + 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, + 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, + 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, + 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, + 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, + 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, + 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, + 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, + 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, + 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, + 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, + 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, + 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, + 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, + 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, + 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, + 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, + 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, + 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, + 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, + 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, + 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, + 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, + 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, + 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, + 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, + 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, + 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, + 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, + 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, + 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, + 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, + 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, + 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, + 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, + 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, + 0x8def022d}, + {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64, + 0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1, + 0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e, + 0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61, + 0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82, + 0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff, + 0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7, + 0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da, + 0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139, + 0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6, + 0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89, + 0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c, + 0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0, + 0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d, + 0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a, + 0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177, + 0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de, + 0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b, + 0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824, + 0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e, + 0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad, + 0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0, + 0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d, + 0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60, + 0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83, + 0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822, + 0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d, + 0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8, + 0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171, + 0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c, + 0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b, + 0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6, + 0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca, + 0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f, + 0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430, + 0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf, + 0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c, + 0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51, + 0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9, + 0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84, + 0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67, + 0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398, + 0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7, + 0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62, + 0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e, + 0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923, + 0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4, + 0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9, + 0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070, + 0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5, + 0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a, + 0x72fd2493}, + {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907, + 0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f, + 0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a, + 0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e, + 0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512, + 0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14, + 0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b, + 0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d, + 0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731, + 0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925, + 0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620, + 0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28, + 0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70, + 0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176, + 0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d, + 0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b, + 0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b, + 0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63, + 0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266, + 0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a, + 0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446, + 0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40, + 0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557, + 0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51, + 0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d, + 0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0, + 0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5, + 0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed, + 0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd, + 0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb, + 0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0, + 0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6, + 0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de, + 0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6, + 0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3, + 0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7, + 0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb, + 0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd, + 0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92, + 0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094, + 0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598, + 0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c, + 0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489, + 0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81, + 0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9, + 0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af, + 0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4, + 0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2, + 0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2, + 0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba, + 0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf, + 0xed3498be}, + {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f, + 0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d, + 0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0, + 0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42, + 0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95, + 0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2, + 0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a, + 0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d, + 0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea, + 0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748, + 0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5, + 0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27, + 0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b, + 0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac, + 0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4, + 0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3, + 0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44, + 0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6, + 0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b, + 0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329, + 0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe, + 0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9, + 0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1, + 0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6, + 0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921, + 0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555, + 0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8, + 0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a, + 0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd, + 0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a, + 0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2, + 0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5, + 0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2, + 0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330, + 0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad, + 0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f, + 0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8, + 0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef, + 0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc, + 0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb, + 0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c, + 0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e, + 0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03, + 0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1, + 0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6, + 0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1, + 0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9, + 0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e, + 0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409, + 0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb, + 0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966, + 0xf10605de}}; + +#endif + +#endif + +#if N == 2 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, + 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, + 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, + 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, + 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, + 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, + 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, + 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, + 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, + 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, + 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, + 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, + 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, + 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, + 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, + 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, + 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, + 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, + 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, + 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, + 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, + 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, + 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, + 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, + 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, + 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, + 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, + 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, + 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, + 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, + 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, + 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, + 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, + 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, + 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, + 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, + 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, + 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, + 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, + 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, + 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, + 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, + 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, + 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, + 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, + 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, + 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, + 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, + 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, + 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, + 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, + 0x0d7139d7}, + {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, + 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, + 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, + 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, + 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, + 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, + 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, + 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, + 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, + 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, + 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, + 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, + 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, + 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, + 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, + 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, + 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, + 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, + 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, + 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, + 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, + 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, + 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, + 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, + 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, + 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, + 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, + 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, + 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, + 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, + 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, + 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, + 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, + 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, + 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, + 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, + 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, + 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, + 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, + 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, + 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, + 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, + 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, + 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, + 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, + 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, + 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, + 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, + 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, + 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, + 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, + 0x1c53e98a}, + {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, + 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, + 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, + 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, + 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, + 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, + 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, + 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, + 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, + 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, + 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, + 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, + 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, + 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, + 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, + 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, + 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, + 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, + 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, + 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, + 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, + 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, + 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, + 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, + 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, + 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, + 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, + 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, + 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, + 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, + 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, + 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, + 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, + 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, + 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, + 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, + 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, + 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, + 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, + 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, + 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, + 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, + 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, + 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, + 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, + 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, + 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, + 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, + 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, + 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, + 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, + 0x3f88e851}, + {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, + 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, + 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, + 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, + 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, + 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, + 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, + 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, + 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, + 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, + 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, + 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, + 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, + 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, + 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, + 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, + 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, + 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, + 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, + 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, + 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, + 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, + 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, + 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, + 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, + 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, + 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, + 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, + 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, + 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, + 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, + 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, + 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, + 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, + 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, + 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, + 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, + 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, + 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, + 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, + 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, + 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, + 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, + 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, + 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, + 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, + 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, + 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, + 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, + 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, + 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, + 0x3dee8ca6}, + {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, + 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, + 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, + 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, + 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, + 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, + 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, + 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, + 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, + 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, + 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, + 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, + 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, + 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, + 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, + 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, + 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, + 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, + 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, + 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, + 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, + 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, + 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, + 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, + 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, + 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, + 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, + 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, + 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, + 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, + 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, + 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, + 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, + 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, + 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, + 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, + 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, + 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, + 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, + 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, + 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, + 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, + 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, + 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, + 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, + 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, + 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, + 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, + 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, + 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, + 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, + 0x36197165}, + {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, + 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, + 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, + 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, + 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, + 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, + 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, + 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, + 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, + 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, + 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, + 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, + 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, + 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, + 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, + 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, + 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, + 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, + 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, + 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, + 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, + 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, + 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, + 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, + 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, + 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, + 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, + 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, + 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, + 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, + 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, + 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, + 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, + 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, + 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, + 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, + 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, + 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, + 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, + 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, + 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, + 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, + 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, + 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, + 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, + 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, + 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, + 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, + 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, + 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, + 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, + 0x1a3b93aa}, + {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, + 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, + 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, + 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, + 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, + 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, + 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, + 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, + 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, + 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, + 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, + 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, + 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, + 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, + 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, + 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, + 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, + 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, + 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, + 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, + 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, + 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, + 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, + 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, + 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, + 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, + 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, + 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, + 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, + 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, + 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, + 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, + 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, + 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, + 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, + 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, + 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, + 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, + 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, + 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, + 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, + 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, + 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, + 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, + 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, + 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, + 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, + 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, + 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, + 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, + 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, + 0xe147d714}, + {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, + 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, + 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, + 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, + 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, + 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, + 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, + 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, + 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, + 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, + 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, + 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, + 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, + 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, + 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, + 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, + 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, + 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, + 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, + 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, + 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, + 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, + 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, + 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, + 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, + 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, + 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, + 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, + 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, + 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, + 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, + 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, + 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, + 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, + 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, + 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, + 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, + 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, + 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, + 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, + 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, + 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, + 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, + 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, + 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, + 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, + 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, + 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, + 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, + 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, + 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, + 0x494f0c4b}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000, + 0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000, + 0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000, + 0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000, + 0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000, + 0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000, + 0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000, + 0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000, + 0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000, + 0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000, + 0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000, + 0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000, + 0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000, + 0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000, + 0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000, + 0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000, + 0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000, + 0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000, + 0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000, + 0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000, + 0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000, + 0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000, + 0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000, + 0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000, + 0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000, + 0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000, + 0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000, + 0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000, + 0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000, + 0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000, + 0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000, + 0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000, + 0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000, + 0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000, + 0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000, + 0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000, + 0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000, + 0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000, + 0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000, + 0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000, + 0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000, + 0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000, + 0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000, + 0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000, + 0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000, + 0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000, + 0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000, + 0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000, + 0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000, + 0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000, + 0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000, + 0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000, + 0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000, + 0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000, + 0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000, + 0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000, + 0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000, + 0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000, + 0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000, + 0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000, + 0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000, + 0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000, + 0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000, + 0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000, + 0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000, + 0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000, + 0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000, + 0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000, + 0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000, + 0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000, + 0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000, + 0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000, + 0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000, + 0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000, + 0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000, + 0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000, + 0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000, + 0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000, + 0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000, + 0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000, + 0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000, + 0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000, + 0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000, + 0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000, + 0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000, + 0x4b0c4f4900000000}, + {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000, + 0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000, + 0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000, + 0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000, + 0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000, + 0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000, + 0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000, + 0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000, + 0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000, + 0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000, + 0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000, + 0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000, + 0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000, + 0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000, + 0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000, + 0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000, + 0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000, + 0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000, + 0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000, + 0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000, + 0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000, + 0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000, + 0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000, + 0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000, + 0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000, + 0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000, + 0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000, + 0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000, + 0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000, + 0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000, + 0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000, + 0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000, + 0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000, + 0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000, + 0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000, + 0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000, + 0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000, + 0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000, + 0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000, + 0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000, + 0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000, + 0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000, + 0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000, + 0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000, + 0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000, + 0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000, + 0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000, + 0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000, + 0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000, + 0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000, + 0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000, + 0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000, + 0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000, + 0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000, + 0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000, + 0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000, + 0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000, + 0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000, + 0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000, + 0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000, + 0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000, + 0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000, + 0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000, + 0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000, + 0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000, + 0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000, + 0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000, + 0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000, + 0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000, + 0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000, + 0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000, + 0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000, + 0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000, + 0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000, + 0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000, + 0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000, + 0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000, + 0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000, + 0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000, + 0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000, + 0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000, + 0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000, + 0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000, + 0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000, + 0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000, + 0x14d747e100000000}, + {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000, + 0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000, + 0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000, + 0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000, + 0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000, + 0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000, + 0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000, + 0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000, + 0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000, + 0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000, + 0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000, + 0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000, + 0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000, + 0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000, + 0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000, + 0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000, + 0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000, + 0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000, + 0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000, + 0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000, + 0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000, + 0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000, + 0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000, + 0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000, + 0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000, + 0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000, + 0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000, + 0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000, + 0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000, + 0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000, + 0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000, + 0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000, + 0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000, + 0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000, + 0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000, + 0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000, + 0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000, + 0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000, + 0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000, + 0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000, + 0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000, + 0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000, + 0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000, + 0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000, + 0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000, + 0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000, + 0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000, + 0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000, + 0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000, + 0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000, + 0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000, + 0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000, + 0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000, + 0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000, + 0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000, + 0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000, + 0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000, + 0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000, + 0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000, + 0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000, + 0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000, + 0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000, + 0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000, + 0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000, + 0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000, + 0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000, + 0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000, + 0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000, + 0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000, + 0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000, + 0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000, + 0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000, + 0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000, + 0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000, + 0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000, + 0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000, + 0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000, + 0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000, + 0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000, + 0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000, + 0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000, + 0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000, + 0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000, + 0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000, + 0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000, + 0xaa933b1a00000000}, + {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000, + 0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000, + 0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000, + 0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000, + 0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000, + 0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000, + 0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000, + 0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000, + 0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000, + 0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000, + 0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000, + 0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000, + 0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000, + 0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000, + 0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000, + 0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000, + 0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000, + 0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000, + 0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000, + 0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000, + 0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000, + 0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000, + 0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000, + 0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000, + 0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000, + 0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000, + 0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000, + 0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000, + 0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000, + 0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000, + 0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000, + 0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000, + 0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000, + 0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000, + 0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000, + 0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000, + 0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000, + 0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000, + 0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000, + 0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000, + 0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000, + 0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000, + 0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000, + 0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000, + 0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000, + 0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000, + 0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000, + 0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000, + 0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000, + 0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000, + 0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000, + 0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000, + 0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000, + 0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000, + 0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000, + 0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000, + 0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000, + 0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000, + 0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000, + 0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000, + 0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000, + 0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000, + 0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000, + 0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000, + 0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000, + 0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000, + 0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000, + 0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000, + 0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000, + 0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000, + 0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000, + 0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000, + 0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000, + 0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000, + 0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000, + 0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000, + 0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000, + 0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000, + 0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000, + 0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000, + 0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000, + 0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000, + 0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000, + 0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000, + 0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000, + 0x6571193600000000}, + {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000, + 0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000, + 0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000, + 0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000, + 0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000, + 0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000, + 0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000, + 0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000, + 0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000, + 0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000, + 0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000, + 0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000, + 0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000, + 0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000, + 0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000, + 0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000, + 0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000, + 0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000, + 0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000, + 0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000, + 0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000, + 0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000, + 0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000, + 0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000, + 0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000, + 0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000, + 0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000, + 0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000, + 0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000, + 0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000, + 0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000, + 0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000, + 0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000, + 0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000, + 0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000, + 0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000, + 0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000, + 0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000, + 0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000, + 0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000, + 0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000, + 0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000, + 0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000, + 0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000, + 0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000, + 0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000, + 0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000, + 0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000, + 0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000, + 0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000, + 0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000, + 0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000, + 0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000, + 0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000, + 0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000, + 0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000, + 0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000, + 0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000, + 0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000, + 0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000, + 0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000, + 0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000, + 0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000, + 0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000, + 0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000, + 0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000, + 0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000, + 0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000, + 0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000, + 0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000, + 0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000, + 0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000, + 0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000, + 0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000, + 0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000, + 0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000, + 0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000, + 0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000, + 0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000, + 0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000, + 0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000, + 0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000, + 0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000, + 0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000, + 0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000, + 0xa68cee3d00000000}, + {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000, + 0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000, + 0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000, + 0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000, + 0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000, + 0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000, + 0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000, + 0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000, + 0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000, + 0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000, + 0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000, + 0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000, + 0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000, + 0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000, + 0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000, + 0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000, + 0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000, + 0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000, + 0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000, + 0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000, + 0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000, + 0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000, + 0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000, + 0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000, + 0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000, + 0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000, + 0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000, + 0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000, + 0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000, + 0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000, + 0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000, + 0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000, + 0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000, + 0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000, + 0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000, + 0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000, + 0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000, + 0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000, + 0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000, + 0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000, + 0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000, + 0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000, + 0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000, + 0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000, + 0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000, + 0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000, + 0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000, + 0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000, + 0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000, + 0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000, + 0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000, + 0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000, + 0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000, + 0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000, + 0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000, + 0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000, + 0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000, + 0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000, + 0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000, + 0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000, + 0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000, + 0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000, + 0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000, + 0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000, + 0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000, + 0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000, + 0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000, + 0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000, + 0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000, + 0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000, + 0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000, + 0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000, + 0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000, + 0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000, + 0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000, + 0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000, + 0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000, + 0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000, + 0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000, + 0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000, + 0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000, + 0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000, + 0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000, + 0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000, + 0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000, + 0x51e8883f00000000}, + {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000, + 0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000, + 0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000, + 0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000, + 0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000, + 0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000, + 0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000, + 0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000, + 0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000, + 0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000, + 0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000, + 0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000, + 0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000, + 0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000, + 0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000, + 0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000, + 0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000, + 0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000, + 0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000, + 0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000, + 0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000, + 0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000, + 0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000, + 0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000, + 0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000, + 0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000, + 0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000, + 0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000, + 0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000, + 0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000, + 0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000, + 0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000, + 0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000, + 0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000, + 0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000, + 0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000, + 0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000, + 0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000, + 0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000, + 0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000, + 0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000, + 0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000, + 0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000, + 0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000, + 0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000, + 0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000, + 0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000, + 0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000, + 0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000, + 0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000, + 0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000, + 0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000, + 0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000, + 0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000, + 0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000, + 0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000, + 0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000, + 0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000, + 0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000, + 0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000, + 0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000, + 0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000, + 0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000, + 0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000, + 0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000, + 0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000, + 0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000, + 0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000, + 0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000, + 0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000, + 0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000, + 0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000, + 0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000, + 0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000, + 0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000, + 0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000, + 0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000, + 0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000, + 0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000, + 0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000, + 0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000, + 0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000, + 0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000, + 0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000, + 0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000, + 0x8ae9531c00000000}, + {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000, + 0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000, + 0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000, + 0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000, + 0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000, + 0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000, + 0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000, + 0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000, + 0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000, + 0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000, + 0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000, + 0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000, + 0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000, + 0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000, + 0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000, + 0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000, + 0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000, + 0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000, + 0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000, + 0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000, + 0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000, + 0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000, + 0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000, + 0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000, + 0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000, + 0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000, + 0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000, + 0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000, + 0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000, + 0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000, + 0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000, + 0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000, + 0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000, + 0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000, + 0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000, + 0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000, + 0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000, + 0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000, + 0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000, + 0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000, + 0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000, + 0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000, + 0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000, + 0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000, + 0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000, + 0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000, + 0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000, + 0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000, + 0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000, + 0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000, + 0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000, + 0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000, + 0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000, + 0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000, + 0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000, + 0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000, + 0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000, + 0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000, + 0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000, + 0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000, + 0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000, + 0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000, + 0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000, + 0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000, + 0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000, + 0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000, + 0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000, + 0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000, + 0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000, + 0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000, + 0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000, + 0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000, + 0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000, + 0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000, + 0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000, + 0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000, + 0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000, + 0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000, + 0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000, + 0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000, + 0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000, + 0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000, + 0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000, + 0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000, + 0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000, + 0xd739710d00000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, + 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, + 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, + 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, + 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, + 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, + 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, + 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, + 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, + 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, + 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, + 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, + 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, + 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, + 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, + 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, + 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, + 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, + 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, + 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, + 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, + 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, + 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, + 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, + 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, + 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, + 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, + 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, + 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, + 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, + 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, + 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, + 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, + 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, + 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, + 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, + 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, + 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, + 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, + 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, + 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, + 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, + 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, + 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, + 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, + 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, + 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, + 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, + 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, + 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, + 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, + 0x264b06e6}, + {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, + 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, + 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, + 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, + 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, + 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, + 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, + 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, + 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, + 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, + 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, + 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, + 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, + 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, + 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, + 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, + 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, + 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, + 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, + 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, + 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, + 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, + 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, + 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, + 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, + 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, + 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, + 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, + 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, + 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, + 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, + 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, + 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, + 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, + 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, + 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, + 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, + 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, + 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, + 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, + 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, + 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, + 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, + 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, + 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, + 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, + 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, + 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, + 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, + 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, + 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, + 0x92364a30}, + {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, + 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, + 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, + 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, + 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, + 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, + 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, + 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, + 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, + 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, + 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, + 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, + 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, + 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, + 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, + 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, + 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, + 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, + 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, + 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, + 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, + 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, + 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, + 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, + 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, + 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, + 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, + 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, + 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, + 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, + 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, + 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, + 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, + 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, + 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, + 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, + 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, + 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, + 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, + 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, + 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, + 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, + 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, + 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, + 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, + 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, + 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, + 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, + 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, + 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, + 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, + 0xe4c4abcc}, + {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, + 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, + 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, + 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, + 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, + 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, + 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, + 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, + 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, + 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, + 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, + 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, + 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, + 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, + 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, + 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, + 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, + 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, + 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, + 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, + 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, + 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, + 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, + 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, + 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, + 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, + 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, + 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, + 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, + 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, + 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, + 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, + 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, + 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, + 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, + 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, + 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, + 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, + 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, + 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, + 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, + 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, + 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, + 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, + 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, + 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, + 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, + 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, + 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, + 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, + 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, + 0xca64c78c}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5, + 0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d, + 0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf, + 0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027, + 0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050, + 0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098, + 0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb, + 0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173, + 0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104, + 0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c, + 0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e, + 0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6, + 0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358, + 0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390, + 0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312, + 0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da, + 0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd, + 0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335, + 0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387, + 0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de, + 0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9, + 0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261, + 0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283, + 0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b, + 0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c, + 0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c, + 0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e, + 0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6, + 0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1, + 0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619, + 0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b, + 0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653, + 0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785, + 0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d, + 0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf, + 0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757, + 0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720, + 0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8, + 0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593, + 0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b, + 0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c, + 0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4, + 0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506, + 0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe, + 0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428, + 0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0, + 0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462, + 0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa, + 0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd, + 0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445, + 0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7, + 0x8cc764ca}, + {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b, + 0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27, + 0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a, + 0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285, + 0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef, + 0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf, + 0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a, + 0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a, + 0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70, + 0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf, + 0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2, + 0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e, + 0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f, + 0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f, + 0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae, + 0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe, + 0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97, + 0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b, + 0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436, + 0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e, + 0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4, + 0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4, + 0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46, + 0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716, + 0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c, + 0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5, + 0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8, + 0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774, + 0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d, + 0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d, + 0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc, + 0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec, + 0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82, + 0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e, + 0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623, + 0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c, + 0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6, + 0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6, + 0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c, + 0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c, + 0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66, + 0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9, + 0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4, + 0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978, + 0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416, + 0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946, + 0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7, + 0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7, + 0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e, + 0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32, + 0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f, + 0xccabc4e4}, + {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4, + 0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895, + 0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50, + 0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656, + 0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154, + 0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906, + 0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258, + 0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a, + 0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08, + 0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e, + 0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb, + 0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa, + 0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44, + 0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316, + 0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0, + 0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2, + 0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7, + 0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6, + 0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73, + 0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba, + 0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8, + 0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea, + 0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b, + 0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29, + 0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b, + 0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e, + 0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb, + 0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a, + 0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef, + 0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd, + 0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b, + 0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019, + 0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3, + 0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2, + 0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417, + 0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11, + 0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13, + 0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241, + 0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b, + 0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09, + 0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b, + 0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d, + 0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8, + 0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9, + 0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003, + 0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851, + 0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7, + 0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5, + 0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190, + 0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1, + 0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134, + 0x304a3692}, + {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84, + 0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f, + 0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15, + 0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2, + 0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf, + 0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7, + 0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb, + 0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3, + 0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae, + 0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749, + 0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243, + 0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8, + 0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29, + 0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61, + 0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8, + 0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0, + 0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1, + 0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a, + 0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40, + 0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e, + 0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03, + 0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b, + 0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee, + 0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6, + 0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb, + 0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f, + 0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495, + 0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e, + 0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f, + 0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067, + 0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be, + 0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6, + 0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e, + 0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5, + 0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf, + 0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958, + 0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305, + 0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d, + 0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338, + 0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370, + 0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d, + 0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca, + 0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0, + 0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b, + 0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083, + 0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb, + 0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012, + 0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a, + 0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b, + 0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0, + 0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea, + 0xe6064b26}}; + +#endif + +#endif + +#if N == 3 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, + 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, + 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, + 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, + 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, + 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, + 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, + 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, + 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, + 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, + 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, + 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, + 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, + 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, + 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, + 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, + 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, + 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, + 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, + 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, + 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, + 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, + 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, + 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, + 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, + 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, + 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, + 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, + 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, + 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, + 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, + 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, + 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, + 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, + 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, + 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, + 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, + 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, + 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, + 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, + 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, + 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, + 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, + 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, + 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, + 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, + 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, + 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, + 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, + 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, + 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, + 0x09cd8551}, + {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, + 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, + 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, + 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, + 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, + 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, + 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, + 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, + 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, + 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, + 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, + 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, + 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, + 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, + 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, + 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, + 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, + 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, + 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, + 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, + 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, + 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, + 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, + 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, + 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, + 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, + 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, + 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, + 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, + 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, + 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, + 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, + 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, + 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, + 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, + 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, + 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, + 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, + 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, + 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, + 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, + 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, + 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, + 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, + 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, + 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, + 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, + 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, + 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, + 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, + 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, + 0x7bc97a0c}, + {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, + 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, + 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, + 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, + 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, + 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, + 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, + 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, + 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, + 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, + 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, + 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, + 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, + 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, + 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, + 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, + 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, + 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, + 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, + 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, + 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, + 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, + 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, + 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, + 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, + 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, + 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, + 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, + 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, + 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, + 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, + 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, + 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, + 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, + 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, + 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, + 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, + 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, + 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, + 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, + 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, + 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, + 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, + 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, + 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, + 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, + 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, + 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, + 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, + 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, + 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, + 0x7851a2ca}, + {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, + 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, + 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, + 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, + 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, + 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, + 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, + 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, + 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, + 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, + 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, + 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, + 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, + 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, + 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, + 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, + 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, + 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, + 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, + 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, + 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, + 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, + 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, + 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, + 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, + 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, + 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, + 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, + 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, + 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, + 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, + 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, + 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, + 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, + 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, + 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, + 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, + 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, + 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, + 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, + 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, + 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, + 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, + 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, + 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, + 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, + 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, + 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, + 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, + 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, + 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, + 0x566b6848}, + {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, + 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, + 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, + 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, + 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, + 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, + 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, + 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, + 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, + 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, + 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, + 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, + 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, + 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, + 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, + 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, + 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, + 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, + 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, + 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, + 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, + 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, + 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, + 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, + 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, + 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, + 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, + 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, + 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, + 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, + 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, + 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, + 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, + 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, + 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, + 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, + 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, + 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, + 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, + 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, + 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, + 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, + 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, + 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, + 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, + 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, + 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, + 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, + 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, + 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, + 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, + 0xd8ac6b35}, + {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, + 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, + 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, + 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, + 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, + 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, + 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, + 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, + 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, + 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, + 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, + 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, + 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, + 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, + 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, + 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, + 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, + 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, + 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, + 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, + 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, + 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, + 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, + 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, + 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, + 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, + 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, + 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, + 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, + 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, + 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, + 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, + 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, + 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, + 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, + 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, + 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, + 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, + 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, + 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, + 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, + 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, + 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, + 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, + 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, + 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, + 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, + 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, + 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, + 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, + 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, + 0xa140efa8}, + {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, + 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, + 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, + 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, + 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, + 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, + 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, + 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, + 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, + 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, + 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, + 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, + 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, + 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, + 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, + 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, + 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, + 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, + 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, + 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, + 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, + 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, + 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, + 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, + 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, + 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, + 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, + 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, + 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, + 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, + 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, + 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, + 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, + 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, + 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, + 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, + 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, + 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, + 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, + 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, + 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, + 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, + 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, + 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, + 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, + 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, + 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, + 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, + 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, + 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, + 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, + 0x917cd6a1}, + {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, + 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, + 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, + 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, + 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, + 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, + 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, + 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, + 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, + 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, + 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, + 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, + 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, + 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, + 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, + 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, + 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, + 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, + 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, + 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, + 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, + 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, + 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, + 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, + 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, + 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, + 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, + 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, + 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, + 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, + 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, + 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, + 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, + 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, + 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, + 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, + 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, + 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, + 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, + 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, + 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, + 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, + 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, + 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, + 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, + 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, + 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, + 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, + 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, + 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, + 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, + 0x18ba364e}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000, + 0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000, + 0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000, + 0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000, + 0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000, + 0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000, + 0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000, + 0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000, + 0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000, + 0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000, + 0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000, + 0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000, + 0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000, + 0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000, + 0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000, + 0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000, + 0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000, + 0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000, + 0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000, + 0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000, + 0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000, + 0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000, + 0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000, + 0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000, + 0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000, + 0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000, + 0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000, + 0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000, + 0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000, + 0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000, + 0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000, + 0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000, + 0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000, + 0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000, + 0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000, + 0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000, + 0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000, + 0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000, + 0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000, + 0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000, + 0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000, + 0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000, + 0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000, + 0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000, + 0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000, + 0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000, + 0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000, + 0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000, + 0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000, + 0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000, + 0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000, + 0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000, + 0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000, + 0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000, + 0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000, + 0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000, + 0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000, + 0x08eda52100000000, 0x4391370100000000, 0x005a918600000000, + 0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000, + 0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000, + 0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000, + 0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000, + 0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000, + 0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000, + 0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000, + 0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000, + 0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000, + 0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000, + 0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000, + 0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000, + 0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000, + 0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000, + 0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000, + 0x7b23114500000000, 0x305f836500000000, 0x739425e200000000, + 0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000, + 0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000, + 0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000, + 0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000, + 0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000, + 0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000, + 0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000, + 0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000, + 0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000, + 0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000, + 0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000, + 0x4e36ba1800000000}, + {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000, + 0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000, + 0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000, + 0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000, + 0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000, + 0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000, + 0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000, + 0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000, + 0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000, + 0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000, + 0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000, + 0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000, + 0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000, + 0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000, + 0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000, + 0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000, + 0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000, + 0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000, + 0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000, + 0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000, + 0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000, + 0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000, + 0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000, + 0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000, + 0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000, + 0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000, + 0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000, + 0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000, + 0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000, + 0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000, + 0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000, + 0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000, + 0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000, + 0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000, + 0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000, + 0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000, + 0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000, + 0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000, + 0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000, + 0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000, + 0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000, + 0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000, + 0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000, + 0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000, + 0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000, + 0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000, + 0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000, + 0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000, + 0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000, + 0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000, + 0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000, + 0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000, + 0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000, + 0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000, + 0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000, + 0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000, + 0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000, + 0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000, + 0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000, + 0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000, + 0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000, + 0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000, + 0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000, + 0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000, + 0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000, + 0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000, + 0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000, + 0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000, + 0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000, + 0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000, + 0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000, + 0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000, + 0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000, + 0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000, + 0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000, + 0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000, + 0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000, + 0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000, + 0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000, + 0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000, + 0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000, + 0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000, + 0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000, + 0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000, + 0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000, + 0xa1d67c9100000000}, + {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000, + 0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000, + 0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000, + 0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000, + 0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000, + 0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000, + 0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000, + 0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000, + 0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000, + 0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000, + 0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000, + 0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000, + 0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000, + 0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000, + 0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000, + 0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000, + 0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000, + 0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000, + 0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000, + 0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000, + 0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000, + 0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000, + 0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000, + 0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000, + 0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000, + 0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000, + 0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000, + 0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000, + 0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000, + 0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000, + 0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000, + 0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000, + 0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000, + 0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000, + 0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000, + 0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000, + 0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000, + 0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000, + 0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000, + 0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000, + 0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000, + 0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000, + 0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000, + 0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000, + 0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000, + 0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000, + 0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000, + 0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000, + 0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000, + 0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000, + 0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000, + 0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000, + 0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000, + 0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000, + 0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000, + 0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000, + 0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000, + 0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000, + 0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000, + 0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000, + 0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000, + 0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000, + 0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000, + 0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000, + 0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000, + 0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000, + 0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000, + 0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000, + 0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000, + 0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000, + 0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000, + 0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000, + 0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000, + 0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000, + 0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000, + 0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000, + 0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000, + 0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000, + 0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000, + 0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000, + 0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000, + 0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000, + 0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000, + 0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000, + 0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000, + 0xa8ef40a100000000}, + {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000, + 0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000, + 0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000, + 0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000, + 0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000, + 0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000, + 0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000, + 0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000, + 0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000, + 0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000, + 0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000, + 0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000, + 0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000, + 0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000, + 0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000, + 0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000, + 0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000, + 0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000, + 0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000, + 0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000, + 0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000, + 0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000, + 0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000, + 0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000, + 0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000, + 0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000, + 0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000, + 0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000, + 0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000, + 0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000, + 0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000, + 0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000, + 0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000, + 0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000, + 0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000, + 0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000, + 0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000, + 0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000, + 0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000, + 0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000, + 0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000, + 0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000, + 0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000, + 0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000, + 0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000, + 0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000, + 0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000, + 0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000, + 0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000, + 0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000, + 0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000, + 0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000, + 0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000, + 0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000, + 0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000, + 0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000, + 0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000, + 0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000, + 0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000, + 0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000, + 0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000, + 0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000, + 0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000, + 0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000, + 0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000, + 0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000, + 0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000, + 0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000, + 0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000, + 0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000, + 0x933d017400000000, 0xd506661100000000, 0x46a022f000000000, + 0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000, + 0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000, + 0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000, + 0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000, + 0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000, + 0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000, + 0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000, + 0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000, + 0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000, + 0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000, + 0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000, + 0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000, + 0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000, + 0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000, + 0x356bacd800000000}, + {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000, + 0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000, + 0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000, + 0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000, + 0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000, + 0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000, + 0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000, + 0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000, + 0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000, + 0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000, + 0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000, + 0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000, + 0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000, + 0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000, + 0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000, + 0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000, + 0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000, + 0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000, + 0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000, + 0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000, + 0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000, + 0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000, + 0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000, + 0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000, + 0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000, + 0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000, + 0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000, + 0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000, + 0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000, + 0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000, + 0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000, + 0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000, + 0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000, + 0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000, + 0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000, + 0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000, + 0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000, + 0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000, + 0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000, + 0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000, + 0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000, + 0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000, + 0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000, + 0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000, + 0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000, + 0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000, + 0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000, + 0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000, + 0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000, + 0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000, + 0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000, + 0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000, + 0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000, + 0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000, + 0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000, + 0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000, + 0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000, + 0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000, + 0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000, + 0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000, + 0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000, + 0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000, + 0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000, + 0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000, + 0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000, + 0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000, + 0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000, + 0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000, + 0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000, + 0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000, + 0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000, + 0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000, + 0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000, + 0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000, + 0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000, + 0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000, + 0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000, + 0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000, + 0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000, + 0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000, + 0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000, + 0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000, + 0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000, + 0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000, + 0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000, + 0x48686b5600000000}, + {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000, + 0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000, + 0x805af17200000000, 0x403ed96500000000, 0x002643b900000000, + 0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000, + 0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000, + 0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000, + 0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000, + 0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000, + 0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000, + 0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000, + 0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000, + 0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000, + 0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000, + 0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000, + 0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000, + 0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000, + 0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000, + 0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000, + 0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000, + 0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000, + 0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000, + 0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000, + 0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000, + 0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000, + 0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000, + 0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000, + 0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000, + 0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000, + 0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000, + 0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000, + 0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000, + 0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000, + 0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000, + 0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000, + 0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000, + 0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000, + 0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000, + 0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000, + 0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000, + 0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000, + 0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000, + 0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000, + 0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000, + 0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000, + 0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000, + 0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000, + 0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000, + 0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000, + 0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000, + 0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000, + 0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000, + 0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000, + 0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000, + 0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000, + 0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000, + 0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000, + 0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000, + 0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000, + 0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000, + 0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000, + 0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000, + 0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000, + 0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000, + 0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000, + 0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000, + 0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000, + 0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000, + 0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000, + 0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000, + 0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000, + 0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000, + 0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000, + 0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000, + 0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000, + 0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000, + 0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000, + 0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000, + 0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000, + 0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000, + 0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000, + 0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000, + 0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000, + 0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000, + 0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000, + 0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000, + 0xcaa2517800000000}, + {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000, + 0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000, + 0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000, + 0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000, + 0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000, + 0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000, + 0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000, + 0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000, + 0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000, + 0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000, + 0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000, + 0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000, + 0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000, + 0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000, + 0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000, + 0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000, + 0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000, + 0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000, + 0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000, + 0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000, + 0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000, + 0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000, + 0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000, + 0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000, + 0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000, + 0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000, + 0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000, + 0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000, + 0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000, + 0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000, + 0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000, + 0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000, + 0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000, + 0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000, + 0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000, + 0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000, + 0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000, + 0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000, + 0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000, + 0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000, + 0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000, + 0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000, + 0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000, + 0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000, + 0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000, + 0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000, + 0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000, + 0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000, + 0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000, + 0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000, + 0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000, + 0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000, + 0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000, + 0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000, + 0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000, + 0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000, + 0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000, + 0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000, + 0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000, + 0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000, + 0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000, + 0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000, + 0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000, + 0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000, + 0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000, + 0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000, + 0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000, + 0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000, + 0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000, + 0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000, + 0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000, + 0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000, + 0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000, + 0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000, + 0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000, + 0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000, + 0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000, + 0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000, + 0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000, + 0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000, + 0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000, + 0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000, + 0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000, + 0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000, + 0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000, + 0x0c7ac97b00000000}, + {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000, + 0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000, + 0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000, + 0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000, + 0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000, + 0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000, + 0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000, + 0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000, + 0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000, + 0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000, + 0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000, + 0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000, + 0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000, + 0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000, + 0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000, + 0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000, + 0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000, + 0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000, + 0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000, + 0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000, + 0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000, + 0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000, + 0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000, + 0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000, + 0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000, + 0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000, + 0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000, + 0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000, + 0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000, + 0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000, + 0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000, + 0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000, + 0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000, + 0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000, + 0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000, + 0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000, + 0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000, + 0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000, + 0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000, + 0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000, + 0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000, + 0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000, + 0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000, + 0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000, + 0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000, + 0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000, + 0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000, + 0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000, + 0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000, + 0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000, + 0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000, + 0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000, + 0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000, + 0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000, + 0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000, + 0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000, + 0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000, + 0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000, + 0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000, + 0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000, + 0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000, + 0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000, + 0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000, + 0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000, + 0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000, + 0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000, + 0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000, + 0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000, + 0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000, + 0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000, + 0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000, + 0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000, + 0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000, + 0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000, + 0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000, + 0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000, + 0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000, + 0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000, + 0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000, + 0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000, + 0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000, + 0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000, + 0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000, + 0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000, + 0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000, + 0x5185cd0900000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, + 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, + 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, + 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, + 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, + 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, + 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, + 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, + 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, + 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, + 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, + 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, + 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, + 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, + 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, + 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, + 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, + 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, + 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, + 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, + 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, + 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, + 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, + 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, + 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, + 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, + 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, + 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, + 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, + 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, + 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, + 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, + 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, + 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, + 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, + 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, + 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, + 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, + 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, + 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, + 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, + 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, + 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, + 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, + 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, + 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, + 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, + 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, + 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, + 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, + 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, + 0x36197165}, + {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, + 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, + 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, + 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, + 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, + 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, + 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, + 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, + 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, + 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, + 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, + 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, + 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, + 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, + 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, + 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, + 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, + 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, + 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, + 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, + 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, + 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, + 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, + 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, + 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, + 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, + 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, + 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, + 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, + 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, + 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, + 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, + 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, + 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, + 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, + 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, + 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, + 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, + 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, + 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, + 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, + 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, + 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, + 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, + 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, + 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, + 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, + 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, + 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, + 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, + 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, + 0x1a3b93aa}, + {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, + 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, + 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, + 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, + 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, + 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, + 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, + 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, + 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, + 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, + 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, + 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, + 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, + 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, + 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, + 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, + 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, + 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, + 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, + 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, + 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, + 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, + 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, + 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, + 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, + 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, + 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, + 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, + 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, + 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, + 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, + 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, + 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, + 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, + 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, + 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, + 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, + 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, + 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, + 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, + 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, + 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, + 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, + 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, + 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, + 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, + 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, + 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, + 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, + 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, + 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, + 0xe147d714}, + {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, + 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, + 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, + 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, + 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, + 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, + 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, + 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, + 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, + 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, + 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, + 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, + 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, + 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, + 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, + 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, + 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, + 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, + 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, + 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, + 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, + 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, + 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, + 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, + 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, + 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, + 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, + 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, + 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, + 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, + 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, + 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, + 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, + 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, + 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, + 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, + 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, + 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, + 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, + 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, + 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, + 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, + 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, + 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, + 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, + 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, + 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, + 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, + 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, + 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, + 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, + 0x494f0c4b}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d, + 0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac, + 0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8, + 0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95, + 0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817, + 0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d, + 0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac, + 0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6, + 0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564, + 0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39, + 0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d, + 0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac, + 0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de, + 0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594, + 0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b, + 0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01, + 0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f, + 0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de, + 0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba, + 0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65, + 0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7, + 0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad, + 0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de, + 0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294, + 0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716, + 0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71, + 0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15, + 0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4, + 0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca, + 0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280, + 0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f, + 0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15, + 0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9, + 0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748, + 0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c, + 0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971, + 0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3, + 0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9, + 0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196, + 0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc, + 0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e, + 0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03, + 0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67, + 0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296, + 0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a, + 0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170, + 0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af, + 0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5, + 0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb, + 0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a, + 0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e, + 0x4b0c4f49}, + {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09, + 0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc, + 0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e, + 0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc, + 0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934, + 0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2, + 0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b, + 0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad, + 0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155, + 0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187, + 0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65, + 0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390, + 0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e, + 0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378, + 0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889, + 0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f, + 0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0, + 0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145, + 0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7, + 0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a, + 0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2, + 0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924, + 0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2, + 0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514, + 0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec, + 0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709, + 0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb, + 0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e, + 0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1, + 0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227, + 0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6, + 0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030, + 0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0, + 0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55, + 0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7, + 0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165, + 0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d, + 0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b, + 0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c, + 0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a, + 0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362, + 0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0, + 0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52, + 0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7, + 0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237, + 0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1, + 0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020, + 0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6, + 0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719, + 0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec, + 0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e, + 0x14d747e1}, + {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0, + 0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b, + 0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652, + 0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437, + 0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514, + 0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265, + 0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de, + 0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af, + 0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c, + 0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9, + 0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0, + 0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b, + 0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6, + 0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7, + 0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734, + 0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045, + 0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8, + 0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303, + 0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a, + 0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9, + 0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea, + 0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b, + 0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6, + 0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7, + 0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4, + 0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6, + 0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f, + 0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054, + 0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9, + 0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8, + 0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b, + 0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a, + 0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441, + 0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a, + 0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3, + 0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6, + 0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5, + 0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94, + 0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9, + 0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288, + 0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab, + 0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce, + 0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7, + 0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c, + 0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527, + 0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256, + 0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5, + 0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4, + 0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39, + 0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2, + 0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db, + 0xaa933b1a}, + {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603, + 0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d, + 0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9, + 0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b, + 0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a, + 0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792, + 0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4, + 0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c, + 0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d, + 0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f, + 0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb, + 0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65, + 0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330, + 0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8, + 0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da, + 0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742, + 0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f, + 0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1, + 0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5, + 0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f, + 0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e, + 0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6, + 0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8, + 0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250, + 0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021, + 0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb, + 0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f, + 0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511, + 0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c, + 0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4, + 0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886, + 0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e, + 0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b, + 0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5, + 0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791, + 0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003, + 0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272, + 0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea, + 0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc, + 0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24, + 0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55, + 0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7, + 0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3, + 0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d, + 0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548, + 0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0, + 0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2, + 0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a, + 0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47, + 0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9, + 0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad, + 0x65711936}}; + +#endif + +#endif + +#if N == 4 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a, + 0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe, + 0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b, + 0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656, + 0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd, + 0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d, + 0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7, + 0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47, + 0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac, + 0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691, + 0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404, + 0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0, + 0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4, + 0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424, + 0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5, + 0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65, + 0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67, + 0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3, + 0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626, + 0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9, + 0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222, + 0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2, + 0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a, + 0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a, + 0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1, + 0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2, + 0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077, + 0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3, + 0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1, + 0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621, + 0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0, + 0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60, + 0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0, + 0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64, + 0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1, + 0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc, + 0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027, + 0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7, + 0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9, + 0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79, + 0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292, + 0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af, + 0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a, + 0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee, + 0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e, + 0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe, + 0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f, + 0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff, + 0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd, + 0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29, + 0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc, + 0xe3c45916}, + {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344, + 0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59, + 0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e, + 0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463, + 0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98, + 0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d, + 0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3, + 0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656, + 0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad, + 0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0, + 0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397, + 0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a, + 0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2, + 0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357, + 0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8, + 0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d, + 0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696, + 0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b, + 0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc, + 0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0, + 0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b, + 0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be, + 0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811, + 0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384, + 0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f, + 0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955, + 0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362, + 0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f, + 0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94, + 0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701, + 0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe, + 0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b, + 0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1, + 0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc, + 0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b, + 0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986, + 0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d, + 0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8, + 0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4, + 0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371, + 0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a, + 0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87, + 0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0, + 0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad, + 0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527, + 0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2, + 0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d, + 0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998, + 0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73, + 0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e, + 0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59, + 0xa7520488}, + {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20, + 0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09, + 0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431, + 0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a, + 0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203, + 0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b, + 0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14, + 0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c, + 0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25, + 0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e, + 0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36, + 0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f, + 0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649, + 0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961, + 0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58, + 0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170, + 0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b, + 0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742, + 0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a, + 0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55, + 0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c, + 0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64, + 0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f, + 0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77, + 0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e, + 0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a, + 0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2, + 0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b, + 0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090, + 0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8, + 0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881, + 0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9, + 0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6, + 0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f, + 0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7, + 0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c, + 0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695, + 0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd, + 0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb, + 0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3, + 0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa, + 0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1, + 0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9, + 0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0, + 0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df, + 0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7, + 0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace, + 0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6, + 0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd, + 0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4, + 0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec, + 0x3522e9e4}, + {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1, + 0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86, + 0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b, + 0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669, + 0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7, + 0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352, + 0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03, + 0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6, + 0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38, + 0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a, + 0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7, + 0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80, + 0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7, + 0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522, + 0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d, + 0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8, + 0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103, + 0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54, + 0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9, + 0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0, + 0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e, + 0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb, + 0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1, + 0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624, + 0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea, + 0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a, + 0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37, + 0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360, + 0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab, + 0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e, + 0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741, + 0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4, + 0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334, + 0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63, + 0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de, + 0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c, + 0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942, + 0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7, + 0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131, + 0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4, + 0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a, + 0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758, + 0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5, + 0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2, + 0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32, + 0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7, + 0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8, + 0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d, + 0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6, + 0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1, + 0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c, + 0x97411e28}, + {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474, + 0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5, + 0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6, + 0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7, + 0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938, + 0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051, + 0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a, + 0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3, + 0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c, + 0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d, + 0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e, + 0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf, + 0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740, + 0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29, + 0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592, + 0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb, + 0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4, + 0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365, + 0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036, + 0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7, + 0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08, + 0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561, + 0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a, + 0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663, + 0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac, + 0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d, + 0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce, + 0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f, + 0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50, + 0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639, + 0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82, + 0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb, + 0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954, + 0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5, + 0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86, + 0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7, + 0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418, + 0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71, + 0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa, + 0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93, + 0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c, + 0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d, + 0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e, + 0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df, + 0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60, + 0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309, + 0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2, + 0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db, + 0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4, + 0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45, + 0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16, + 0x93c7a00b}, + {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45, + 0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb, + 0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d, + 0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696, + 0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf, + 0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb, + 0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028, + 0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c, + 0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65, + 0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be, + 0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038, + 0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6, + 0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15, + 0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11, + 0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d, + 0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19, + 0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05, + 0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b, + 0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d, + 0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c, + 0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35, + 0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31, + 0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068, + 0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c, + 0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25, + 0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a, + 0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac, + 0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22, + 0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e, + 0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a, + 0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36, + 0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32, + 0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84, + 0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a, + 0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c, + 0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057, + 0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e, + 0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a, + 0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc, + 0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8, + 0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1, + 0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a, + 0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec, + 0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62, + 0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4, + 0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0, + 0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc, + 0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8, + 0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4, + 0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a, + 0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc, + 0xce5f968d}, + {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de, + 0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b, + 0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d, + 0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680, + 0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4, + 0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d, + 0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde, + 0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97, + 0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3, + 0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e, + 0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678, + 0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d, + 0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723, + 0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a, + 0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0, + 0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9, + 0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85, + 0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770, + 0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56, + 0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a, + 0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e, + 0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67, + 0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785, + 0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc, + 0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788, + 0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90, + 0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6, + 0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843, + 0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f, + 0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336, + 0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac, + 0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5, + 0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68, + 0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d, + 0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb, + 0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36, + 0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72, + 0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b, + 0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b, + 0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402, + 0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446, + 0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb, + 0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed, + 0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418, + 0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95, + 0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc, + 0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946, + 0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f, + 0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233, + 0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6, + 0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0, + 0x3e721277}, + {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb, + 0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9, + 0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11, + 0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d, + 0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9, + 0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c, + 0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881, + 0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274, + 0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790, + 0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc, + 0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514, + 0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56, + 0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9, + 0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c, + 0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13, + 0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6, + 0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c, + 0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e, + 0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386, + 0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376, + 0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692, + 0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67, + 0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416, + 0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3, + 0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07, + 0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd, + 0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15, + 0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457, + 0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd, + 0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28, + 0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337, + 0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2, + 0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594, + 0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6, + 0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e, + 0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52, + 0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6, + 0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143, + 0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17, + 0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2, + 0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306, + 0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a, + 0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182, + 0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0, + 0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496, + 0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63, + 0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c, + 0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89, + 0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903, + 0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041, + 0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9, + 0x1c65ace7}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000, + 0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000, + 0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000, + 0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000, + 0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000, + 0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000, + 0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000, + 0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000, + 0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000, + 0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000, + 0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000, + 0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000, + 0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000, + 0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000, + 0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000, + 0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000, + 0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000, + 0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000, + 0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000, + 0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000, + 0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000, + 0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000, + 0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000, + 0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000, + 0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000, + 0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000, + 0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000, + 0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000, + 0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000, + 0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000, + 0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000, + 0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000, + 0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000, + 0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000, + 0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000, + 0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000, + 0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000, + 0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000, + 0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000, + 0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000, + 0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000, + 0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000, + 0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000, + 0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000, + 0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000, + 0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000, + 0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000, + 0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000, + 0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000, + 0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000, + 0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000, + 0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000, + 0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000, + 0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000, + 0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000, + 0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000, + 0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000, + 0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000, + 0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000, + 0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000, + 0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000, + 0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000, + 0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000, + 0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000, + 0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000, + 0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000, + 0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000, + 0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000, + 0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000, + 0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000, + 0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000, + 0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000, + 0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000, + 0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000, + 0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000, + 0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000, + 0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000, + 0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000, + 0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000, + 0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000, + 0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000, + 0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000, + 0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000, + 0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000, + 0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000, + 0xe7ac651c00000000}, + {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000, + 0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000, + 0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000, + 0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000, + 0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000, + 0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000, + 0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000, + 0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000, + 0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000, + 0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000, + 0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000, + 0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000, + 0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000, + 0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000, + 0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000, + 0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000, + 0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000, + 0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000, + 0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000, + 0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000, + 0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000, + 0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000, + 0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000, + 0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000, + 0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000, + 0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000, + 0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000, + 0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000, + 0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000, + 0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000, + 0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000, + 0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000, + 0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000, + 0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000, + 0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000, + 0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000, + 0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000, + 0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000, + 0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000, + 0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000, + 0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000, + 0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000, + 0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000, + 0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000, + 0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000, + 0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000, + 0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000, + 0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000, + 0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000, + 0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000, + 0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000, + 0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000, + 0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000, + 0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000, + 0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000, + 0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000, + 0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000, + 0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000, + 0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000, + 0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000, + 0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000, + 0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000, + 0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000, + 0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000, + 0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000, + 0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000, + 0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000, + 0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000, + 0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000, + 0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000, + 0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000, + 0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000, + 0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000, + 0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000, + 0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000, + 0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000, + 0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000, + 0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000, + 0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000, + 0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000, + 0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000, + 0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000, + 0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000, + 0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000, + 0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000, + 0x7712723e00000000}, + {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000, + 0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000, + 0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000, + 0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000, + 0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000, + 0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000, + 0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000, + 0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000, + 0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000, + 0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000, + 0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000, + 0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000, + 0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000, + 0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000, + 0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000, + 0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000, + 0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000, + 0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000, + 0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000, + 0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000, + 0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000, + 0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000, + 0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000, + 0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000, + 0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000, + 0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000, + 0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000, + 0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000, + 0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000, + 0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000, + 0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000, + 0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000, + 0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000, + 0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000, + 0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000, + 0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000, + 0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000, + 0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000, + 0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000, + 0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000, + 0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000, + 0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000, + 0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000, + 0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000, + 0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000, + 0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000, + 0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000, + 0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000, + 0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000, + 0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000, + 0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000, + 0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000, + 0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000, + 0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000, + 0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000, + 0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000, + 0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000, + 0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000, + 0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000, + 0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000, + 0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000, + 0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000, + 0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000, + 0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000, + 0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000, + 0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000, + 0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000, + 0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000, + 0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000, + 0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000, + 0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000, + 0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000, + 0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000, + 0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000, + 0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000, + 0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000, + 0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000, + 0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000, + 0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000, + 0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000, + 0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000, + 0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000, + 0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000, + 0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000, + 0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000, + 0x8d965fce00000000}, + {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000, + 0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000, + 0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000, + 0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000, + 0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000, + 0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000, + 0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000, + 0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000, + 0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000, + 0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000, + 0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000, + 0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000, + 0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000, + 0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000, + 0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000, + 0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000, + 0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000, + 0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000, + 0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000, + 0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000, + 0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000, + 0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000, + 0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000, + 0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000, + 0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000, + 0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000, + 0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000, + 0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000, + 0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000, + 0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000, + 0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000, + 0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000, + 0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000, + 0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000, + 0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000, + 0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000, + 0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000, + 0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000, + 0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000, + 0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000, + 0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000, + 0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000, + 0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000, + 0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000, + 0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000, + 0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000, + 0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000, + 0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000, + 0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000, + 0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000, + 0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000, + 0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000, + 0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000, + 0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000, + 0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000, + 0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000, + 0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000, + 0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000, + 0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000, + 0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000, + 0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000, + 0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000, + 0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000, + 0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000, + 0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000, + 0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000, + 0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000, + 0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000, + 0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000, + 0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000, + 0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000, + 0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000, + 0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000, + 0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000, + 0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000, + 0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000, + 0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000, + 0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000, + 0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000, + 0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000, + 0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000, + 0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000, + 0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000, + 0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000, + 0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000, + 0x0ba0c79300000000}, + {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000, + 0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000, + 0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000, + 0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000, + 0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000, + 0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000, + 0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000, + 0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000, + 0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000, + 0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000, + 0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000, + 0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000, + 0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000, + 0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000, + 0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000, + 0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000, + 0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000, + 0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000, + 0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000, + 0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000, + 0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000, + 0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000, + 0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000, + 0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000, + 0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000, + 0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000, + 0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000, + 0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000, + 0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000, + 0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000, + 0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000, + 0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000, + 0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000, + 0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000, + 0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000, + 0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000, + 0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000, + 0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000, + 0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000, + 0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000, + 0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000, + 0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000, + 0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000, + 0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000, + 0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000, + 0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000, + 0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000, + 0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000, + 0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000, + 0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000, + 0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000, + 0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000, + 0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000, + 0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000, + 0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000, + 0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000, + 0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000, + 0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000, + 0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000, + 0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000, + 0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000, + 0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000, + 0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000, + 0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000, + 0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000, + 0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000, + 0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000, + 0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000, + 0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000, + 0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000, + 0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000, + 0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000, + 0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000, + 0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000, + 0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000, + 0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000, + 0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000, + 0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000, + 0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000, + 0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000, + 0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000, + 0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000, + 0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000, + 0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000, + 0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000, + 0x281e419700000000}, + {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000, + 0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000, + 0x304a428900000000, 0x38a922b500000000, 0x011e763800000000, + 0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000, + 0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000, + 0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000, + 0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000, + 0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000, + 0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000, + 0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000, + 0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000, + 0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000, + 0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000, + 0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000, + 0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000, + 0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000, + 0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000, + 0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000, + 0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000, + 0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000, + 0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000, + 0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000, + 0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000, + 0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000, + 0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000, + 0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000, + 0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000, + 0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000, + 0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000, + 0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000, + 0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000, + 0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000, + 0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000, + 0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000, + 0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000, + 0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000, + 0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000, + 0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000, + 0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000, + 0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000, + 0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000, + 0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000, + 0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000, + 0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000, + 0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000, + 0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000, + 0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000, + 0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000, + 0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000, + 0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000, + 0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000, + 0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000, + 0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000, + 0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000, + 0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000, + 0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000, + 0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000, + 0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000, + 0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000, + 0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000, + 0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000, + 0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000, + 0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000, + 0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000, + 0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000, + 0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000, + 0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000, + 0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000, + 0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000, + 0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000, + 0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000, + 0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000, + 0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000, + 0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000, + 0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000, + 0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000, + 0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000, + 0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000, + 0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000, + 0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000, + 0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000, + 0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000, + 0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000, + 0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000, + 0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000, + 0xe4e9223500000000}, + {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000, + 0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000, + 0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000, + 0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000, + 0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000, + 0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000, + 0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000, + 0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000, + 0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000, + 0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000, + 0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000, + 0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000, + 0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000, + 0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000, + 0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000, + 0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000, + 0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000, + 0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000, + 0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000, + 0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000, + 0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000, + 0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000, + 0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000, + 0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000, + 0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000, + 0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000, + 0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000, + 0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000, + 0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000, + 0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000, + 0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000, + 0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000, + 0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000, + 0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000, + 0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000, + 0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000, + 0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000, + 0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000, + 0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000, + 0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000, + 0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000, + 0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000, + 0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000, + 0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000, + 0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000, + 0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000, + 0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000, + 0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000, + 0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000, + 0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000, + 0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000, + 0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000, + 0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000, + 0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000, + 0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000, + 0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000, + 0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000, + 0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000, + 0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000, + 0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000, + 0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000, + 0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000, + 0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000, + 0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000, + 0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000, + 0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000, + 0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000, + 0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000, + 0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000, + 0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000, + 0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000, + 0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000, + 0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000, + 0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000, + 0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000, + 0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000, + 0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000, + 0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000, + 0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000, + 0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000, + 0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000, + 0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000, + 0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000, + 0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000, + 0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000, + 0x880452a700000000}, + {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000, + 0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000, + 0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000, + 0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000, + 0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000, + 0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000, + 0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000, + 0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000, + 0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000, + 0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000, + 0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000, + 0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000, + 0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000, + 0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000, + 0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000, + 0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000, + 0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000, + 0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000, + 0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000, + 0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000, + 0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000, + 0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000, + 0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000, + 0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000, + 0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000, + 0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000, + 0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000, + 0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000, + 0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000, + 0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000, + 0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000, + 0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000, + 0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000, + 0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000, + 0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000, + 0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000, + 0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000, + 0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000, + 0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000, + 0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000, + 0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000, + 0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000, + 0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000, + 0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000, + 0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000, + 0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000, + 0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000, + 0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000, + 0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000, + 0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000, + 0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000, + 0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000, + 0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000, + 0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000, + 0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000, + 0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000, + 0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000, + 0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000, + 0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000, + 0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000, + 0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000, + 0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000, + 0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000, + 0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000, + 0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000, + 0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000, + 0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000, + 0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000, + 0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000, + 0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000, + 0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000, + 0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000, + 0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000, + 0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000, + 0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000, + 0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000, + 0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000, + 0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000, + 0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000, + 0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000, + 0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000, + 0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000, + 0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000, + 0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000, + 0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000, + 0x1659c4e300000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, + 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, + 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, + 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, + 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, + 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, + 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, + 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, + 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, + 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, + 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, + 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, + 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, + 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, + 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, + 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, + 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, + 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, + 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, + 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, + 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, + 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, + 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, + 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, + 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, + 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, + 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, + 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, + 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, + 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, + 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, + 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, + 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, + 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, + 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, + 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, + 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, + 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, + 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, + 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, + 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, + 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, + 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, + 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, + 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, + 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, + 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, + 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, + 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, + 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, + 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, + 0x0d7139d7}, + {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, + 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, + 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, + 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, + 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, + 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, + 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, + 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, + 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, + 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, + 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, + 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, + 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, + 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, + 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, + 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, + 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, + 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, + 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, + 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, + 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, + 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, + 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, + 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, + 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, + 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, + 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, + 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, + 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, + 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, + 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, + 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, + 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, + 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, + 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, + 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, + 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, + 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, + 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, + 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, + 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, + 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, + 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, + 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, + 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, + 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, + 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, + 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, + 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, + 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, + 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, + 0x1c53e98a}, + {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, + 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, + 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, + 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, + 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, + 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, + 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, + 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, + 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, + 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, + 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, + 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, + 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, + 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, + 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, + 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, + 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, + 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, + 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, + 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, + 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, + 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, + 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, + 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, + 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, + 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, + 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, + 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, + 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, + 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, + 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, + 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, + 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, + 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, + 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, + 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, + 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, + 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, + 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, + 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, + 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, + 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, + 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, + 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, + 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, + 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, + 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, + 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, + 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, + 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, + 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, + 0x3f88e851}, + {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, + 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, + 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, + 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, + 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, + 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, + 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, + 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, + 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, + 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, + 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, + 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, + 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, + 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, + 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, + 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, + 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, + 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, + 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, + 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, + 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, + 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, + 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, + 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, + 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, + 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, + 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, + 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, + 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, + 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, + 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, + 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, + 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, + 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, + 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, + 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, + 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, + 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, + 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, + 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, + 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, + 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, + 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, + 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, + 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, + 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, + 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, + 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, + 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, + 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, + 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, + 0x3dee8ca6}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0, + 0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587, + 0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa, + 0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09, + 0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee, + 0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3, + 0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3, + 0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce, + 0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429, + 0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda, + 0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7, + 0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0, + 0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd, + 0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0, + 0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287, + 0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a, + 0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9, + 0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e, + 0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3, + 0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3, + 0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054, + 0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49, + 0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da, + 0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7, + 0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20, + 0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d, + 0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00, + 0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347, + 0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14, + 0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209, + 0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e, + 0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33, + 0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3, + 0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194, + 0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9, + 0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a, + 0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd, + 0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0, + 0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d, + 0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460, + 0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87, + 0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674, + 0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509, + 0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e, + 0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae, + 0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3, + 0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694, + 0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989, + 0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da, + 0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d, + 0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0, + 0xa68cee3d}, + {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19, + 0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae, + 0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb, + 0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a, + 0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55, + 0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1, + 0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c, + 0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8, + 0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7, + 0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936, + 0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453, + 0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4, + 0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941, + 0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5, + 0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93, + 0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17, + 0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e, + 0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89, + 0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec, + 0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0, + 0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf, + 0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b, + 0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b, + 0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f, + 0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0, + 0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e, + 0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b, + 0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc, + 0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5, + 0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261, + 0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637, + 0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3, + 0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57, + 0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0, + 0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85, + 0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454, + 0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b, + 0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f, + 0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423, + 0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7, + 0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8, + 0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739, + 0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c, + 0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb, + 0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f, + 0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b, + 0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd, + 0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59, + 0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070, + 0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7, + 0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2, + 0x51e8883f}, + {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a, + 0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276, + 0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed, + 0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55, + 0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b, + 0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8, + 0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320, + 0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413, + 0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd, + 0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75, + 0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee, + 0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312, + 0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca, + 0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9, + 0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad, + 0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e, + 0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504, + 0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8, + 0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63, + 0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353, + 0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d, + 0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be, + 0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae, + 0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d, + 0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943, + 0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7, + 0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c, + 0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390, + 0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a, + 0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239, + 0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d, + 0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e, + 0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c, + 0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0, + 0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b, + 0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93, + 0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d, + 0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e, + 0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c, + 0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f, + 0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1, + 0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579, + 0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2, + 0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e, + 0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c, + 0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f, + 0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b, + 0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158, + 0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2, + 0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e, + 0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5, + 0x8ae9531c}, + {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4, + 0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd, + 0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220, + 0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf, + 0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495, + 0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def, + 0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90, + 0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea, + 0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0, + 0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f, + 0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2, + 0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab, + 0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e, + 0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754, + 0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda, + 0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0, + 0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c, + 0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215, + 0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8, + 0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910, + 0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a, + 0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30, + 0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658, + 0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22, + 0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478, + 0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2, + 0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f, + 0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606, + 0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba, + 0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0, + 0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e, + 0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034, + 0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f, + 0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996, + 0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b, + 0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84, + 0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de, + 0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4, + 0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5, + 0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f, + 0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5, + 0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a, + 0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7, + 0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce, + 0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65, + 0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f, + 0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91, + 0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb, + 0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57, + 0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e, + 0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3, + 0xd739710d}}; + +#endif + +#endif + +#if N == 5 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df, + 0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8, + 0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef, + 0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376, + 0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201, + 0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399, + 0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372, + 0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea, + 0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d, + 0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004, + 0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353, + 0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334, + 0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a, + 0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2, + 0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a, + 0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2, + 0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b, + 0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c, + 0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b, + 0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f, + 0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338, + 0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0, + 0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6, + 0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e, + 0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319, + 0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3, + 0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4, + 0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783, + 0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a, + 0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492, + 0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a, + 0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2, + 0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496, + 0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1, + 0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6, + 0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f, + 0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548, + 0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0, + 0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741, + 0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9, + 0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae, + 0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437, + 0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760, + 0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707, + 0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433, + 0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab, + 0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703, + 0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b, + 0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412, + 0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475, + 0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722, + 0xe9947565}, + {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5, + 0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22, + 0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c, + 0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed, + 0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d, + 0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1, + 0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e, + 0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32, + 0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142, + 0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93, + 0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d, + 0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a, + 0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58, + 0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14, + 0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81, + 0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd, + 0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab, + 0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c, + 0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72, + 0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f, + 0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff, + 0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3, + 0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30, + 0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c, + 0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c, + 0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558, + 0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146, + 0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581, + 0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7, + 0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab, + 0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e, + 0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272, + 0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838, + 0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff, + 0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1, + 0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330, + 0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840, + 0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c, + 0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb, + 0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7, + 0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7, + 0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616, + 0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208, + 0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf, + 0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85, + 0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9, + 0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c, + 0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10, + 0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76, + 0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1, + 0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf, + 0xf7d05006}, + {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b, + 0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774, + 0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58, + 0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a, + 0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb, + 0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952, + 0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e, + 0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7, + 0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746, + 0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14, + 0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338, + 0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907, + 0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777, + 0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de, + 0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064, + 0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd, + 0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951, + 0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e, + 0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42, + 0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b, + 0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a, + 0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3, + 0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904, + 0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad, + 0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c, + 0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d, + 0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861, + 0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e, + 0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2, + 0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b, + 0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1, + 0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78, + 0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f, + 0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40, + 0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c, + 0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e, + 0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf, + 0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166, + 0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d, + 0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4, + 0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805, + 0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157, + 0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b, + 0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644, + 0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43, + 0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea, + 0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850, + 0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9, + 0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165, + 0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a, + 0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676, + 0xb2075b94}, + {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf, + 0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61, + 0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be, + 0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd, + 0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3, + 0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063, + 0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105, + 0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5, + 0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb, + 0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8, + 0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07, + 0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9, + 0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5, + 0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515, + 0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4, + 0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014, + 0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7, + 0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269, + 0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6, + 0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af, + 0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1, + 0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111, + 0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d, + 0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad, + 0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3, + 0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75, + 0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa, + 0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74, + 0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7, + 0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477, + 0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6, + 0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176, + 0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af, + 0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71, + 0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae, + 0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd, + 0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3, + 0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073, + 0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0, + 0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400, + 0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e, + 0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d, + 0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2, + 0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c, + 0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5, + 0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505, + 0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4, + 0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004, + 0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7, + 0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279, + 0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6, + 0xba50bcb9}, + {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897, + 0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb, + 0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2, + 0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2, + 0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372, + 0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70, + 0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92, + 0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190, + 0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40, + 0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430, + 0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759, + 0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75, + 0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2, + 0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0, + 0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7, + 0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5, + 0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39, + 0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215, + 0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c, + 0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5, + 0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625, + 0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27, + 0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c, + 0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e, + 0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee, + 0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71, + 0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18, + 0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134, + 0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8, + 0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba, + 0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd, + 0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff, + 0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a, + 0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6, + 0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf, + 0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf, + 0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f, + 0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d, + 0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d, + 0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f, + 0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af, + 0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df, + 0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6, + 0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a, + 0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef, + 0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed, + 0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa, + 0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8, + 0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624, + 0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08, + 0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861, + 0x808abcf4}, + {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2, + 0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd, + 0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76, + 0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52, + 0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e, + 0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124, + 0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147, + 0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d, + 0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31, + 0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15, + 0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae, + 0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1, + 0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d, + 0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307, + 0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9, + 0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3, + 0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084, + 0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb, + 0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850, + 0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2, + 0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe, + 0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94, + 0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261, + 0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b, + 0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917, + 0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53, + 0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8, + 0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787, + 0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0, + 0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba, + 0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404, + 0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e, + 0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af, + 0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0, + 0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b, + 0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f, + 0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543, + 0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129, + 0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627, + 0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d, + 0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51, + 0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75, + 0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce, + 0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1, + 0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760, + 0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a, + 0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4, + 0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde, + 0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089, + 0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6, + 0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d, + 0xefdb3f95}, + {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8, + 0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7, + 0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945, + 0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9, + 0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652, + 0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc, + 0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a, + 0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4, + 0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f, + 0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3, + 0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51, + 0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e, + 0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c, + 0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362, + 0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11, + 0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff, + 0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7, + 0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8, + 0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a, + 0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690, + 0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b, + 0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5, + 0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05, + 0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb, + 0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740, + 0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f, + 0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded, + 0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2, + 0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa, + 0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714, + 0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67, + 0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89, + 0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7, + 0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8, + 0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a, + 0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6, + 0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d, + 0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3, + 0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9, + 0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57, + 0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc, + 0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540, + 0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2, + 0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd, + 0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93, + 0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d, + 0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e, + 0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0, + 0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8, + 0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7, + 0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75, + 0x0e2fbf43}, + {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc, + 0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a, + 0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3, + 0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7, + 0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b, + 0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154, + 0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3, + 0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc, + 0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330, + 0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264, + 0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd, + 0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b, + 0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a, + 0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175, + 0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275, + 0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a, + 0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234, + 0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2, + 0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b, + 0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a, + 0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6, + 0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189, + 0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b, + 0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204, + 0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8, + 0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226, + 0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff, + 0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219, + 0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167, + 0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258, + 0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158, + 0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267, + 0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c, + 0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da, + 0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003, + 0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157, + 0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b, + 0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4, + 0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179, + 0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246, + 0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a, + 0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de, + 0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107, + 0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1, + 0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba, + 0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285, + 0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185, + 0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba, + 0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4, + 0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322, + 0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb, + 0xf4377108}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000, + 0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000, + 0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000, + 0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000, + 0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000, + 0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000, + 0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000, + 0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000, + 0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000, + 0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000, + 0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000, + 0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000, + 0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000, + 0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000, + 0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000, + 0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000, + 0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000, + 0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000, + 0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000, + 0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000, + 0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000, + 0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000, + 0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000, + 0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000, + 0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000, + 0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000, + 0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000, + 0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000, + 0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000, + 0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000, + 0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000, + 0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000, + 0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000, + 0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000, + 0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000, + 0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000, + 0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000, + 0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000, + 0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000, + 0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000, + 0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000, + 0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000, + 0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000, + 0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000, + 0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000, + 0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000, + 0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000, + 0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000, + 0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000, + 0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000, + 0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000, + 0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000, + 0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000, + 0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000, + 0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000, + 0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000, + 0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000, + 0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000, + 0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000, + 0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000, + 0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000, + 0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000, + 0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000, + 0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000, + 0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000, + 0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000, + 0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000, + 0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000, + 0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000, + 0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000, + 0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000, + 0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000, + 0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000, + 0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000, + 0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000, + 0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000, + 0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000, + 0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000, + 0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000, + 0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000, + 0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000, + 0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000, + 0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000, + 0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000, + 0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000, + 0x087137f400000000}, + {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000, + 0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000, + 0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000, + 0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000, + 0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000, + 0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000, + 0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000, + 0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000, + 0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000, + 0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000, + 0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000, + 0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000, + 0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000, + 0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000, + 0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000, + 0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000, + 0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000, + 0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000, + 0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000, + 0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000, + 0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000, + 0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000, + 0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000, + 0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000, + 0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000, + 0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000, + 0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000, + 0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000, + 0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000, + 0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000, + 0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000, + 0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000, + 0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000, + 0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000, + 0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000, + 0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000, + 0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000, + 0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000, + 0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000, + 0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000, + 0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000, + 0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000, + 0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000, + 0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000, + 0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000, + 0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000, + 0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000, + 0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000, + 0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000, + 0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000, + 0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000, + 0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000, + 0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000, + 0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000, + 0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000, + 0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000, + 0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000, + 0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000, + 0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000, + 0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000, + 0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000, + 0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000, + 0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000, + 0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000, + 0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000, + 0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000, + 0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000, + 0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000, + 0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000, + 0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000, + 0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000, + 0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000, + 0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000, + 0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000, + 0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000, + 0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000, + 0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000, + 0x1129fad400000000, 0x621116d400000000, 0x544094f000000000, + 0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000, + 0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000, + 0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000, + 0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000, + 0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000, + 0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000, + 0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000, + 0x43bf2f0e00000000}, + {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000, + 0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000, + 0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000, + 0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000, + 0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000, + 0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000, + 0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000, + 0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000, + 0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000, + 0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000, + 0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000, + 0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000, + 0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000, + 0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000, + 0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000, + 0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000, + 0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000, + 0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000, + 0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000, + 0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000, + 0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000, + 0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000, + 0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000, + 0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000, + 0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000, + 0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000, + 0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000, + 0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000, + 0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000, + 0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000, + 0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000, + 0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000, + 0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000, + 0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000, + 0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000, + 0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000, + 0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000, + 0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000, + 0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000, + 0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000, + 0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000, + 0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000, + 0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000, + 0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000, + 0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000, + 0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000, + 0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000, + 0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000, + 0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000, + 0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000, + 0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000, + 0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000, + 0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000, + 0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000, + 0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000, + 0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000, + 0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000, + 0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000, + 0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000, + 0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000, + 0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000, + 0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000, + 0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000, + 0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000, + 0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000, + 0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000, + 0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000, + 0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000, + 0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000, + 0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000, + 0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000, + 0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000, + 0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000, + 0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000, + 0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000, + 0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000, + 0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000, + 0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000, + 0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000, + 0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000, + 0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000, + 0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000, + 0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000, + 0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000, + 0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000, + 0x953fdbef00000000}, + {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000, + 0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000, + 0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000, + 0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000, + 0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000, + 0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000, + 0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000, + 0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000, + 0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000, + 0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000, + 0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000, + 0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000, + 0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000, + 0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000, + 0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000, + 0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000, + 0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000, + 0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000, + 0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000, + 0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000, + 0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000, + 0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000, + 0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000, + 0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000, + 0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000, + 0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000, + 0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000, + 0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000, + 0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000, + 0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000, + 0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000, + 0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000, + 0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000, + 0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000, + 0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000, + 0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000, + 0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000, + 0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000, + 0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000, + 0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000, + 0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000, + 0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000, + 0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000, + 0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000, + 0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000, + 0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000, + 0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000, + 0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000, + 0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000, + 0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000, + 0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000, + 0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000, + 0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000, + 0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000, + 0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000, + 0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000, + 0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000, + 0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000, + 0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000, + 0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000, + 0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000, + 0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000, + 0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000, + 0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000, + 0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000, + 0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000, + 0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000, + 0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000, + 0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000, + 0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000, + 0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000, + 0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000, + 0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000, + 0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000, + 0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000, + 0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000, + 0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000, + 0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000, + 0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000, + 0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000, + 0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000, + 0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000, + 0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000, + 0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000, + 0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000, + 0xf4bc8a8000000000}, + {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000, + 0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000, + 0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000, + 0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000, + 0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000, + 0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000, + 0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000, + 0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000, + 0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000, + 0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000, + 0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000, + 0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000, + 0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000, + 0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000, + 0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000, + 0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000, + 0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000, + 0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000, + 0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000, + 0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000, + 0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000, + 0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000, + 0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000, + 0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000, + 0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000, + 0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000, + 0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000, + 0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000, + 0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000, + 0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000, + 0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000, + 0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000, + 0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000, + 0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000, + 0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000, + 0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000, + 0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000, + 0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000, + 0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000, + 0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000, + 0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000, + 0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000, + 0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000, + 0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000, + 0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000, + 0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000, + 0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000, + 0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000, + 0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000, + 0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000, + 0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000, + 0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000, + 0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000, + 0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000, + 0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000, + 0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000, + 0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000, + 0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000, + 0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000, + 0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000, + 0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000, + 0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000, + 0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000, + 0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000, + 0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000, + 0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000, + 0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000, + 0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000, + 0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000, + 0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000, + 0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000, + 0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000, + 0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000, + 0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000, + 0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000, + 0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000, + 0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000, + 0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000, + 0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000, + 0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000, + 0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000, + 0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000, + 0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000, + 0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000, + 0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000, + 0xb9bc50ba00000000}, + {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000, + 0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000, + 0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000, + 0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000, + 0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000, + 0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000, + 0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000, + 0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000, + 0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000, + 0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000, + 0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000, + 0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000, + 0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000, + 0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000, + 0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000, + 0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000, + 0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000, + 0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000, + 0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000, + 0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000, + 0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000, + 0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000, + 0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000, + 0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000, + 0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000, + 0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000, + 0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000, + 0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000, + 0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000, + 0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000, + 0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000, + 0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000, + 0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000, + 0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000, + 0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000, + 0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000, + 0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000, + 0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000, + 0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000, + 0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000, + 0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000, + 0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000, + 0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000, + 0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000, + 0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000, + 0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000, + 0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000, + 0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000, + 0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000, + 0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000, + 0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000, + 0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000, + 0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000, + 0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000, + 0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000, + 0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000, + 0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000, + 0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000, + 0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000, + 0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000, + 0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000, + 0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000, + 0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000, + 0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000, + 0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000, + 0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000, + 0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000, + 0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000, + 0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000, + 0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000, + 0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000, + 0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000, + 0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000, + 0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000, + 0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000, + 0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000, + 0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000, + 0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000, + 0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000, + 0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000, + 0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000, + 0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000, + 0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000, + 0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000, + 0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000, + 0x945b07b200000000}, + {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000, + 0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000, + 0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000, + 0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000, + 0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000, + 0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000, + 0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000, + 0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000, + 0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000, + 0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000, + 0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000, + 0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000, + 0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000, + 0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000, + 0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000, + 0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000, + 0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000, + 0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000, + 0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000, + 0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000, + 0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000, + 0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000, + 0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000, + 0x149f066100000000, 0xef839db200000000, 0x468814fc00000000, + 0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000, + 0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000, + 0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000, + 0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000, + 0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000, + 0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000, + 0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000, + 0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000, + 0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000, + 0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000, + 0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000, + 0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000, + 0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000, + 0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000, + 0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000, + 0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000, + 0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000, + 0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000, + 0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000, + 0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000, + 0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000, + 0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000, + 0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000, + 0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000, + 0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000, + 0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000, + 0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000, + 0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000, + 0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000, + 0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000, + 0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000, + 0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000, + 0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000, + 0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000, + 0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000, + 0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000, + 0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000, + 0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000, + 0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000, + 0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000, + 0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000, + 0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000, + 0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000, + 0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000, + 0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000, + 0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000, + 0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000, + 0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000, + 0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000, + 0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000, + 0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000, + 0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000, + 0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000, + 0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000, + 0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000, + 0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000, + 0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000, + 0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000, + 0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000, + 0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000, + 0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000, + 0x0650d0f700000000}, + {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000, + 0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000, + 0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000, + 0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000, + 0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000, + 0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000, + 0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000, + 0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000, + 0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000, + 0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000, + 0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000, + 0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000, + 0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000, + 0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000, + 0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000, + 0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000, + 0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000, + 0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000, + 0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000, + 0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000, + 0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000, + 0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000, + 0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000, + 0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000, + 0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000, + 0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000, + 0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000, + 0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000, + 0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000, + 0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000, + 0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000, + 0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000, + 0xc702c15700000000, 0x809085f800000000, 0x082039d200000000, + 0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000, + 0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000, + 0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000, + 0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000, + 0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000, + 0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000, + 0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000, + 0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000, + 0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000, + 0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000, + 0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000, + 0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000, + 0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000, + 0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000, + 0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000, + 0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000, + 0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000, + 0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000, + 0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000, + 0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000, + 0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000, + 0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000, + 0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000, + 0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000, + 0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000, + 0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000, + 0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000, + 0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000, + 0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000, + 0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000, + 0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000, + 0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000, + 0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000, + 0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000, + 0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000, + 0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000, + 0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000, + 0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000, + 0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000, + 0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000, + 0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000, + 0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000, + 0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000, + 0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000, + 0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000, + 0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000, + 0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000, + 0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000, + 0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000, + 0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000, + 0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000, + 0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000, + 0x657594e900000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, + 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, + 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, + 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, + 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, + 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, + 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, + 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, + 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, + 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, + 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, + 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, + 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, + 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, + 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, + 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, + 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, + 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, + 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, + 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, + 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, + 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, + 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, + 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, + 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, + 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, + 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, + 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, + 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, + 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, + 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, + 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, + 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, + 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, + 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, + 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, + 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, + 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, + 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, + 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, + 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, + 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, + 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, + 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, + 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, + 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, + 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, + 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, + 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, + 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, + 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, + 0xd8ac6b35}, + {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, + 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, + 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, + 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, + 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, + 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, + 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, + 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, + 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, + 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, + 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, + 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, + 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, + 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, + 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, + 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, + 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, + 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, + 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, + 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, + 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, + 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, + 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, + 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, + 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, + 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, + 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, + 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, + 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, + 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, + 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, + 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, + 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, + 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, + 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, + 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, + 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, + 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, + 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, + 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, + 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, + 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, + 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, + 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, + 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, + 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, + 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, + 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, + 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, + 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, + 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, + 0xa140efa8}, + {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, + 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, + 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, + 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, + 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, + 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, + 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, + 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, + 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, + 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, + 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, + 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, + 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, + 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, + 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, + 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, + 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, + 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, + 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, + 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, + 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, + 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, + 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, + 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, + 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, + 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, + 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, + 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, + 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, + 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, + 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, + 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, + 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, + 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, + 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, + 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, + 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, + 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, + 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, + 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, + 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, + 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, + 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, + 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, + 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, + 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, + 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, + 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, + 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, + 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, + 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, + 0x917cd6a1}, + {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, + 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, + 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, + 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, + 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, + 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, + 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, + 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, + 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, + 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, + 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, + 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, + 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, + 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, + 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, + 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, + 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, + 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, + 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, + 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, + 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, + 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, + 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, + 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, + 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, + 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, + 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, + 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, + 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, + 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, + 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, + 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, + 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, + 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, + 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, + 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, + 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, + 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, + 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, + 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, + 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, + 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, + 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, + 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, + 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, + 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, + 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, + 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, + 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, + 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, + 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, + 0x18ba364e}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873, + 0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661, + 0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441, + 0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44, + 0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1, + 0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05, + 0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa, + 0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e, + 0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb, + 0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be, + 0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e, + 0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c, + 0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d, + 0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9, + 0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f, + 0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b, + 0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39, + 0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b, + 0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b, + 0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20, + 0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595, + 0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61, + 0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0, + 0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644, + 0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1, + 0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d, + 0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d, + 0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f, + 0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad, + 0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359, + 0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f, + 0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b, + 0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7, + 0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5, + 0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5, + 0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0, + 0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65, + 0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091, + 0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633, + 0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7, + 0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272, + 0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77, + 0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57, + 0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145, + 0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9, + 0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d, + 0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb, + 0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f, + 0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad, + 0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf, + 0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f, + 0x4e36ba18}, + {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b, + 0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8, + 0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19, + 0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4, + 0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239, + 0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd, + 0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258, + 0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc, + 0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41, + 0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c, + 0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d, + 0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e, + 0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba, + 0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e, + 0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8, + 0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c, + 0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f, + 0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c, + 0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d, + 0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d, + 0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0, + 0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014, + 0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc, + 0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628, + 0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5, + 0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941, + 0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0, + 0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53, + 0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880, + 0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264, + 0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92, + 0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776, + 0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8, + 0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b, + 0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea, + 0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837, + 0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca, + 0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e, + 0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211, + 0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5, + 0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08, + 0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5, + 0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934, + 0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7, + 0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049, + 0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad, + 0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b, + 0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf, + 0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c, + 0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f, + 0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e, + 0xa1d67c91}, + {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9, + 0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de, + 0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94, + 0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0, + 0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a, + 0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924, + 0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052, + 0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c, + 0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6, + 0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2, + 0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8, + 0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f, + 0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d, + 0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273, + 0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30, + 0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e, + 0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7, + 0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980, + 0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca, + 0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8, + 0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62, + 0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c, + 0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c, + 0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032, + 0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798, + 0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d, + 0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07, + 0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630, + 0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389, + 0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7, + 0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4, + 0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca, + 0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55, + 0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662, + 0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828, + 0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c, + 0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6, + 0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98, + 0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3, + 0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d, + 0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037, + 0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913, + 0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759, + 0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e, + 0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1, + 0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf, + 0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c, + 0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2, + 0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b, + 0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c, + 0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276, + 0xa8ef40a1}, + {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e, + 0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8, + 0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819, + 0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f, + 0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d, + 0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756, + 0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0, + 0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb, + 0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9, + 0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f, + 0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e, + 0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8, + 0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835, + 0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e, + 0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62, + 0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749, + 0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b, + 0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d, + 0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc, + 0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80, + 0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2, + 0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599, + 0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05, + 0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e, + 0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c, + 0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e, + 0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef, + 0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359, + 0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b, + 0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0, + 0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc, + 0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7, + 0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f, + 0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189, + 0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568, + 0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e, + 0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c, + 0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27, + 0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794, + 0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf, + 0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d, + 0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db, + 0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a, + 0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c, + 0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544, + 0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f, + 0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013, + 0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38, + 0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea, + 0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c, + 0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd, + 0x356bacd8}}; + +#endif + +#endif + +#if N == 6 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370, + 0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d, + 0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69, + 0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426, + 0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3, + 0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f, + 0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c, + 0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490, + 0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155, + 0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a, + 0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e, + 0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603, + 0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349, + 0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5, + 0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50, + 0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc, + 0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b, + 0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76, + 0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862, + 0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9, + 0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c, + 0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0, + 0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937, + 0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b, + 0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e, + 0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e, + 0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a, + 0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357, + 0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0, + 0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c, + 0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9, + 0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165, + 0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766, + 0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b, + 0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f, + 0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030, + 0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5, + 0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59, + 0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63, + 0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf, + 0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a, + 0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845, + 0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51, + 0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c, + 0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f, + 0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3, + 0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46, + 0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea, + 0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d, + 0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60, + 0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74, + 0x8568a0a8}, + {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5, + 0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf, + 0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5, + 0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba, + 0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf, + 0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f, + 0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0, + 0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450, + 0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55, + 0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a, + 0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620, + 0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a, + 0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454, + 0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4, + 0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534, + 0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584, + 0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694, + 0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e, + 0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4, + 0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1, + 0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4, + 0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164, + 0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1, + 0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911, + 0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314, + 0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c, + 0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6, + 0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec, + 0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc, + 0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c, + 0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c, + 0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c, + 0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716, + 0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c, + 0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676, + 0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879, + 0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c, + 0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc, + 0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77, + 0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7, + 0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2, + 0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd, + 0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7, + 0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad, + 0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897, + 0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827, + 0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7, + 0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947, + 0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57, + 0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d, + 0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37, + 0x0d907052}, + {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d, + 0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89, + 0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31, + 0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81, + 0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e, + 0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0, + 0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f, + 0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291, + 0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e, + 0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e, + 0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936, + 0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2, + 0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13, + 0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d, + 0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f, + 0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1, + 0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a, + 0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae, + 0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516, + 0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f, + 0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20, + 0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe, + 0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28, + 0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6, + 0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419, + 0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5, + 0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d, + 0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889, + 0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412, + 0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c, + 0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e, + 0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0, + 0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02, + 0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986, + 0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e, + 0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e, + 0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221, + 0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf, + 0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913, + 0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d, + 0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622, + 0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592, + 0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a, + 0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae, + 0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c, + 0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82, + 0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20, + 0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe, + 0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025, + 0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1, + 0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719, + 0xfd1a6c8a}, + {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3, + 0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb, + 0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d, + 0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb, + 0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9, + 0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156, + 0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045, + 0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa, + 0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8, + 0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e, + 0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8, + 0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0, + 0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38, + 0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87, + 0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46, + 0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9, + 0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585, + 0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d, + 0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb, + 0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531, + 0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03, + 0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc, + 0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33, + 0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c, + 0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be, + 0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d, + 0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b, + 0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303, + 0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f, + 0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0, + 0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801, + 0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe, + 0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e, + 0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346, + 0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620, + 0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776, + 0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844, + 0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb, + 0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0, + 0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f, + 0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d, + 0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b, + 0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d, + 0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75, + 0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795, + 0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a, + 0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb, + 0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354, + 0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28, + 0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30, + 0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856, + 0x7895f01a}, + {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188, + 0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33, + 0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d, + 0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445, + 0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2, + 0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058, + 0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43, + 0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9, + 0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e, + 0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06, + 0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228, + 0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93, + 0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e, + 0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4, + 0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b, + 0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371, + 0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265, + 0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede, + 0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0, + 0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f, + 0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8, + 0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32, + 0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae, + 0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544, + 0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3, + 0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f, + 0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911, + 0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa, + 0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be, + 0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54, + 0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b, + 0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1, + 0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652, + 0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9, + 0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7, + 0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f, + 0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68, + 0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782, + 0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797, + 0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d, + 0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a, + 0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2, + 0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc, + 0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647, + 0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4, + 0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e, + 0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41, + 0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab, + 0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf, + 0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904, + 0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a, + 0x9239b848}, + {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad, + 0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0, + 0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40, + 0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b, + 0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d, + 0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b, + 0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb, + 0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d, + 0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b, + 0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0, + 0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840, + 0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d, + 0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b, + 0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d, + 0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6, + 0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0, + 0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580, + 0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd, + 0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d, + 0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b, + 0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d, + 0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b, + 0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6, + 0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0, + 0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6, + 0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c, + 0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c, + 0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461, + 0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841, + 0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317, + 0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac, + 0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa, + 0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7, + 0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba, + 0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a, + 0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161, + 0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777, + 0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21, + 0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a, + 0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc, + 0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da, + 0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1, + 0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01, + 0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c, + 0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241, + 0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917, + 0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac, + 0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa, + 0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da, + 0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397, + 0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537, + 0xeb36d3cc}, + {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b, + 0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059, + 0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251, + 0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d, + 0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9, + 0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c, + 0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41, + 0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4, + 0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10, + 0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c, + 0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54, + 0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476, + 0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8, + 0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d, + 0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92, + 0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307, + 0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad, + 0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f, + 0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87, + 0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17, + 0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3, + 0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46, + 0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197, + 0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02, + 0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6, + 0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e, + 0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96, + 0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4, + 0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e, + 0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b, + 0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934, + 0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1, + 0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7, + 0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5, + 0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd, + 0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1, + 0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475, + 0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0, + 0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155, + 0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0, + 0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304, + 0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348, + 0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140, + 0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862, + 0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14, + 0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181, + 0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e, + 0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab, + 0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01, + 0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523, + 0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b, + 0x38e5f3c5}, + {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06, + 0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad, + 0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509, + 0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba, + 0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414, + 0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3, + 0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733, + 0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994, + 0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a, + 0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889, + 0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d, + 0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386, + 0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621, + 0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886, + 0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e, + 0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389, + 0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f, + 0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294, + 0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30, + 0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3, + 0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d, + 0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba, + 0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a, + 0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad, + 0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03, + 0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2, + 0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306, + 0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad, + 0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b, + 0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc, + 0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914, + 0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3, + 0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435, + 0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e, + 0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a, + 0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589, + 0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27, + 0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080, + 0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21, + 0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586, + 0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28, + 0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b, + 0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f, + 0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94, + 0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12, + 0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5, + 0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d, + 0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba, + 0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c, + 0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7, + 0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103, + 0x3d3101a2}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000, + 0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000, + 0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000, + 0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000, + 0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000, + 0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000, + 0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000, + 0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000, + 0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000, + 0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000, + 0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000, + 0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000, + 0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000, + 0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000, + 0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000, + 0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000, + 0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000, + 0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000, + 0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000, + 0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000, + 0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000, + 0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000, + 0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000, + 0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000, + 0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000, + 0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000, + 0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000, + 0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000, + 0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000, + 0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000, + 0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000, + 0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000, + 0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000, + 0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000, + 0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000, + 0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000, + 0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000, + 0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000, + 0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000, + 0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000, + 0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000, + 0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000, + 0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000, + 0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000, + 0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000, + 0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000, + 0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000, + 0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000, + 0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000, + 0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000, + 0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000, + 0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000, + 0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000, + 0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000, + 0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000, + 0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000, + 0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000, + 0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000, + 0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000, + 0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000, + 0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000, + 0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000, + 0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000, + 0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000, + 0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000, + 0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000, + 0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000, + 0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000, + 0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000, + 0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000, + 0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000, + 0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000, + 0x3688267d00000000, 0x9718319500000000, 0x35af787600000000, + 0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000, + 0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000, + 0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000, + 0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000, + 0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000, + 0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000, + 0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000, + 0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000, + 0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000, + 0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000, + 0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000, + 0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000, + 0xa201313d00000000}, + {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000, + 0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000, + 0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000, + 0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000, + 0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000, + 0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000, + 0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000, + 0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000, + 0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000, + 0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000, + 0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000, + 0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000, + 0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000, + 0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000, + 0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000, + 0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000, + 0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000, + 0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000, + 0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000, + 0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000, + 0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000, + 0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000, + 0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000, + 0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000, + 0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000, + 0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000, + 0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000, + 0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000, + 0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000, + 0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000, + 0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000, + 0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000, + 0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000, + 0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000, + 0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000, + 0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000, + 0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000, + 0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000, + 0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000, + 0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000, + 0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000, + 0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000, + 0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000, + 0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000, + 0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000, + 0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000, + 0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000, + 0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000, + 0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000, + 0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000, + 0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000, + 0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000, + 0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000, + 0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000, + 0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000, + 0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000, + 0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000, + 0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000, + 0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000, + 0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000, + 0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000, + 0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000, + 0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000, + 0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000, + 0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000, + 0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000, + 0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000, + 0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000, + 0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000, + 0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000, + 0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000, + 0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000, + 0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000, + 0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000, + 0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000, + 0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000, + 0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000, + 0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000, + 0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000, + 0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000, + 0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000, + 0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000, + 0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000, + 0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000, + 0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000, + 0xc5f3e53800000000}, + {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000, + 0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000, + 0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000, + 0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000, + 0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000, + 0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000, + 0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000, + 0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000, + 0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000, + 0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000, + 0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000, + 0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000, + 0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000, + 0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000, + 0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000, + 0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000, + 0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000, + 0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000, + 0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000, + 0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000, + 0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000, + 0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000, + 0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000, + 0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000, + 0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000, + 0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000, + 0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000, + 0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000, + 0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000, + 0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000, + 0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000, + 0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000, + 0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000, + 0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000, + 0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000, + 0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000, + 0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000, + 0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000, + 0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000, + 0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000, + 0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000, + 0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000, + 0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000, + 0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000, + 0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000, + 0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000, + 0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000, + 0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000, + 0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000, + 0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000, + 0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000, + 0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000, + 0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000, + 0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000, + 0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000, + 0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000, + 0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000, + 0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000, + 0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000, + 0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000, + 0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000, + 0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000, + 0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000, + 0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000, + 0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000, + 0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000, + 0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000, + 0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000, + 0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000, + 0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000, + 0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000, + 0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000, + 0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000, + 0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000, + 0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000, + 0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000, + 0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000, + 0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000, + 0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000, + 0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000, + 0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000, + 0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000, + 0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000, + 0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000, + 0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000, + 0xccd336eb00000000}, + {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000, + 0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000, + 0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000, + 0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000, + 0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000, + 0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000, + 0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000, + 0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000, + 0xb249204500000000, 0xd071086f00000000, 0x7639701100000000, + 0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000, + 0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000, + 0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000, + 0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000, + 0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000, + 0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000, + 0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000, + 0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000, + 0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000, + 0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000, + 0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000, + 0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000, + 0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000, + 0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000, + 0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000, + 0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000, + 0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000, + 0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000, + 0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000, + 0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000, + 0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000, + 0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000, + 0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000, + 0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000, + 0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000, + 0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000, + 0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000, + 0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000, + 0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000, + 0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000, + 0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000, + 0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000, + 0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000, + 0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000, + 0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000, + 0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000, + 0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000, + 0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000, + 0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000, + 0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000, + 0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000, + 0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000, + 0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000, + 0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000, + 0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000, + 0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000, + 0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000, + 0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000, + 0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000, + 0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000, + 0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000, + 0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000, + 0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000, + 0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000, + 0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000, + 0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000, + 0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000, + 0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000, + 0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000, + 0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000, + 0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000, + 0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000, + 0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000, + 0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000, + 0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000, + 0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000, + 0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000, + 0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000, + 0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000, + 0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000, + 0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000, + 0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000, + 0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000, + 0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000, + 0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000, + 0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000, + 0x48b8399200000000}, + {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000, + 0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000, + 0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000, + 0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000, + 0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000, + 0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000, + 0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000, + 0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000, + 0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000, + 0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000, + 0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000, + 0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000, + 0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000, + 0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000, + 0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000, + 0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000, + 0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000, + 0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000, + 0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000, + 0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000, + 0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000, + 0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000, + 0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000, + 0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000, + 0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000, + 0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000, + 0xb521428400000000, 0xf909d42700000000, 0x762efede00000000, + 0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000, + 0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000, + 0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000, + 0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000, + 0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000, + 0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000, + 0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000, + 0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000, + 0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000, + 0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000, + 0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000, + 0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000, + 0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000, + 0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000, + 0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000, + 0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000, + 0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000, + 0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000, + 0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000, + 0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000, + 0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000, + 0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000, + 0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000, + 0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000, + 0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000, + 0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000, + 0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000, + 0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000, + 0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000, + 0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000, + 0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000, + 0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000, + 0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000, + 0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000, + 0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000, + 0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000, + 0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000, + 0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000, + 0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000, + 0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000, + 0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000, + 0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000, + 0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000, + 0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000, + 0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000, + 0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000, + 0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000, + 0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000, + 0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000, + 0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000, + 0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000, + 0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000, + 0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000, + 0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000, + 0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000, + 0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000, + 0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000, + 0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000, + 0x1af0957800000000}, + {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000, + 0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000, + 0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000, + 0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000, + 0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000, + 0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000, + 0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000, + 0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000, + 0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000, + 0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000, + 0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000, + 0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000, + 0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000, + 0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000, + 0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000, + 0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000, + 0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000, + 0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000, + 0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000, + 0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000, + 0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000, + 0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000, + 0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000, + 0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000, + 0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000, + 0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000, + 0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000, + 0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000, + 0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000, + 0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000, + 0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000, + 0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000, + 0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000, + 0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000, + 0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000, + 0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000, + 0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000, + 0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000, + 0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000, + 0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000, + 0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000, + 0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000, + 0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000, + 0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000, + 0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000, + 0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000, + 0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000, + 0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000, + 0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000, + 0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000, + 0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000, + 0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000, + 0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000, + 0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000, + 0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000, + 0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000, + 0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000, + 0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000, + 0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000, + 0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000, + 0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000, + 0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000, + 0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000, + 0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000, + 0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000, + 0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000, + 0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000, + 0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000, + 0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000, + 0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000, + 0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000, + 0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000, + 0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000, + 0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000, + 0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000, + 0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000, + 0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000, + 0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000, + 0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000, + 0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000, + 0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000, + 0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000, + 0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000, + 0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000, + 0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000, + 0x8a6c1afd00000000}, + {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000, + 0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000, + 0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000, + 0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000, + 0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000, + 0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000, + 0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000, + 0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000, + 0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000, + 0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000, + 0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000, + 0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000, + 0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000, + 0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000, + 0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000, + 0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000, + 0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000, + 0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000, + 0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000, + 0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000, + 0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000, + 0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000, + 0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000, + 0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000, + 0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000, + 0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000, + 0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000, + 0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000, + 0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000, + 0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000, + 0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000, + 0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000, + 0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000, + 0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000, + 0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000, + 0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000, + 0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000, + 0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000, + 0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000, + 0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000, + 0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000, + 0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000, + 0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000, + 0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000, + 0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000, + 0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000, + 0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000, + 0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000, + 0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000, + 0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000, + 0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000, + 0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000, + 0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000, + 0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000, + 0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000, + 0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000, + 0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000, + 0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000, + 0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000, + 0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000, + 0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000, + 0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000, + 0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000, + 0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000, + 0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000, + 0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000, + 0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000, + 0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000, + 0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000, + 0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000, + 0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000, + 0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000, + 0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000, + 0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000, + 0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000, + 0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000, + 0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000, + 0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000, + 0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000, + 0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000, + 0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000, + 0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000, + 0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000, + 0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000, + 0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000, + 0x5270900d00000000}, + {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000, + 0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000, + 0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000, + 0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000, + 0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000, + 0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000, + 0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000, + 0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000, + 0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000, + 0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000, + 0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000, + 0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000, + 0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000, + 0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000, + 0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000, + 0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000, + 0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000, + 0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000, + 0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000, + 0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000, + 0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000, + 0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000, + 0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000, + 0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000, + 0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000, + 0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000, + 0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000, + 0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000, + 0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000, + 0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000, + 0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000, + 0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000, + 0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000, + 0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000, + 0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000, + 0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000, + 0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000, + 0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000, + 0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000, + 0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000, + 0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000, + 0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000, + 0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000, + 0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000, + 0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000, + 0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000, + 0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000, + 0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000, + 0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000, + 0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000, + 0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000, + 0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000, + 0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000, + 0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000, + 0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000, + 0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000, + 0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000, + 0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000, + 0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000, + 0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000, + 0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000, + 0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000, + 0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000, + 0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000, + 0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000, + 0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000, + 0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000, + 0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000, + 0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000, + 0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000, + 0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000, + 0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000, + 0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000, + 0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000, + 0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000, + 0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000, + 0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000, + 0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000, + 0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000, + 0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000, + 0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000, + 0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000, + 0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000, + 0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000, + 0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000, + 0xa8a0688500000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, + 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, + 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, + 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, + 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, + 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, + 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, + 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, + 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, + 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, + 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, + 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, + 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, + 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, + 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, + 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, + 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, + 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, + 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, + 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, + 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, + 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, + 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, + 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, + 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, + 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, + 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, + 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, + 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, + 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, + 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, + 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, + 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, + 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, + 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, + 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, + 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, + 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, + 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, + 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, + 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, + 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, + 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, + 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, + 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, + 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, + 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, + 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, + 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, + 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, + 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, + 0x09cd8551}, + {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, + 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, + 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, + 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, + 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, + 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, + 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, + 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, + 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, + 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, + 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, + 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, + 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, + 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, + 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, + 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, + 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, + 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, + 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, + 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, + 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, + 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, + 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, + 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, + 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, + 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, + 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, + 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, + 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, + 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, + 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, + 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, + 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, + 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, + 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, + 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, + 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, + 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, + 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, + 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, + 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, + 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, + 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, + 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, + 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, + 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, + 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, + 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, + 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, + 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, + 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, + 0x7bc97a0c}, + {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, + 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, + 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, + 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, + 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, + 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, + 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, + 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, + 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, + 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, + 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, + 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, + 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, + 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, + 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, + 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, + 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, + 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, + 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, + 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, + 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, + 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, + 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, + 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, + 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, + 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, + 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, + 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, + 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, + 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, + 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, + 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, + 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, + 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, + 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, + 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, + 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, + 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, + 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, + 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, + 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, + 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, + 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, + 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, + 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, + 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, + 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, + 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, + 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, + 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, + 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, + 0x7851a2ca}, + {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, + 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, + 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, + 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, + 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, + 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, + 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, + 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, + 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, + 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, + 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, + 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, + 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, + 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, + 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, + 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, + 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, + 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, + 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, + 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, + 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, + 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, + 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, + 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, + 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, + 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, + 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, + 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, + 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, + 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, + 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, + 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, + 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, + 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, + 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, + 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, + 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, + 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, + 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, + 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, + 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, + 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, + 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, + 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, + 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, + 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, + 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, + 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, + 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, + 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, + 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, + 0x566b6848}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912, + 0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba, + 0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3, + 0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30, + 0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e, + 0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3, + 0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73, + 0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe, + 0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0, + 0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643, + 0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a, + 0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082, + 0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4, + 0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279, + 0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735, + 0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8, + 0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad, + 0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05, + 0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c, + 0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718, + 0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46, + 0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb, + 0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc, + 0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41, + 0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f, + 0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad, + 0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4, + 0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c, + 0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779, + 0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4, + 0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8, + 0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235, + 0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7, + 0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f, + 0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476, + 0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195, + 0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb, + 0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46, + 0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622, + 0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af, + 0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1, + 0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12, + 0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b, + 0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3, + 0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51, + 0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc, + 0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90, + 0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d, + 0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708, + 0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0, + 0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9, + 0x48686b56}, + {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c, + 0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae, + 0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb, + 0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90, + 0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410, + 0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b, + 0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6, + 0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed, + 0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d, + 0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036, + 0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953, + 0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1, + 0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca, + 0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781, + 0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d, + 0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416, + 0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f, + 0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd, + 0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8, + 0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b, + 0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb, + 0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0, + 0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5, + 0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e, + 0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e, + 0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558, + 0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d, + 0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf, + 0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6, + 0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad, + 0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971, + 0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a, + 0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b, + 0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969, + 0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c, + 0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57, + 0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7, + 0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c, + 0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab, + 0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0, + 0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160, + 0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b, + 0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e, + 0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac, + 0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d, + 0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546, + 0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a, + 0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1, + 0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8, + 0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a, + 0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f, + 0xcaa25178}, + {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00, + 0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b, + 0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed, + 0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777, + 0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01, + 0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a, + 0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef, + 0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74, + 0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002, + 0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498, + 0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee, + 0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75, + 0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05, + 0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e, + 0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8, + 0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73, + 0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404, + 0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f, + 0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9, + 0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71, + 0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607, + 0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c, + 0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb, + 0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470, + 0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806, + 0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790, + 0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6, + 0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d, + 0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a, + 0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991, + 0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7, + 0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c, + 0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09, + 0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92, + 0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4, + 0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e, + 0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08, + 0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593, + 0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3, + 0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778, + 0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e, + 0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94, + 0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2, + 0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079, + 0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c, + 0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497, + 0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1, + 0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a, + 0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d, + 0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396, + 0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0, + 0x0c7ac97b}, + {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669, + 0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853, + 0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062, + 0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527, + 0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad, + 0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545, + 0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27, + 0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf, + 0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45, + 0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800, + 0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031, + 0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b, + 0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26, + 0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce, + 0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d, + 0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5, + 0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130, + 0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a, + 0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b, + 0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480, + 0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a, + 0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2, + 0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e, + 0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996, + 0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c, + 0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc, + 0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd, + 0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7, + 0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232, + 0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da, + 0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439, + 0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1, + 0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da, + 0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0, + 0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1, + 0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94, + 0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e, + 0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6, + 0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2, + 0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a, + 0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0, + 0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95, + 0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4, + 0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e, + 0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395, + 0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d, + 0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e, + 0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676, + 0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83, + 0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9, + 0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888, + 0x5185cd09}}; + +#endif + +#endif + +#endif + +local const z_crc_t FAR x2n_table[] = { + 0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000, + 0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467, + 0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0, + 0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169, + 0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37, + 0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a, + 0xc40ba6d0, 0xc4e22c3c}; diff --git a/src/3rdparty/zlib/src/deflate.c b/src/3rdparty/zlib/src/deflate.c index 1ec76144..799fb93c 100644 --- a/src/3rdparty/zlib/src/deflate.c +++ b/src/3rdparty/zlib/src/deflate.c @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; + " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -190,8 +190,11 @@ local const config configuration_table[10] = { * prev[] will be initialized on the fly. */ #define CLEAR_HASH(s) \ - s->head[s->hash_size-1] = NIL; \ - zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + do { \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, \ + (unsigned)(s->hash_size-1)*sizeof(*s->head)); \ + } while (0) /* =========================================================================== * Slide the hash table when sliding the window down (could be avoided with 32 @@ -252,11 +255,6 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, int wrap = 1; static const char my_version[] = ZLIB_VERSION; - ushf *overlay; - /* We overlay pending_buf and d_buf+l_buf. This works since the average - * output size for (length,distance) codes is <= 24 bits. - */ - if (version == Z_NULL || version[0] != my_version[0] || stream_size != sizeof(z_stream)) { return Z_VERSION_ERROR; @@ -326,9 +324,47 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ - overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); - s->pending_buf = (uchf *) overlay; - s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + /* We overlay pending_buf and sym_buf. This works since the average size + * for length/distance pairs over any compressed block is assured to be 31 + * bits or less. + * + * Analysis: The longest fixed codes are a length code of 8 bits plus 5 + * extra bits, for lengths 131 to 257. The longest fixed distance codes are + * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest + * possible fixed-codes length/distance pair is then 31 bits total. + * + * sym_buf starts one-fourth of the way into pending_buf. So there are + * three bytes in sym_buf for every four bytes in pending_buf. Each symbol + * in sym_buf is three bytes -- two for the distance and one for the + * literal/length. As each symbol is consumed, the pointer to the next + * sym_buf value to read moves forward three bytes. From that symbol, up to + * 31 bits are written to pending_buf. The closest the written pending_buf + * bits gets to the next sym_buf symbol to read is just before the last + * code is written. At that time, 31*(n-2) bits have been written, just + * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at + * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1 + * symbols are written.) The closest the writing gets to what is unread is + * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and + * can range from 128 to 32768. + * + * Therefore, at a minimum, there are 142 bits of space between what is + * written and what is read in the overlain buffers, so the symbols cannot + * be overwritten by the compressed data. That space is actually 139 bits, + * due to the three-bit fixed-code block header. + * + * That covers the case where either Z_FIXED is specified, forcing fixed + * codes, or when the use of fixed codes is chosen, because that choice + * results in a smaller compressed block than dynamic codes. That latter + * condition then assures that the above analysis also covers all dynamic + * blocks. A dynamic-code block will only be chosen to be emitted if it has + * fewer bits than a fixed-code block would for the same set of symbols. + * Therefore its average symbol length is assured to be less than 31. So + * the compressed data for a dynamic block also cannot overwrite the + * symbols from which it is being constructed. + */ + + s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); + s->pending_buf_size = (ulg)s->lit_bufsize * 4; if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || s->pending_buf == Z_NULL) { @@ -337,8 +373,12 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, deflateEnd (strm); return Z_MEM_ERROR; } - s->d_buf = overlay + s->lit_bufsize/sizeof(ush); - s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + s->sym_buf = s->pending_buf + s->lit_bufsize; + s->sym_end = (s->lit_bufsize - 1) * 3; + /* We avoid equality with lit_bufsize*3 because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ s->level = level; s->strategy = strategy; @@ -488,13 +528,13 @@ int ZEXPORT deflateResetKeep (strm) #ifdef GZIP s->wrap == 2 ? GZIP_STATE : #endif - s->wrap ? INIT_STATE : BUSY_STATE; + INIT_STATE; strm->adler = #ifdef GZIP s->wrap == 2 ? crc32(0L, Z_NULL, 0) : #endif adler32(0L, Z_NULL, 0); - s->last_flush = Z_NO_FLUSH; + s->last_flush = -2; _tr_init(s); @@ -549,7 +589,8 @@ int ZEXPORT deflatePrime (strm, bits, value) if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; - if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3)) + if (bits < 0 || bits > 16 || + s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) return Z_BUF_ERROR; do { put = Buf_size - s->bi_valid; @@ -587,12 +628,12 @@ int ZEXPORT deflateParams(strm, level, strategy) func = configuration_table[s->level].func; if ((strategy != s->strategy || func != configuration_table[level].func) && - s->high_water) { + s->last_flush != -2) { /* Flush the last buffer: */ int err = deflate(strm, Z_BLOCK); if (err == Z_STREAM_ERROR) return err; - if (strm->avail_out == 0) + if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead) return Z_BUF_ERROR; } if (s->level != level) { @@ -811,6 +852,8 @@ int ZEXPORT deflate (strm, flush) } /* Write the header */ + if (s->status == INIT_STATE && s->wrap == 0) + s->status = BUSY_STATE; if (s->status == INIT_STATE) { /* zlib header */ uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; @@ -1108,7 +1151,6 @@ int ZEXPORT deflateCopy (dest, source) #else deflate_state *ds; deflate_state *ss; - ushf *overlay; if (deflateStateCheck(source) || dest == Z_NULL) { @@ -1128,8 +1170,7 @@ int ZEXPORT deflateCopy (dest, source) ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); - overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); - ds->pending_buf = (uchf *) overlay; + ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || ds->pending_buf == Z_NULL) { @@ -1143,8 +1184,7 @@ int ZEXPORT deflateCopy (dest, source) zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); - ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); - ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; + ds->sym_buf = ds->pending_buf + ds->lit_bufsize; ds->l_desc.dyn_tree = ds->dyn_ltree; ds->d_desc.dyn_tree = ds->dyn_dtree; @@ -1513,6 +1553,8 @@ local void fill_window(s) s->match_start -= wsize; s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ s->block_start -= (long) wsize; + if (s->insert > s->strstart) + s->insert = s->strstart; slide_hash(s); more += wsize; } @@ -1742,6 +1784,7 @@ local block_state deflate_stored(s, flush) s->matches = 2; /* clear hash */ zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); s->strstart = s->w_size; + s->insert = s->strstart; } else { if (s->window_size - s->strstart <= used) { @@ -1750,12 +1793,14 @@ local block_state deflate_stored(s, flush) zmemcpy(s->window, s->window + s->w_size, s->strstart); if (s->matches < 2) s->matches++; /* add a pending slide_hash() */ + if (s->insert > s->strstart) + s->insert = s->strstart; } zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); s->strstart += used; + s->insert += MIN(used, s->w_size - s->insert); } s->block_start = s->strstart; - s->insert += MIN(used, s->w_size - s->insert); } if (s->high_water < s->strstart) s->high_water = s->strstart; @@ -1770,7 +1815,7 @@ local block_state deflate_stored(s, flush) return block_done; /* Fill the window with any remaining input. */ - have = s->window_size - s->strstart - 1; + have = s->window_size - s->strstart; if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { /* Slide the window down. */ s->block_start -= s->w_size; @@ -1779,12 +1824,15 @@ local block_state deflate_stored(s, flush) if (s->matches < 2) s->matches++; /* add a pending slide_hash() */ have += s->w_size; /* more space now */ + if (s->insert > s->strstart) + s->insert = s->strstart; } if (have > s->strm->avail_in) have = s->strm->avail_in; if (have) { read_buf(s->strm, s->window + s->strstart, have); s->strstart += have; + s->insert += MIN(have, s->w_size - s->insert); } if (s->high_water < s->strstart) s->high_water = s->strstart; @@ -1912,7 +1960,7 @@ local block_state deflate_fast(s, flush) FLUSH_BLOCK(s, 1); return finish_done; } - if (s->last_lit) + if (s->sym_next) FLUSH_BLOCK(s, 0); return block_done; } @@ -2043,7 +2091,7 @@ local block_state deflate_slow(s, flush) FLUSH_BLOCK(s, 1); return finish_done; } - if (s->last_lit) + if (s->sym_next) FLUSH_BLOCK(s, 0); return block_done; } @@ -2118,7 +2166,7 @@ local block_state deflate_rle(s, flush) FLUSH_BLOCK(s, 1); return finish_done; } - if (s->last_lit) + if (s->sym_next) FLUSH_BLOCK(s, 0); return block_done; } @@ -2157,7 +2205,7 @@ local block_state deflate_huff(s, flush) FLUSH_BLOCK(s, 1); return finish_done; } - if (s->last_lit) + if (s->sym_next) FLUSH_BLOCK(s, 0); return block_done; } diff --git a/src/3rdparty/zlib/src/deflate.h b/src/3rdparty/zlib/src/deflate.h index 23ecdd31..17c22611 100644 --- a/src/3rdparty/zlib/src/deflate.h +++ b/src/3rdparty/zlib/src/deflate.h @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2016 Jean-loup Gailly + * Copyright (C) 1995-2018 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -217,7 +217,7 @@ typedef struct internal_state { /* Depth of each subtree used as tie breaker for trees of equal frequency */ - uchf *l_buf; /* buffer for literals or lengths */ + uchf *sym_buf; /* buffer for distances and literals/lengths */ uInt lit_bufsize; /* Size of match buffer for literals/lengths. There are 4 reasons for @@ -239,13 +239,8 @@ typedef struct internal_state { * - I can't count above 4 */ - uInt last_lit; /* running index in l_buf */ - - ushf *d_buf; - /* Buffer for distances. To simplify the code, d_buf and l_buf have - * the same number of elements. To use different lengths, an extra flag - * array would be necessary. - */ + uInt sym_next; /* running index in sym_buf */ + uInt sym_end; /* symbol table full when sym_next reaches this */ ulg opt_len; /* bit length of current block with optimal trees */ ulg static_len; /* bit length of current block with static trees */ @@ -325,20 +320,22 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, # define _tr_tally_lit(s, c, flush) \ { uch cc = (c); \ - s->d_buf[s->last_lit] = 0; \ - s->l_buf[s->last_lit++] = cc; \ + s->sym_buf[s->sym_next++] = 0; \ + s->sym_buf[s->sym_next++] = 0; \ + s->sym_buf[s->sym_next++] = cc; \ s->dyn_ltree[cc].Freq++; \ - flush = (s->last_lit == s->lit_bufsize-1); \ + flush = (s->sym_next == s->sym_end); \ } # define _tr_tally_dist(s, distance, length, flush) \ { uch len = (uch)(length); \ ush dist = (ush)(distance); \ - s->d_buf[s->last_lit] = dist; \ - s->l_buf[s->last_lit++] = len; \ + s->sym_buf[s->sym_next++] = dist; \ + s->sym_buf[s->sym_next++] = dist >> 8; \ + s->sym_buf[s->sym_next++] = len; \ dist--; \ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ s->dyn_dtree[d_code(dist)].Freq++; \ - flush = (s->last_lit == s->lit_bufsize-1); \ + flush = (s->sym_next == s->sym_end); \ } #else # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) diff --git a/src/3rdparty/zlib/src/gzguts.h b/src/3rdparty/zlib/src/gzguts.h index 20de7cb4..3ec32af2 100644 --- a/src/3rdparty/zlib/src/gzguts.h +++ b/src/3rdparty/zlib/src/gzguts.h @@ -1,5 +1,5 @@ /* gzguts.h -- zlib internal header definitions for gz* operations - * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler + * Copyright (C) 2004-2019 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -10,15 +10,8 @@ # ifndef _CRT_NONSTDC_NO_DEPRECATE # define _CRT_NONSTDC_NO_DEPRECATE # endif -#endif - -#ifdef _LARGEFILE64_SOURCE -# ifndef _LARGEFILE_SOURCE -# define _LARGEFILE_SOURCE 1 -# endif -# ifdef _FILE_OFFSET_BITS -# undef _FILE_OFFSET_BITS -# endif +// disable warnings like '=': conversion from 'size_t' to 'unsigned int', possible loss of data +# pragma warning(disable: 4267; disable: 4244) #endif #ifndef QT_BOOTSTRAPPED @@ -29,6 +22,14 @@ #define HAVE_HIDDEN #endif +#ifdef _LARGEFILE64_SOURCE +# ifndef _LARGEFILE_SOURCE +# define _LARGEFILE_SOURCE 1 +# endif +# ifdef _FILE_OFFSET_BITS +# undef _FILE_OFFSET_BITS +# endif +#endif #ifdef HAVE_HIDDEN # define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) @@ -57,7 +58,7 @@ # include #endif -#if defined(_WIN32) || defined(__CYGWIN__) +#if defined(_WIN32) # define WIDECHAR #endif @@ -208,6 +209,7 @@ typedef struct { /* just for writing */ int level; /* compression level */ int strategy; /* compression strategy */ + int reset; /* true if a reset is pending after a Z_FINISH */ /* seek request */ z_off64_t skip; /* amount to skip (already rewound if backwards) */ int seek; /* true if seek request pending */ diff --git a/src/3rdparty/zlib/src/gzlib.c b/src/3rdparty/zlib/src/gzlib.c index 4105e6af..dddaf268 100644 --- a/src/3rdparty/zlib/src/gzlib.c +++ b/src/3rdparty/zlib/src/gzlib.c @@ -1,11 +1,11 @@ /* gzlib.c -- zlib functions common to reading and writing gzip files - * Copyright (C) 2004-2017 Mark Adler + * Copyright (C) 2004-2019 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "gzguts.h" -#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__) +#if defined(_WIN32) && !defined(__BORLANDC__) # define LSEEK _lseeki64 #else #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 @@ -81,6 +81,8 @@ local void gz_reset(state) state->past = 0; /* have not read past end yet */ state->how = LOOK; /* look for gzip header */ } + else /* for writing ... */ + state->reset = 0; /* no deflateReset pending */ state->seek = 0; /* no seek request pending */ gz_error(state, Z_OK, NULL); /* clear error */ state->x.pos = 0; /* no uncompressed data yet */ @@ -397,7 +399,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence) /* if within raw area while reading, just go there */ if (state->mode == GZ_READ && state->how == COPY && state->x.pos + offset >= 0) { - ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR); + ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR); if (ret == -1) return -1; state->x.have = 0; diff --git a/src/3rdparty/zlib/src/gzread.c b/src/3rdparty/zlib/src/gzread.c index 956b91ea..884c9bfe 100644 --- a/src/3rdparty/zlib/src/gzread.c +++ b/src/3rdparty/zlib/src/gzread.c @@ -1,5 +1,5 @@ /* gzread.c -- zlib functions for reading gzip files - * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler + * Copyright (C) 2004-2017 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -314,9 +314,9 @@ local z_size_t gz_read(state, buf, len) got = 0; do { /* set n to the maximum amount of len that fits in an unsigned int */ - n = -1; + n = (unsigned)-1; if (n > len) - n = len; + n = (unsigned)len; /* first just try copying data from the output buffer */ if (state->x.have) { @@ -397,7 +397,7 @@ int ZEXPORT gzread(file, buf, len) } /* read len or fewer bytes to buf */ - len = gz_read(state, buf, len); + len = (unsigned)gz_read(state, buf, len); /* check for an error */ if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR) @@ -447,7 +447,6 @@ z_size_t ZEXPORT gzfread(buf, size, nitems, file) int ZEXPORT gzgetc(file) gzFile file; { - int ret; unsigned char buf[1]; gz_statep state; @@ -469,8 +468,7 @@ int ZEXPORT gzgetc(file) } /* nothing there -- try gz_read() */ - ret = gz_read(state, buf, 1); - return ret < 1 ? -1 : buf[0]; + return gz_read(state, buf, 1) < 1 ? -1 : buf[0]; } int ZEXPORT gzgetc_(file) diff --git a/src/3rdparty/zlib/src/gzwrite.c b/src/3rdparty/zlib/src/gzwrite.c index c7b5651d..a8ffc8f5 100644 --- a/src/3rdparty/zlib/src/gzwrite.c +++ b/src/3rdparty/zlib/src/gzwrite.c @@ -1,5 +1,5 @@ /* gzwrite.c -- zlib functions for writing gzip files - * Copyright (C) 2004-2017 Mark Adler + * Copyright (C) 2004-2019 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -97,6 +97,15 @@ local int gz_comp(state, flush) return 0; } + /* check for a pending reset */ + if (state->reset) { + /* don't start a new gzip member unless there is data to write */ + if (strm->avail_in == 0) + return 0; + deflateReset(strm); + state->reset = 0; + } + /* run deflate() on provided input until it produces no more output */ ret = Z_OK; do { @@ -134,7 +143,7 @@ local int gz_comp(state, flush) /* if that completed a deflate stream, allow another to start */ if (flush == Z_FINISH) - deflateReset(strm); + state->reset = 1; /* all done, no errors */ return 0; @@ -209,7 +218,7 @@ local z_size_t gz_write(state, buf, len) state->in); copy = state->size - have; if (copy > len) - copy = len; + copy = (unsigned)len; memcpy(state->in + have, buf, copy); state->strm.avail_in += copy; state->x.pos += copy; @@ -229,7 +238,7 @@ local z_size_t gz_write(state, buf, len) do { unsigned n = (unsigned)-1; if (n > len) - n = len; + n = (unsigned)len; state->strm.avail_in = n; state->x.pos += n; if (gz_comp(state, Z_NO_FLUSH) == -1) @@ -349,12 +358,11 @@ int ZEXPORT gzputc(file, c) } /* -- see zlib.h -- */ -int ZEXPORT gzputs(file, str) +int ZEXPORT gzputs(file, s) gzFile file; - const char *str; + const char *s; { - int ret; - z_size_t len; + z_size_t len, put; gz_statep state; /* get internal structure */ @@ -367,9 +375,13 @@ int ZEXPORT gzputs(file, str) return -1; /* write string */ - len = strlen(str); - ret = gz_write(state, str, len); - return ret == 0 && len != 0 ? -1 : ret; + len = strlen(s); + if ((int)len < 0 || (unsigned)len != len) { + gz_error(state, Z_STREAM_ERROR, "string length does not fit in int"); + return -1; + } + put = gz_write(state, s, len); + return put < len ? -1 : (int)len; } #if defined(STDC) || defined(Z_HAVE_STDARG_H) @@ -441,7 +453,7 @@ int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) strm->avail_in = state->size; if (gz_comp(state, Z_NO_FLUSH) == -1) return state->err; - memcpy(state->in, state->in + state->size, left); + memmove(state->in, state->in + state->size, left); strm->next_in = state->in; strm->avail_in = left; } @@ -540,7 +552,7 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, strm->avail_in = state->size; if (gz_comp(state, Z_NO_FLUSH) == -1) return state->err; - memcpy(state->in, state->in + state->size, left); + memmove(state->in, state->in + state->size, left); strm->next_in = state->in; strm->avail_in = left; } diff --git a/src/3rdparty/zlib/src/infback.c b/src/3rdparty/zlib/src/infback.c index 59679ecb..a390c58e 100644 --- a/src/3rdparty/zlib/src/infback.c +++ b/src/3rdparty/zlib/src/infback.c @@ -1,5 +1,5 @@ /* infback.c -- inflate using a call-back interface - * Copyright (C) 1995-2016 Mark Adler + * Copyright (C) 1995-2022 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -477,6 +477,7 @@ void FAR *out_desc; } Tracev((stderr, "inflate: codes ok\n")); state->mode = LEN; + /* fallthrough */ case LEN: /* use inflate_fast() if we have enough input and output */ diff --git a/src/3rdparty/zlib/src/inffast.c b/src/3rdparty/zlib/src/inffast.c index 0dbd1dbc..1fec7f36 100644 --- a/src/3rdparty/zlib/src/inffast.c +++ b/src/3rdparty/zlib/src/inffast.c @@ -70,7 +70,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ code const FAR *dcode; /* local strm->distcode */ unsigned lmask; /* mask for first level of length codes */ unsigned dmask; /* mask for first level of distance codes */ - code here; /* retrieved table entry */ + code const *here; /* retrieved table entry */ unsigned op; /* code bits, operation, extra bits, or */ /* window position, window bytes to copy */ unsigned len; /* match length, unused bytes */ @@ -107,20 +107,20 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ hold += (unsigned long)(*in++) << bits; bits += 8; } - here = lcode[hold & lmask]; + here = lcode + (hold & lmask); dolen: - op = (unsigned)(here.bits); + op = (unsigned)(here->bits); hold >>= op; bits -= op; - op = (unsigned)(here.op); + op = (unsigned)(here->op); if (op == 0) { /* literal */ - Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ? "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", here.val)); - *out++ = (unsigned char)(here.val); + "inflate: literal 0x%02x\n", here->val)); + *out++ = (unsigned char)(here->val); } else if (op & 16) { /* length base */ - len = (unsigned)(here.val); + len = (unsigned)(here->val); op &= 15; /* number of extra bits */ if (op) { if (bits < op) { @@ -138,14 +138,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ hold += (unsigned long)(*in++) << bits; bits += 8; } - here = dcode[hold & dmask]; + here = dcode + (hold & dmask); dodist: - op = (unsigned)(here.bits); + op = (unsigned)(here->bits); hold >>= op; bits -= op; - op = (unsigned)(here.op); + op = (unsigned)(here->op); if (op & 16) { /* distance base */ - dist = (unsigned)(here.val); + dist = (unsigned)(here->val); op &= 15; /* number of extra bits */ if (bits < op) { hold += (unsigned long)(*in++) << bits; @@ -264,7 +264,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ } } else if ((op & 64) == 0) { /* 2nd level distance code */ - here = dcode[here.val + (hold & ((1U << op) - 1))]; + here = dcode + here->val + (hold & ((1U << op) - 1)); goto dodist; } else { @@ -274,7 +274,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ } } else if ((op & 64) == 0) { /* 2nd level length code */ - here = lcode[here.val + (hold & ((1U << op) - 1))]; + here = lcode + here->val + (hold & ((1U << op) - 1)); goto dolen; } else if (op & 32) { /* end-of-block */ diff --git a/src/3rdparty/zlib/src/inflate.c b/src/3rdparty/zlib/src/inflate.c index ac333e8c..7be8c636 100644 --- a/src/3rdparty/zlib/src/inflate.c +++ b/src/3rdparty/zlib/src/inflate.c @@ -1,5 +1,5 @@ /* inflate.c -- zlib decompression - * Copyright (C) 1995-2016 Mark Adler + * Copyright (C) 1995-2022 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -130,6 +130,7 @@ z_streamp strm; state->mode = HEAD; state->last = 0; state->havedict = 0; + state->flags = -1; state->dmax = 32768U; state->head = Z_NULL; state->hold = 0; @@ -447,10 +448,10 @@ unsigned copy; /* check function to use adler32() for zlib or crc32() for gzip */ #ifdef GUNZIP -# define UPDATE(check, buf, len) \ +# define UPDATE_CHECK(check, buf, len) \ (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) #else -# define UPDATE(check, buf, len) adler32(check, buf, len) +# define UPDATE_CHECK(check, buf, len) adler32(check, buf, len) #endif /* check macros for header crc */ @@ -670,7 +671,6 @@ int flush; state->mode = FLAGS; break; } - state->flags = 0; /* expect zlib header */ if (state->head != Z_NULL) state->head->done = -1; if (!(state->wrap & 1) || /* check if zlib header allowed */ @@ -697,6 +697,7 @@ int flush; break; } state->dmax = 1U << len; + state->flags = 0; /* indicate zlib header */ Tracev((stderr, "inflate: zlib header ok\n")); strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = hold & 0x200 ? DICTID : TYPE; @@ -722,6 +723,7 @@ int flush; CRC2(state->check, hold); INITBITS(); state->mode = TIME; + /* fallthrough */ case TIME: NEEDBITS(32); if (state->head != Z_NULL) @@ -730,6 +732,7 @@ int flush; CRC4(state->check, hold); INITBITS(); state->mode = OS; + /* fallthrough */ case OS: NEEDBITS(16); if (state->head != Z_NULL) { @@ -740,6 +743,7 @@ int flush; CRC2(state->check, hold); INITBITS(); state->mode = EXLEN; + /* fallthrough */ case EXLEN: if (state->flags & 0x0400) { NEEDBITS(16); @@ -753,6 +757,7 @@ int flush; else if (state->head != Z_NULL) state->head->extra = Z_NULL; state->mode = EXTRA; + /* fallthrough */ case EXTRA: if (state->flags & 0x0400) { copy = state->length; @@ -775,6 +780,7 @@ int flush; } state->length = 0; state->mode = NAME; + /* fallthrough */ case NAME: if (state->flags & 0x0800) { if (have == 0) goto inf_leave; @@ -796,6 +802,7 @@ int flush; state->head->name = Z_NULL; state->length = 0; state->mode = COMMENT; + /* fallthrough */ case COMMENT: if (state->flags & 0x1000) { if (have == 0) goto inf_leave; @@ -816,6 +823,7 @@ int flush; else if (state->head != Z_NULL) state->head->comment = Z_NULL; state->mode = HCRC; + /* fallthrough */ case HCRC: if (state->flags & 0x0200) { NEEDBITS(16); @@ -839,6 +847,7 @@ int flush; strm->adler = state->check = ZSWAP32(hold); INITBITS(); state->mode = DICT; + /* fallthrough */ case DICT: if (state->havedict == 0) { RESTORE(); @@ -846,8 +855,10 @@ int flush; } strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = TYPE; + /* fallthrough */ case TYPE: if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; + /* fallthrough */ case TYPEDO: if (state->last) { BYTEBITS(); @@ -898,8 +909,10 @@ int flush; INITBITS(); state->mode = COPY_; if (flush == Z_TREES) goto inf_leave; + /* fallthrough */ case COPY_: state->mode = COPY; + /* fallthrough */ case COPY: copy = state->length; if (copy) { @@ -935,6 +948,7 @@ int flush; Tracev((stderr, "inflate: table sizes ok\n")); state->have = 0; state->mode = LENLENS; + /* fallthrough */ case LENLENS: while (state->have < state->ncode) { NEEDBITS(3); @@ -956,6 +970,7 @@ int flush; Tracev((stderr, "inflate: code lengths ok\n")); state->have = 0; state->mode = CODELENS; + /* fallthrough */ case CODELENS: while (state->have < state->nlen + state->ndist) { for (;;) { @@ -1039,8 +1054,10 @@ int flush; Tracev((stderr, "inflate: codes ok\n")); state->mode = LEN_; if (flush == Z_TREES) goto inf_leave; + /* fallthrough */ case LEN_: state->mode = LEN; + /* fallthrough */ case LEN: if (have >= 6 && left >= 258) { RESTORE(); @@ -1090,6 +1107,7 @@ int flush; } state->extra = (unsigned)(here.op) & 15; state->mode = LENEXT; + /* fallthrough */ case LENEXT: if (state->extra) { NEEDBITS(state->extra); @@ -1100,6 +1118,7 @@ int flush; Tracevv((stderr, "inflate: length %u\n", state->length)); state->was = state->length; state->mode = DIST; + /* fallthrough */ case DIST: for (;;) { here = state->distcode[BITS(state->distbits)]; @@ -1127,6 +1146,7 @@ int flush; state->offset = (unsigned)here.val; state->extra = (unsigned)(here.op) & 15; state->mode = DISTEXT; + /* fallthrough */ case DISTEXT: if (state->extra) { NEEDBITS(state->extra); @@ -1143,6 +1163,7 @@ int flush; #endif Tracevv((stderr, "inflate: distance %u\n", state->offset)); state->mode = MATCH; + /* fallthrough */ case MATCH: if (left == 0) goto inf_leave; copy = out - left; @@ -1202,7 +1223,7 @@ int flush; state->total += out; if ((state->wrap & 4) && out) strm->adler = state->check = - UPDATE(state->check, put - out, out); + UPDATE_CHECK(state->check, put - out, out); out = left; if ((state->wrap & 4) && ( #ifdef GUNZIP @@ -1218,10 +1239,11 @@ int flush; } #ifdef GUNZIP state->mode = LENGTH; + /* fallthrough */ case LENGTH: if (state->wrap && state->flags) { NEEDBITS(32); - if (hold != (state->total & 0xffffffffUL)) { + if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) { strm->msg = (char *)"incorrect length check"; state->mode = BAD; break; @@ -1231,6 +1253,7 @@ int flush; } #endif state->mode = DONE; + /* fallthrough */ case DONE: ret = Z_STREAM_END; goto inf_leave; @@ -1240,6 +1263,7 @@ int flush; case MEM: return Z_MEM_ERROR; case SYNC: + /* fallthrough */ default: return Z_STREAM_ERROR; } @@ -1265,7 +1289,7 @@ int flush; state->total += out; if ((state->wrap & 4) && out) strm->adler = state->check = - UPDATE(state->check, strm->next_out - out, out); + UPDATE_CHECK(state->check, strm->next_out - out, out); strm->data_type = (int)state->bits + (state->last ? 64 : 0) + (state->mode == TYPE ? 128 : 0) + (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); @@ -1401,6 +1425,7 @@ int ZEXPORT inflateSync(strm) z_streamp strm; { unsigned len; /* number of bytes to look at or looked at */ + int flags; /* temporary to save header status */ unsigned long in, out; /* temporary to save total_in and total_out */ unsigned char buf[4]; /* to restore bit buffer to byte string */ struct inflate_state FAR *state; @@ -1433,9 +1458,15 @@ z_streamp strm; /* return no joy or set up to restart inflate() on a new block */ if (state->have != 4) return Z_DATA_ERROR; + if (state->flags == -1) + state->wrap = 0; /* if no header yet, treat as raw */ + else + state->wrap &= ~4; /* no point in computing a check value now */ + flags = state->flags; in = strm->total_in; out = strm->total_out; inflateReset(strm); strm->total_in = in; strm->total_out = out; + state->flags = flags; state->mode = TYPE; return Z_OK; } @@ -1531,7 +1562,7 @@ int check; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; - if (check) + if (check && state->wrap) state->wrap |= 4; else state->wrap &= ~4; diff --git a/src/3rdparty/zlib/src/inflate.h b/src/3rdparty/zlib/src/inflate.h index a46cce6b..f127b6b1 100644 --- a/src/3rdparty/zlib/src/inflate.h +++ b/src/3rdparty/zlib/src/inflate.h @@ -1,5 +1,5 @@ /* inflate.h -- internal inflate state definition - * Copyright (C) 1995-2016 Mark Adler + * Copyright (C) 1995-2019 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -86,7 +86,8 @@ struct inflate_state { int wrap; /* bit 0 true for zlib, bit 1 true for gzip, bit 2 true to validate check value */ int havedict; /* true if dictionary provided */ - int flags; /* gzip header method and flags (0 if zlib) */ + int flags; /* gzip header method and flags, 0 if zlib, or + -1 if raw or no header yet */ unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ unsigned long check; /* protected copy of check value */ unsigned long total; /* protected copy of output count */ diff --git a/src/3rdparty/zlib/src/inftrees.c b/src/3rdparty/zlib/src/inftrees.c index 2ea08fc1..09462a74 100644 --- a/src/3rdparty/zlib/src/inftrees.c +++ b/src/3rdparty/zlib/src/inftrees.c @@ -1,5 +1,5 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2017 Mark Adler + * Copyright (C) 1995-2022 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.11 Copyright 1995-2017 Mark Adler "; + " inflate 1.2.12 Copyright 1995-2022 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -62,7 +62,7 @@ unsigned short FAR *work; 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, diff --git a/src/3rdparty/zlib/src/trees.c b/src/3rdparty/zlib/src/trees.c index 50cf4b45..f73fd99c 100644 --- a/src/3rdparty/zlib/src/trees.c +++ b/src/3rdparty/zlib/src/trees.c @@ -1,5 +1,5 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2017 Jean-loup Gailly + * Copyright (C) 1995-2021 Jean-loup Gailly * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -149,7 +149,7 @@ local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, local void compress_block OF((deflate_state *s, const ct_data *ltree, const ct_data *dtree)); local int detect_data_type OF((deflate_state *s)); -local unsigned bi_reverse OF((unsigned value, int length)); +local unsigned bi_reverse OF((unsigned code, int len)); local void bi_windup OF((deflate_state *s)); local void bi_flush OF((deflate_state *s)); @@ -416,7 +416,7 @@ local void init_block(s) s->dyn_ltree[END_BLOCK].Freq = 1; s->opt_len = s->static_len = 0L; - s->last_lit = s->matches = 0; + s->sym_next = s->matches = 0; } #define SMALLEST 1 @@ -870,7 +870,8 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) bi_windup(s); /* align on byte boundary */ put_short(s, (ush)stored_len); put_short(s, (ush)~stored_len); - zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); + if (stored_len) + zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); s->pending += stored_len; #ifdef ZLIB_DEBUG s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; @@ -947,7 +948,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - s->last_lit)); + s->sym_next / 3)); if (static_lenb <= opt_lenb) opt_lenb = static_lenb; @@ -1016,8 +1017,9 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) unsigned dist; /* distance of matched string */ unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ { - s->d_buf[s->last_lit] = (ush)dist; - s->l_buf[s->last_lit++] = (uch)lc; + s->sym_buf[s->sym_next++] = dist; + s->sym_buf[s->sym_next++] = dist >> 8; + s->sym_buf[s->sym_next++] = lc; if (dist == 0) { /* lc is the unmatched char */ s->dyn_ltree[lc].Freq++; @@ -1032,30 +1034,7 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; s->dyn_dtree[d_code(dist)].Freq++; } - -#ifdef TRUNCATE_BLOCK - /* Try to guess if it is profitable to stop the current block here */ - if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { - /* Compute an upper bound for the compressed length */ - ulg out_length = (ulg)s->last_lit*8L; - ulg in_length = (ulg)((long)s->strstart - s->block_start); - int dcode; - for (dcode = 0; dcode < D_CODES; dcode++) { - out_length += (ulg)s->dyn_dtree[dcode].Freq * - (5L+extra_dbits[dcode]); - } - out_length >>= 3; - Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", - s->last_lit, in_length, out_length, - 100L - out_length*100L/in_length)); - if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; - } -#endif - return (s->last_lit == s->lit_bufsize-1); - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ + return (s->sym_next == s->sym_end); } /* =========================================================================== @@ -1068,13 +1047,14 @@ local void compress_block(s, ltree, dtree) { unsigned dist; /* distance of matched string */ int lc; /* match length or unmatched char (if dist == 0) */ - unsigned lx = 0; /* running index in l_buf */ + unsigned sx = 0; /* running index in sym_buf */ unsigned code; /* the code to send */ int extra; /* number of extra bits to send */ - if (s->last_lit != 0) do { - dist = s->d_buf[lx]; - lc = s->l_buf[lx++]; + if (s->sym_next != 0) do { + dist = s->sym_buf[sx++] & 0xff; + dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; + lc = s->sym_buf[sx++]; if (dist == 0) { send_code(s, lc, ltree); /* send a literal byte */ Tracecv(isgraph(lc), (stderr," '%c' ", lc)); @@ -1099,11 +1079,10 @@ local void compress_block(s, ltree, dtree) } } /* literal or match pair ? */ - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, - "pendingBuf overflow"); + /* Check that the overlay between pending_buf and sym_buf is ok: */ + Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); - } while (lx < s->last_lit); + } while (sx < s->sym_next); send_code(s, END_BLOCK, ltree); } @@ -1112,9 +1091,9 @@ local void compress_block(s, ltree, dtree) * Check if the data type is TEXT or BINARY, using the following algorithm: * - TEXT if the two conditions below are satisfied: * a) There are no non-portable control characters belonging to the - * "black list" (0..6, 14..25, 28..31). + * "block list" (0..6, 14..25, 28..31). * b) There is at least one printable character belonging to the - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). * - BINARY otherwise. * - The following partially-portable control characters form a * "gray list" that is ignored in this detection algorithm: @@ -1124,19 +1103,19 @@ local void compress_block(s, ltree, dtree) local int detect_data_type(s) deflate_state *s; { - /* black_mask is the bit mask of black-listed bytes + /* block_mask is the bit mask of block-listed bytes * set bits 0..6, 14..25, and 28..31 * 0xf3ffc07f = binary 11110011111111111100000001111111 */ - unsigned long black_mask = 0xf3ffc07fUL; + unsigned long block_mask = 0xf3ffc07fUL; int n; - /* Check for non-textual ("black-listed") bytes. */ - for (n = 0; n <= 31; n++, black_mask >>= 1) - if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + /* Check for non-textual ("block-listed") bytes. */ + for (n = 0; n <= 31; n++, block_mask >>= 1) + if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) return Z_BINARY; - /* Check for textual ("white-listed") bytes. */ + /* Check for textual ("allow-listed") bytes. */ if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 || s->dyn_ltree[13].Freq != 0) return Z_TEXT; @@ -1144,7 +1123,7 @@ local int detect_data_type(s) if (s->dyn_ltree[n].Freq != 0) return Z_TEXT; - /* There are no "black-listed" or "white-listed" bytes: + /* There are no "block-listed" or "allow-listed" bytes: * this stream either is empty or has tolerated ("gray-listed") bytes only. */ return Z_BINARY; diff --git a/src/3rdparty/zlib/src/zlib.h b/src/3rdparty/zlib/src/zlib.h index 32c2ce09..84087ef3 100644 --- a/src/3rdparty/zlib/src/zlib.h +++ b/src/3rdparty/zlib/src/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.11, January 15th, 2017 + version 1.2.12, March 11th, 2022 - Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -41,11 +41,11 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.11 (Qt)" -#define ZLIB_VERNUM 0x12b0f +#define ZLIB_VERSION "1.2.12 (Qt)" +#define ZLIB_VERNUM 0x12c0 #define ZLIB_VER_MAJOR 1 #define ZLIB_VER_MINOR 2 -#define ZLIB_VER_REVISION 11 +#define ZLIB_VER_REVISION 12 #define ZLIB_VER_SUBREVISION 0 /* @@ -547,8 +547,7 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, int strategy)); This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by the - caller. + fields zalloc, zfree and opaque must be initialized before by the caller. The method parameter is the compression method. It must be Z_DEFLATED in this version of the library. @@ -716,11 +715,12 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, used to switch between compression and straight copy of the input data, or to switch to a different kind of input data requiring a different strategy. If the compression approach (which is a function of the level) or the - strategy is changed, and if any input has been consumed in a previous - deflate() call, then the input available so far is compressed with the old - level and strategy using deflate(strm, Z_BLOCK). There are three approaches - for the compression levels 0, 1..3, and 4..9 respectively. The new level - and strategy will take effect at the next call of deflate(). + strategy is changed, and if there have been any deflate() calls since the + state was initialized or reset, then the input available so far is + compressed with the old level and strategy using deflate(strm, Z_BLOCK). + There are three approaches for the compression levels 0, 1..3, and 4..9 + respectively. The new level and strategy will take effect at the next call + of deflate(). If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does not have enough output space to complete, then the parameter change will not @@ -869,9 +869,11 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, detection, or add 16 to decode only the gzip format (the zlib format will return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see - below), inflate() will not automatically decode concatenated gzip streams. - inflate() will return Z_STREAM_END at the end of the gzip stream. The state - would need to be reset to continue decoding a subsequent gzip stream. + below), inflate() will *not* automatically decode concatenated gzip members. + inflate() will return Z_STREAM_END at the end of the gzip member. The state + would need to be reset to continue decoding a subsequent gzip member. This + *must* be done if there is more data after a gzip member, in order for the + decompression to be compliant with the gzip standard (RFC 1952). inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the @@ -1306,14 +1308,14 @@ typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ /* ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); - Opens a gzip (.gz) file for reading or writing. The mode parameter is as - in fopen ("rb" or "wb") but can also include a compression level ("wb9") or - a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only - compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' - for fixed code compression as in "wb9F". (See the description of - deflateInit2 for more information about the strategy parameter.) 'T' will - request transparent writing or appending with no compression and not using - the gzip format. + Open the gzip (.gz) file at path for reading and decompressing, or + compressing and writing. The mode parameter is as in fopen ("rb" or "wb") + but can also include a compression level ("wb9") or a strategy: 'f' for + filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", + 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression + as in "wb9F". (See the description of deflateInit2 for more information + about the strategy parameter.) 'T' will request transparent writing or + appending with no compression and not using the gzip format. "a" can be used instead of "w" to request that the gzip stream that will be written be appended to the file. "+" will result in an error, since @@ -1343,9 +1345,9 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); /* - gzdopen associates a gzFile with the file descriptor fd. File descriptors - are obtained from calls like open, dup, creat, pipe or fileno (if the file - has been previously opened with fopen). The mode parameter is as in gzopen. + Associate a gzFile with the file descriptor fd. File descriptors are + obtained from calls like open, dup, creat, pipe or fileno (if the file has + been previously opened with fopen). The mode parameter is as in gzopen. The next call of gzclose on the returned gzFile will also close the file descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor @@ -1366,13 +1368,13 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); /* - Set the internal buffer size used by this library's functions. The - default buffer size is 8192 bytes. This function must be called after - gzopen() or gzdopen(), and before any other calls that read or write the - file. The buffer memory allocation is always deferred to the first read or - write. Three times that size in buffer space is allocated. A larger buffer - size of, for example, 64K or 128K bytes will noticeably increase the speed - of decompression (reading). + Set the internal buffer size used by this library's functions for file to + size. The default buffer size is 8192 bytes. This function must be called + after gzopen() or gzdopen(), and before any other calls that read or write + the file. The buffer memory allocation is always deferred to the first read + or write. Three times that size in buffer space is allocated. A larger + buffer size of, for example, 64K or 128K bytes will noticeably increase the + speed of decompression (reading). The new buffer size also affects the maximum length for gzprintf(). @@ -1382,9 +1384,9 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); /* - Dynamically update the compression level or strategy. See the description - of deflateInit2 for the meaning of these parameters. Previously provided - data is flushed before the parameter change. + Dynamically update the compression level and strategy for file. See the + description of deflateInit2 for the meaning of these parameters. Previously + provided data is flushed before applying the parameter changes. gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not opened for writing, Z_ERRNO if there is an error writing the flushed data, @@ -1393,7 +1395,7 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); /* - Reads the given number of uncompressed bytes from the compressed file. If + Read and decompress up to len uncompressed bytes from file into buf. If the input file is not in gzip format, gzread copies the given number of bytes into the buffer directly from the file. @@ -1424,11 +1426,11 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, gzFile file)); /* - Read up to nitems items of size size from file to buf, otherwise operating - as gzread() does. This duplicates the interface of stdio's fread(), with - size_t request and return types. If the library defines size_t, then - z_size_t is identical to size_t. If not, then z_size_t is an unsigned - integer type that can contain a pointer. + Read and decompress up to nitems items of size size from file into buf, + otherwise operating as gzread() does. This duplicates the interface of + stdio's fread(), with size_t request and return types. If the library + defines size_t, then z_size_t is identical to size_t. If not, then z_size_t + is an unsigned integer type that can contain a pointer. gzfread() returns the number of full items read of size size, or zero if the end of the file was reached and a full item could not be read, or if @@ -1447,18 +1449,16 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, file, reseting and retrying on end-of-file, when size is not 1. */ -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, - voidpc buf, unsigned len)); +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); /* - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes written or 0 in case of - error. + Compress and write the len uncompressed bytes at buf to file. gzwrite + returns the number of uncompressed bytes written or 0 in case of error. */ ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, z_size_t nitems, gzFile file)); /* - gzfwrite() writes nitems items of size size from buf to file, duplicating + Compress and write nitems items of size size from buf to file, duplicating the interface of stdio's fwrite(), with size_t request and return types. If the library defines size_t, then z_size_t is identical to size_t. If not, then z_size_t is an unsigned integer type that can contain a pointer. @@ -1471,22 +1471,22 @@ ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); /* - Converts, formats, and writes the arguments to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of + Convert, format, compress, and write the arguments (...) to file under + control of the string format, as in fprintf. gzprintf returns the number of uncompressed bytes actually written, or a negative zlib error code in case of error. The number of uncompressed bytes written is limited to 8191, or one less than the buffer size given to gzbuffer(). The caller should assure that this limit is not exceeded. If it is exceeded, then gzprintf() will return an error (0) with nothing written. In this case, there may also be a buffer overflow with unpredictable consequences, which is possible only if - zlib was compiled with the insecure functions sprintf() or vsprintf() + zlib was compiled with the insecure functions sprintf() or vsprintf(), because the secure snprintf() or vsnprintf() functions were not available. This can be determined using zlibCompileFlags(). */ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); /* - Writes the given null-terminated string to the compressed file, excluding + Compress and write the given null-terminated string s to file, excluding the terminating null character. gzputs returns the number of characters written, or -1 in case of error. @@ -1494,11 +1494,12 @@ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); /* - Reads bytes from the compressed file until len-1 characters are read, or a - newline character is read and transferred to buf, or an end-of-file - condition is encountered. If any characters are read or if len == 1, the - string is terminated with a null character. If no characters are read due - to an end-of-file or len < 1, then the buffer is left untouched. + Read and decompress bytes from file into buf, until len-1 characters are + read, or until a newline character is read and transferred to buf, or an + end-of-file condition is encountered. If any characters are read or if len + is one, the string is terminated with a null character. If no characters + are read due to an end-of-file or len is less than one, then the buffer is + left untouched. gzgets returns buf which is a null-terminated string, or it returns NULL for end-of-file or in case of error. If there was an error, the contents at @@ -1507,13 +1508,13 @@ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); /* - Writes c, converted to an unsigned char, into the compressed file. gzputc + Compress and write c, converted to an unsigned char, into file. gzputc returns the value that was written, or -1 in case of error. */ ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); /* - Reads one byte from the compressed file. gzgetc returns this byte or -1 + Read and decompress one byte from file. gzgetc returns this byte or -1 in case of end of file or error. This is implemented as a macro for speed. As such, it does not do all of the checking the other functions do. I.e. it does not check to see if file is NULL, nor whether the structure file @@ -1522,8 +1523,8 @@ ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); /* - Push one character back onto the stream to be read as the first character - on the next read. At least one character of push-back is allowed. + Push c back onto the stream for file to be read as the first character on + the next read. At least one character of push-back is always allowed. gzungetc() returns the character pushed, or -1 on failure. gzungetc() will fail if c is -1, and may fail if a character has been pushed but not read yet. If gzungetc is used immediately after gzopen or gzdopen, at least the @@ -1534,9 +1535,9 @@ ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); /* - Flushes all pending output into the compressed file. The parameter flush - is as in the deflate() function. The return value is the zlib error number - (see function gzerror below). gzflush is only permitted when writing. + Flush all pending output to file. The parameter flush is as in the + deflate() function. The return value is the zlib error number (see function + gzerror below). gzflush is only permitted when writing. If the flush parameter is Z_FINISH, the remaining data is written and the gzip stream is completed in the output. If gzwrite() is called again, a new @@ -1551,8 +1552,8 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, z_off_t offset, int whence)); - Sets the starting position for the next gzread or gzwrite on the given - compressed file. The offset represents a number of bytes in the + Set the starting position to offset relative to whence for the next gzread + or gzwrite on file. The offset represents a number of bytes in the uncompressed data stream. The whence parameter is defined as in lseek(2); the value SEEK_END is not supported. @@ -1569,18 +1570,18 @@ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); /* - Rewinds the given file. This function is supported only for reading. + Rewind file. This function is supported only for reading. - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET). */ /* ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); - Returns the starting position for the next gzread or gzwrite on the given - compressed file. This position represents a number of bytes in the - uncompressed data stream, and is zero when starting, even if appending or - reading a gzip stream from the middle of a file using gzdopen(). + Return the starting position for the next gzread or gzwrite on file. + This position represents a number of bytes in the uncompressed data stream, + and is zero when starting, even if appending or reading a gzip stream from + the middle of a file using gzdopen(). gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) */ @@ -1588,22 +1589,22 @@ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); /* ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); - Returns the current offset in the file being read or written. This offset - includes the count of bytes that precede the gzip stream, for example when - appending or when using gzdopen() for reading. When reading, the offset - does not include as yet unused buffered input. This information can be used - for a progress indicator. On error, gzoffset() returns -1. + Return the current compressed (actual) read or write offset of file. This + offset includes the count of bytes that precede the gzip stream, for example + when appending or when using gzdopen() for reading. When reading, the + offset does not include as yet unused buffered input. This information can + be used for a progress indicator. On error, gzoffset() returns -1. */ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); /* - Returns true (1) if the end-of-file indicator has been set while reading, - false (0) otherwise. Note that the end-of-file indicator is set only if the - read tried to go past the end of the input, but came up short. Therefore, - just like feof(), gzeof() may return false even if there is no more data to - read, in the event that the last read request was for the exact number of - bytes remaining in the input file. This will happen if the input file size - is an exact multiple of the buffer size. + Return true (1) if the end-of-file indicator for file has been set while + reading, false (0) otherwise. Note that the end-of-file indicator is set + only if the read tried to go past the end of the input, but came up short. + Therefore, just like feof(), gzeof() may return false even if there is no + more data to read, in the event that the last read request was for the exact + number of bytes remaining in the input file. This will happen if the input + file size is an exact multiple of the buffer size. If gzeof() returns true, then the read functions will return no more data, unless the end-of-file indicator is reset by gzclearerr() and the input file @@ -1612,7 +1613,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); /* - Returns true (1) if file is being copied directly while reading, or false + Return true (1) if file is being copied directly while reading, or false (0) if file is a gzip stream being decompressed. If the input file is empty, gzdirect() will return true, since the input @@ -1633,8 +1634,8 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); ZEXTERN int ZEXPORT gzclose OF((gzFile file)); /* - Flushes all pending output if necessary, closes the compressed file and - deallocates the (de)compression state. Note that once file is closed, you + Flush all pending output for file, if necessary, close file and + deallocate the (de)compression state. Note that once file is closed, you cannot call gzerror with file, since its structures have been deallocated. gzclose must not be called more than once on the same file, just as free must not be called more than once on the same allocation. @@ -1658,10 +1659,10 @@ ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); /* - Returns the error message for the last error which occurred on the given - compressed file. errnum is set to zlib error number. If an error occurred - in the file system and not in the compression library, errnum is set to - Z_ERRNO and the application may consult errno to get the exact error code. + Return the error message for the last error which occurred on file. + errnum is set to zlib error number. If an error occurred in the file system + and not in the compression library, errnum is set to Z_ERRNO and the + application may consult errno to get the exact error code. The application must not modify the returned string. Future calls to this function may invalidate the previously returned string. If file is @@ -1674,7 +1675,7 @@ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); /* - Clears the error and end-of-file flags for file. This is analogous to the + Clear the error and end-of-file flags for file. This is analogous to the clearerr() function in stdio. This is useful for continuing to read a gzip file that is being written concurrently. */ @@ -1692,8 +1693,9 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is Z_NULL, this function returns the - required initial value for the checksum. + return the updated checksum. An Adler-32 value is in the range of a 32-bit + unsigned integer. If buf is Z_NULL, this function returns the required + initial value for the checksum. An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed much faster. @@ -1726,12 +1728,13 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, negative, the result has no meaning or utility. */ -ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the - updated CRC-32. If buf is Z_NULL, this function returns the required - initial value for the crc. Pre- and post-conditioning (one's complement) is - performed within this function so it shouldn't be done by the application. + updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. + If buf is Z_NULL, this function returns the required initial value for the + crc. Pre- and post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the application. Usage example: @@ -1743,7 +1746,7 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); if (crc != original_crc) error(); */ -ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf, +ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf, z_size_t len)); /* Same as crc32(), but with a size_t length. @@ -1759,6 +1762,20 @@ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); len2. */ +/* +ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2)); + + Return the operator corresponding to length len2, to be used with + crc32_combine_op(). +*/ + +ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); +/* + Give the same result as crc32_combine(), using op in place of len2. op is + is generated from len2 by crc32_combine_gen(). This will be faster than + crc32_combine() if the generated op is used more than once. +*/ + /* various hacks, don't look :) */ @@ -1846,6 +1863,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t)); #endif #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) @@ -1856,6 +1874,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ # define z_gzoffset z_gzoffset64 # define z_adler32_combine z_adler32_combine64 # define z_crc32_combine z_crc32_combine64 +# define z_crc32_combine_gen z_crc32_combine_gen64 # else # define gzopen gzopen64 # define gzseek gzseek64 @@ -1863,6 +1882,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ # define gzoffset gzoffset64 # define adler32_combine adler32_combine64 # define crc32_combine crc32_combine64 +# define crc32_combine_gen crc32_combine_gen64 # endif # ifndef Z_LARGE64 ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); @@ -1871,6 +1891,7 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); # endif #else ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); @@ -1879,12 +1900,14 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); #endif #else /* Z_SOLO */ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); #endif /* !Z_SOLO */ @@ -1897,7 +1920,7 @@ ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); -#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO) +#if defined(_WIN32) && !defined(Z_SOLO) ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, const char *mode)); #endif diff --git a/src/3rdparty/zlib/src/zutil.c b/src/3rdparty/zlib/src/zutil.c index a76c6b0c..dcab28a0 100644 --- a/src/3rdparty/zlib/src/zutil.c +++ b/src/3rdparty/zlib/src/zutil.c @@ -136,8 +136,8 @@ const char * ZEXPORT zError(err) return ERR_MSG(err); } -#if defined(_WIN32_WCE) - /* The Microsoft C Run-Time Library for Windows CE doesn't have +#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800 + /* The older Microsoft C Run-Time Library for Windows CE doesn't have * errno. We define it as a global variable to simplify porting. * Its value is always 0 and should not be used. */ diff --git a/src/3rdparty/zlib/src/zutil.h b/src/3rdparty/zlib/src/zutil.h index 38066137..0d784833 100644 --- a/src/3rdparty/zlib/src/zutil.h +++ b/src/3rdparty/zlib/src/zutil.h @@ -1,5 +1,5 @@ /* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -21,7 +21,6 @@ #define HAVE_HIDDEN #endif - #ifdef HAVE_HIDDEN # define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) #else @@ -38,10 +37,6 @@ # include #endif -#ifdef Z_SOLO - typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */ -#endif - #ifndef local # define local static #endif @@ -55,6 +50,17 @@ typedef unsigned short ush; typedef ush FAR ushf; typedef unsigned long ulg; +#if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC) +# include +# if (ULONG_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned long +# elif (ULLONG_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned long long +# elif (UINT_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned +# endif +#endif + extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ @@ -184,10 +190,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX # if defined(_WIN32_WCE) # define fdopen(fd,mode) NULL /* No fdopen() */ -# ifndef _PTRDIFF_T_DEFINED - typedef int ptrdiff_t; -# define _PTRDIFF_T_DEFINED -# endif # else # define fdopen(fd,type) _fdopen(fd,type) # endif diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 16f3ea0c..184956d8 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2017 BogDan Vatra -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Copyright (C) 2016 Olivier Goffart ** Contact: https://www.qt.io/licensing/ ** @@ -69,6 +69,7 @@ import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; +import android.view.Display; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.Menu; @@ -675,10 +676,29 @@ public class QtActivityDelegate @Override public void onDisplayAdded(int displayId) { } + private boolean isSimilarRotation(int r1, int r2) + { + return (r1 == r2) + || (r1 == Surface.ROTATION_0 && r2 == Surface.ROTATION_180) + || (r1 == Surface.ROTATION_180 && r2 == Surface.ROTATION_0) + || (r1 == Surface.ROTATION_90 && r2 == Surface.ROTATION_270) + || (r1 == Surface.ROTATION_270 && r2 == Surface.ROTATION_90); + } + @Override public void onDisplayChanged(int displayId) { - m_currentRotation = m_activity.getWindowManager().getDefaultDisplay().getRotation(); - QtNative.handleOrientationChanged(m_currentRotation, m_nativeOrientation); + Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) + ? m_activity.getWindowManager().getDefaultDisplay() + : m_activity.getDisplay(); + m_currentRotation = display.getRotation(); + m_layout.setActivityDisplayRotation(m_currentRotation); + // Process orientation change only if it comes after the size + // change, or if the screen is rotated by 180 degrees. + // Otherwise it will be processed in QtLayout. + if (isSimilarRotation(m_currentRotation, m_layout.displayRotation())) + QtNative.handleOrientationChanged(m_currentRotation, m_nativeOrientation); + float refreshRate = display.getRefreshRate(); + QtNative.handleRefreshRateChanged(refreshRate); } @Override @@ -806,9 +826,15 @@ public class QtActivityDelegate else m_nativeOrientation = Configuration.ORIENTATION_PORTRAIT; + m_layout.setNativeOrientation(m_nativeOrientation); QtNative.handleOrientationChanged(rotation, m_nativeOrientation); m_currentRotation = rotation; + float refreshRate = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) + ? m_activity.getWindowManager().getDefaultDisplay().getRefreshRate() + : m_activity.getDisplay().getRefreshRate(); + QtNative.handleRefreshRateChanged(refreshRate); + m_layout.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { @@ -868,18 +894,18 @@ public class QtActivityDelegate m_splashScreen.startAnimation(fadeOut); } - public void notifyAccessibilityLocationChange() + public void notifyAccessibilityLocationChange(int viewId) { if (m_accessibilityDelegate == null) return; - m_accessibilityDelegate.notifyLocationChange(); + m_accessibilityDelegate.notifyLocationChange(viewId); } - public void notifyObjectHide(int viewId) + public void notifyObjectHide(int viewId, int parentId) { if (m_accessibilityDelegate == null) return; - m_accessibilityDelegate.notifyObjectHide(viewId); + m_accessibilityDelegate.notifyObjectHide(viewId, parentId); } public void notifyObjectFocus(int viewId) @@ -889,6 +915,13 @@ public class QtActivityDelegate m_accessibilityDelegate.notifyObjectFocus(viewId); } + public void notifyValueChanged(int viewId, String value) + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyValueChanged(viewId, value); + } + public void notifyQtAndroidPluginRunning(boolean running) { m_isPluginRunning = running; diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java index e94ce602..123c5bc2 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Copyright (C) 2012 BogDan Vatra ** Contact: https://www.qt.io/licensing/ ** @@ -42,16 +42,35 @@ package org.qtproject.qt5.android; import android.app.Activity; import android.content.Context; +import android.os.Build; import android.util.AttributeSet; import android.util.DisplayMetrics; +import android.view.Display; import android.view.View; import android.view.ViewGroup; -import android.graphics.Rect; public class QtLayout extends ViewGroup { private Runnable m_startApplicationRunnable; - private int m_bottomDisplayFrame = -1; + + private int m_activityDisplayRotation = -1; + private int m_ownDisplayRotation = -1; + private int m_nativeOrientation = -1; + + public void setActivityDisplayRotation(int rotation) + { + m_activityDisplayRotation = rotation; + } + + public void setNativeOrientation(int orientation) + { + m_nativeOrientation = orientation; + } + + public int displayRotation() + { + return m_ownDisplayRotation; + } public QtLayout(Context context, Runnable startRunnable) { @@ -69,31 +88,40 @@ public class QtLayout extends ViewGroup super(context, attrs, defStyle); } - private void handleSizeChanged (int w, int h, int oldw, int oldh) - { - DisplayMetrics metrics = new DisplayMetrics(); - ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics); - - Rect r = new Rect(); - ((Activity) getContext()).getWindow().getDecorView().getWindowVisibleDisplayFrame(r); - - if (m_bottomDisplayFrame != r.bottom || oldh == -1) { - m_bottomDisplayFrame = r.bottom; - QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h, - metrics.xdpi, - metrics.ydpi, - metrics.scaledDensity, - metrics.density, - ((metrics.heightPixels == h) - || (metrics.heightPixels == h + r.top) - || (m_bottomDisplayFrame > metrics.heightPixels + r.top))); - } - } - @Override protected void onSizeChanged (int w, int h, int oldw, int oldh) { - handleSizeChanged (w, h, oldw, oldh); + DisplayMetrics metrics = new DisplayMetrics(); + Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) + ? ((Activity)getContext()).getWindowManager().getDefaultDisplay() + : ((Activity)getContext()).getDisplay(); + display.getMetrics(metrics); + + if ((metrics.widthPixels > metrics.heightPixels) != (w > h)) { + // This is an intermediate state during display rotation. + // The new size is still reported for old orientation, while + // metrics contain sizes for new orientation. Setting + // such parameters will produce inconsistent results, so + // we just skip them. + // We will have another onSizeChanged() with normal values + // a bit later. + return; + } + + QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h, + metrics.xdpi, metrics.ydpi, metrics.scaledDensity, + metrics.density, display.getRefreshRate()); + + int newRotation = display.getRotation(); + if (m_ownDisplayRotation != m_activityDisplayRotation + && newRotation == m_activityDisplayRotation) { + // If the saved rotation value does not match the one from the + // activity, it means that we got orientation change before size + // change, and the value was cached. So we need to notify about + // orientation change now. + QtNative.handleOrientationChanged(newRotation, m_nativeOrientation); + } + m_ownDisplayRotation = newRotation; if (m_startApplicationRunnable != null) { m_startApplicationRunnable.run(); @@ -172,8 +200,6 @@ public class QtLayout extends ViewGroup } } - - handleSizeChanged (r, b, 0, -1); } // Override to allow type-checking of LayoutParams. diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 5792b5b2..e019797c 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -103,6 +103,7 @@ public class QtNative private static int m_displayMetricsScreenHeightPixels = 0; private static int m_displayMetricsDesktopWidthPixels = 0; private static int m_displayMetricsDesktopHeightPixels = 0; + private static float m_displayMetricsRefreshRate = 60; private static double m_displayMetricsXDpi = .0; private static double m_displayMetricsYDpi = .0; private static double m_displayMetricsScaledDensity = 1.0; @@ -116,6 +117,7 @@ public class QtNative public static QtThread m_qtThread = new QtThread(); private static HashMap m_cachedUris = new HashMap(); private static ArrayList m_knownDirs = new ArrayList(); + private static final String NoPermissionErrorMessage = "No permissions to open Uri"; private static final Runnable runPendingCppRunnablesRunnable = new Runnable() { @Override @@ -193,11 +195,10 @@ public class QtNative return iterUri; } - // Android 6 and earlier could still manage to open the file so we can return the - // parsed uri here - if (Build.VERSION.SDK_INT < 24) - return parsedUri; - return null; + // if we only have transient permissions on uri all the above will fail, + // but we will be able to read the file anyway, so continue with uri here anyway + // and check for SecurityExceptions later + return parsedUri; } catch (SecurityException e) { e.printStackTrace(); return null; @@ -244,7 +245,7 @@ public class QtNative int error = -1; if (uri == null) { - Log.e(QtTAG, "openFdForContentUrl(): No permissions to open Uri"); + Log.e(QtTAG, "openFdForContentUrl(): " + NoPermissionErrorMessage); return error; } @@ -254,12 +255,13 @@ public class QtNative return fdDesc.detachFd(); } catch (FileNotFoundException e) { e.printStackTrace(); - return error; } catch (IllegalArgumentException e) { Log.e(QtTAG, "openFdForContentUrl(): Invalid Uri"); e.printStackTrace(); - return error; + } catch (SecurityException e) { + Log.e(QtTAG, NoPermissionErrorMessage); } + return error; } public static long getSize(Context context, String contentUrl) @@ -270,7 +272,7 @@ public class QtNative uri = getUriWithValidPermission(context, contentUrl, "r"); if (uri == null) { - Log.e(QtTAG, "getSize(): No permissions to open Uri"); + Log.e(QtTAG, NoPermissionErrorMessage); return size; } else if (!m_cachedUris.containsKey(contentUrl)) { m_cachedUris.put(contentUrl, uri); @@ -288,12 +290,13 @@ public class QtNative } catch (IllegalArgumentException e) { Log.e(QtTAG, "getSize(): Invalid Uri"); e.printStackTrace(); - return size; } catch (UnsupportedOperationException e) { Log.e(QtTAG, "getSize(): Unsupported operation for given Uri"); e.printStackTrace(); - return size; + } catch (SecurityException e) { + Log.e(QtTAG, NoPermissionErrorMessage); } + return size; } public static boolean checkFileExists(Context context, String contentUrl) @@ -303,7 +306,7 @@ public class QtNative if (uri == null) uri = getUriWithValidPermission(context, contentUrl, "r"); if (uri == null) { - Log.e(QtTAG, "checkFileExists(): No permissions to open Uri"); + Log.e(QtTAG, NoPermissionErrorMessage); return exists; } else { if (!m_cachedUris.containsKey(contentUrl)) @@ -321,12 +324,13 @@ public class QtNative } catch (IllegalArgumentException e) { Log.e(QtTAG, "checkFileExists(): Invalid Uri"); e.printStackTrace(); - return exists; } catch (UnsupportedOperationException e) { Log.e(QtTAG, "checkFileExists(): Unsupported operation for given Uri"); e.printStackTrace(); - return false; + } catch (SecurityException e) { + Log.e(QtTAG, NoPermissionErrorMessage); } + return exists; } public static boolean checkIfWritable(Context context, String contentUrl) @@ -344,7 +348,7 @@ public class QtNative uri = getUriWithValidPermission(context, contentUrl, "r"); } if (uri == null) { - Log.e(QtTAG, "isDir(): No permissions to open Uri"); + Log.e(QtTAG, NoPermissionErrorMessage); return isDir; } else { if (!m_cachedUris.containsKey(contentUrl)) @@ -374,12 +378,13 @@ public class QtNative } catch (IllegalArgumentException e) { Log.e(QtTAG, "checkIfDir(): Invalid Uri"); e.printStackTrace(); - return false; } catch (UnsupportedOperationException e) { Log.e(QtTAG, "checkIfDir(): Unsupported operation for given Uri"); e.printStackTrace(); - return false; + } catch (SecurityException e) { + Log.e(QtTAG, NoPermissionErrorMessage); } + return false; } public static String[] listContentsFromTreeUri(Context context, String contentUrl) { @@ -614,7 +619,7 @@ public class QtNative m_displayMetricsYDpi, m_displayMetricsScaledDensity, m_displayMetricsDensity, - true); + m_displayMetricsRefreshRate); } }); m_qtThread.post(new Runnable() { @@ -637,7 +642,7 @@ public class QtNative double YDpi, double scaledDensity, double density, - boolean forceUpdate) + float refreshRate) { /* Fix buggy dpi report */ if (XDpi < android.util.DisplayMetrics.DENSITY_LOW) @@ -647,15 +652,9 @@ public class QtNative synchronized (m_mainActivityMutex) { if (m_started) { - setDisplayMetrics(screenWidthPixels, - screenHeightPixels, - desktopWidthPixels, - desktopHeightPixels, - XDpi, - YDpi, - scaledDensity, - density, - forceUpdate); + setDisplayMetrics(screenWidthPixels, screenHeightPixels, desktopWidthPixels, + desktopHeightPixels, XDpi, YDpi, scaledDensity, density, + refreshRate); } else { m_displayMetricsScreenWidthPixels = screenWidthPixels; m_displayMetricsScreenHeightPixels = screenHeightPixels; @@ -665,6 +664,7 @@ public class QtNative m_displayMetricsYDpi = YDpi; m_displayMetricsScaledDensity = scaledDensity; m_displayMetricsDensity = density; + m_displayMetricsRefreshRate = refreshRate; } } } @@ -712,9 +712,11 @@ public class QtNative } return 1; } - if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN && index == event.getActionIndex()) { + if (action == MotionEvent.ACTION_DOWN + || action == MotionEvent.ACTION_POINTER_DOWN && index == event.getActionIndex()) { return 0; - } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_POINTER_UP && index == event.getActionIndex()) { + } else if (action == MotionEvent.ACTION_UP + || action == MotionEvent.ACTION_POINTER_UP && index == event.getActionIndex()) { return 3; } return 2; @@ -766,6 +768,10 @@ public class QtNative touchEnd(id, 2); break; + case MotionEvent.ACTION_CANCEL: + touchCancel(id); + break; + default: touchEnd(id, 1); } @@ -942,25 +948,25 @@ public class QtNative return m_activityDelegate.isKeyboardVisible() && !m_isKeyboardHiding; } - private static void notifyAccessibilityLocationChange() + private static void notifyAccessibilityLocationChange(final int viewId) { runAction(new Runnable() { @Override public void run() { if (m_activityDelegate != null) { - m_activityDelegate.notifyAccessibilityLocationChange(); + m_activityDelegate.notifyAccessibilityLocationChange(viewId); } } }); } - private static void notifyObjectHide(final int viewId) + private static void notifyObjectHide(final int viewId, final int parentId) { runAction(new Runnable() { @Override public void run() { if (m_activityDelegate != null) { - m_activityDelegate.notifyObjectHide(viewId); + m_activityDelegate.notifyObjectHide(viewId, parentId); } } }); @@ -978,6 +984,18 @@ public class QtNative }); } + private static void notifyValueChanged(final int viewId, final String value) + { + runAction(new Runnable() { + @Override + public void run() { + if (m_activityDelegate != null) { + m_activityDelegate.notifyValueChanged(viewId, value); + } + } + }); + } + public static void notifyQtAndroidPluginRunning(final boolean running) { m_activityDelegate.notifyQtAndroidPluginRunning(running); @@ -1344,8 +1362,9 @@ public class QtNative double YDpi, double scaledDensity, double density, - boolean forceUpdate); + float refreshRate); public static native void handleOrientationChanged(int newRotation, int nativeOrientation); + public static native void handleRefreshRateChanged(float refreshRate); // screen methods // pointer methods @@ -1356,6 +1375,7 @@ public class QtNative public static native void touchBegin(int winId); public static native void touchAdd(int winId, int pointerId, int action, boolean primary, int x, int y, float major, float minor, float rotation, float pressure); public static native void touchEnd(int winId, int action); + public static native void touchCancel(int winId); public static native void longPress(int winId, int x, int y); // pointer methods diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java index 68e79c27..433c57f5 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java @@ -84,6 +84,7 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.Objects; public class QtServiceDelegate { @@ -115,10 +116,11 @@ public class QtServiceDelegate QtNative.setService(m_service, this); QtNative.setClassLoader(classLoader); - QtNative.setApplicationDisplayMetrics(10, 10, 10, 10, 120, 120, 1.0, 1.0, false); + QtNative.setApplicationDisplayMetrics(10, 10, 10, 10, 120, 120, 1.0, 1.0, 60.0f); if (loaderParams.containsKey(STATIC_INIT_CLASSES_KEY)) { - for (String className: loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY)) { + for (String className : + Objects.requireNonNull(loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY))) { if (className.length() == 0) continue; try { @@ -128,9 +130,11 @@ public class QtServiceDelegate Method m = initClass.getMethod("setService", Service.class, Object.class); m.invoke(staticInitDataObject, m_service, this); } catch (Exception e) { - e.printStackTrace(); + Log.d(QtNative.QtTAG, + "Class " + className + " does not implement setService method"); } + // For modules that don't need/have setService try { Method m = initClass.getMethod("setContext", Context.class); m.invoke(staticInitDataObject, (Context)m_service); diff --git a/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java index 360902c1..3b910e28 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java @@ -89,6 +89,8 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate // this is because the Android platform window does not take // the offset of the view on screen into account (eg status bar on top) private final int[] m_globalOffset = new int[2]; + private int m_oldOffsetX = 0; + private int m_oldOffsetY = 0; private class HoverEventListener implements View.OnHoverListener { @@ -191,25 +193,66 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate return true; } - public void notifyLocationChange() + public void notifyLocationChange(int viewId) { - invalidateVirtualViewId(m_focusedVirtualViewId); + if (m_focusedVirtualViewId == viewId) + invalidateVirtualViewId(m_focusedVirtualViewId); } - public void notifyObjectHide(int viewId) + public void notifyObjectHide(int viewId, int parentId) { - invalidateVirtualViewId(viewId); + // If the object had accessibility focus, we need to clear it. + // Note: This code is mostly copied from + // AccessibilityNodeProvider::performAction, but we remove the + // focus only if the focused view id matches the one that was hidden. + if (m_focusedVirtualViewId == viewId) { + m_focusedVirtualViewId = INVALID_ID; + m_view.invalidate(); + sendEventForVirtualViewId(viewId, + AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED); + } + // When the object is hidden, we need to notify its parent about + // content change, not the hidden object itself + invalidateVirtualViewId(parentId); } public void notifyObjectFocus(int viewId) { if (m_view == null) return; + m_focusedVirtualViewId = viewId; m_view.invalidate(); sendEventForVirtualViewId(viewId, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); } + public void notifyValueChanged(int viewId, String value) + { + // Send a TYPE_ANNOUNCEMENT event with the new value + if ((viewId == INVALID_ID) || !m_manager.isEnabled()) { + Log.w(TAG, "notifyValueChanged() for invalid view"); + return; + } + final ViewGroup group = (ViewGroup)m_view.getParent(); + if (group == null) { + Log.w(TAG, "Could not announce value because ViewGroup was null."); + return; + } + final AccessibilityEvent event = + AccessibilityEvent.obtain(AccessibilityEvent.TYPE_ANNOUNCEMENT); + event.setEnabled(true); + event.setClassName(m_view.getClass().getName() + DEFAULT_CLASS_NAME); + event.setContentDescription(value); + if (event.getText().isEmpty() && TextUtils.isEmpty(event.getContentDescription())) { + Log.w(TAG, "No value to announce for " + event.getClassName()); + return; + } + event.setPackageName(m_view.getContext().getPackageName()); + event.setSource(m_view, viewId); + if (!group.requestSendAccessibilityEvent(m_view, event)) + Log.w(TAG, "Failed to send value change announcement for " + event.getClassName()); + } + public boolean sendEventForVirtualViewId(int virtualViewId, int eventType) { if ((virtualViewId == INVALID_ID) || !m_manager.isEnabled()) { @@ -314,6 +357,22 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate for (int i = 0; i < ids.length; ++i) result.addChild(m_view, ids[i]); + // The offset values have changed, so we need to re-focus the + // currently focused item, otherwise it will have an incorrect + // focus frame + if ((m_oldOffsetX != offsetX) || (m_oldOffsetY != offsetY)) { + m_oldOffsetX = offsetX; + m_oldOffsetY = offsetY; + if (m_focusedVirtualViewId != INVALID_ID) { + m_nodeProvider.performAction(m_focusedVirtualViewId, + AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS, + new Bundle()); + m_nodeProvider.performAction(m_focusedVirtualViewId, + AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, + new Bundle()); + } + } + return result; } @@ -356,6 +415,10 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate node.addAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS); } + int[] ids = QtNativeAccessibility.childIdListForAccessibleObject(virtualViewId); + for (int i = 0; i < ids.length; ++i) + node.addChild(m_view, ids[i]); + return node; } diff --git a/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java b/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java index a8317437..448b29a9 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java +++ b/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java @@ -55,4 +55,5 @@ class QtNativeAccessibility static native boolean scrollBackward(int objectId); static native boolean populateNode(int objectId, AccessibilityNodeInfo node); + static native String valueForAccessibleObject(int objectId); } diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java index 487ba7e7..dd94d626 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java @@ -1122,20 +1122,26 @@ public class QtActivity extends Activity QtNative.activityDelegate().setFullScreen(enterFullScreen); } - public void notifyAccessibilityLocationChange() + public void notifyAccessibilityLocationChange(int viewId) { - QtNative.activityDelegate().notifyAccessibilityLocationChange(); + QtNative.activityDelegate().notifyAccessibilityLocationChange(viewId); } - public void notifyObjectHide(int viewId) + public void notifyObjectHide(int viewId, int parentId) { - QtNative.activityDelegate().notifyObjectHide(viewId); + QtNative.activityDelegate().notifyObjectHide(viewId, parentId); } public void notifyObjectFocus(int viewId) { QtNative.activityDelegate().notifyObjectFocus(viewId); } + + public void notifyValueChanged(int viewId, String value) + { + QtNative.activityDelegate().notifyValueChanged(viewId, value); + } + public boolean isKeyboardVisible() { return QtNative.activityDelegate().isKeyboardVisible(); diff --git a/src/android/templates/AndroidManifest.xml b/src/android/templates/AndroidManifest.xml index 7079f51a..c434c0cb 100644 --- a/src/android/templates/AndroidManifest.xml +++ b/src/android/templates/AndroidManifest.xml @@ -9,8 +9,8 @@ - - + + diff --git a/src/android/templates/build.gradle b/src/android/templates/build.gradle index 34371c30..63e28ade 100644 --- a/src/android/templates/build.gradle +++ b/src/android/templates/build.gradle @@ -35,8 +35,11 @@ android { *******************************************************/ compileSdkVersion androidCompileSdkVersion.toInteger() + buildToolsVersion androidBuildToolsVersion + ndkVersion androidNdkVersion - buildToolsVersion '28.0.3' + // Extract native libraries from the APK + packagingOptions.jniLibs.useLegacyPackaging true sourceSets { main { diff --git a/src/concurrent/qtconcurrentrunbase.h b/src/concurrent/qtconcurrentrunbase.h index aaa12458..632689e9 100644 --- a/src/concurrent/qtconcurrentrunbase.h +++ b/src/concurrent/qtconcurrentrunbase.h @@ -84,7 +84,13 @@ public: this->setRunnable(this); this->reportStarted(); QFuture theFuture = this->future(); - pool->start(this, /*m_priority*/ 0); + if (pool) { + pool->start(this, /*m_priority*/ 0); + } else { + this->reportCanceled(); + this->reportFinished(); + delete this; + } return theFuture; } diff --git a/src/corelib/Qt5AndroidSupport.cmake b/src/corelib/Qt5AndroidSupport.cmake index 6aca9299..20753920 100644 --- a/src/corelib/Qt5AndroidSupport.cmake +++ b/src/corelib/Qt5AndroidSupport.cmake @@ -1,3 +1,18 @@ +function(qt_internal_get_highest_android_sdk_build_tools_revision out_var build_tools_dir) + file(GLOB revisions RELATIVE "${build_tools_dir}" "${build_tools_dir}/*") + if(NOT revisions) + message(FATAL_ERROR "Cannot determine version of Android build tools. " + "Please specify ANDROID_SDK_BUILD_TOOLS_REVISION manually.") + endif() + set(highest_revision 1.0) + foreach(revision IN LISTS revisions) + if(revision VERSION_GREATER highest_revision) + set(highest_revision ${revision}) + endif() + endforeach() + set(${out_var} ${highest_revision} PARENT_SCOPE) +endfunction() + if (NOT ${PROJECT_NAME}-MultiAbiBuild) set(ANDROID_ABIS armeabi-v7a arm64-v8a x86 x86_64) @@ -37,6 +52,12 @@ if (NOT ${PROJECT_NAME}-MultiAbiBuild) VERBATIM) endif() + if("${ANDROID_SDK_BUILD_TOOLS_REVISION}" STREQUAL "") + qt_internal_get_highest_android_sdk_build_tools_revision( + ANDROID_SDK_BUILD_TOOLS_REVISION + "${ANDROID_SDK}/build-tools") + endif() + # Write the android__deployment_settings.json file file(WRITE ${CMAKE_BINARY_DIR}/android_deployment_settings.json.in [=[{ @@ -57,6 +78,7 @@ if (NOT ${PROJECT_NAME}-MultiAbiBuild) "qml-root-path": "@CMAKE_CURRENT_SOURCE_DIR@", "qt": "@QT_DIR@", "sdk": "@ANDROID_SDK@", + "sdkBuildToolsRevision": "@ANDROID_SDK_BUILD_TOOLS_REVISION@", "stdcpp-path": "@ANDROID_TOOLCHAIN_ROOT@/sysroot/usr/lib/", "tool-prefix": "llvm", "toolchain-prefix": "llvm", diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h index 7f2577d7..212fbea1 100644 --- a/src/corelib/animation/qabstractanimation.h +++ b/src/corelib/animation/qabstractanimation.h @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE class QAnimationGroup; class QSequentialAnimationGroup; class QAnimationDriver; +class QUnifiedTimer; class QAbstractAnimationPrivate; class Q_CORE_EXPORT QAbstractAnimation : public QObject diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp index 98b02f02..eac15241 100644 --- a/src/corelib/animation/qvariantanimation.cpp +++ b/src/corelib/animation/qvariantanimation.cpp @@ -276,7 +276,9 @@ void QVariantAnimationPrivate::setCurrentValueForProgress(const qreal progress) const qreal startProgress = currentInterval.start.first; const qreal endProgress = currentInterval.end.first; - const qreal localProgress = (progress - startProgress) / (endProgress - startProgress); + const qreal localProgress = + qIsNull(progress - startProgress) ? 0.0 // avoid 0/0 below + /* else */ : (progress - startProgress) / (endProgress - startProgress); QVariant ret = q->interpolated(currentInterval.start.second, currentInterval.end.second, diff --git a/src/corelib/doc/snippets/code/doc_src_containers.cpp b/src/corelib/doc/snippets/code/doc_src_containers.cpp index 84935580..2eedfffe 100644 --- a/src/corelib/doc/snippets/code/doc_src_containers.cpp +++ b/src/corelib/doc/snippets/code/doc_src_containers.cpp @@ -70,7 +70,7 @@ list << "A" << "B" << "C" << "D"; QListIterator i(list); while (i.hasNext()) - qDebug() << i.next(); + QString s = i.next(); //! [1] @@ -78,7 +78,7 @@ while (i.hasNext()) QListIterator i(list); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + QString s = i.previous(); //! [2] @@ -217,8 +217,10 @@ foreach (str, list) QLinkedList list; ... QLinkedListIterator i(list); -while (i.hasNext()) - qDebug() << i.next(); +while (i.hasNext()) { + QString s = i.next(); + qDebug() << s; +} //! [16] diff --git a/src/corelib/doc/snippets/code/doc_src_qiterator.cpp b/src/corelib/doc/snippets/code/doc_src_qiterator.cpp index c7a312b0..1a3ef98b 100644 --- a/src/corelib/doc/snippets/code/doc_src_qiterator.cpp +++ b/src/corelib/doc/snippets/code/doc_src_qiterator.cpp @@ -53,7 +53,7 @@ QList list; ... QListIterator i(list); while (i.hasNext()) - qDebug() << i.next(); + float f = i.next(); //! [0] @@ -61,7 +61,7 @@ while (i.hasNext()) QListIterator i(list); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + float f = i.previous(); //! [1] @@ -70,7 +70,7 @@ QLinkedList list; ... QLinkedListIterator i(list); while (i.hasNext()) - qDebug() << i.next(); + float f = i.next(); //! [2] @@ -78,7 +78,7 @@ while (i.hasNext()) QLinkedListIterator i(list); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + float f = i.previous(); //! [3] @@ -87,7 +87,7 @@ QVector vector; ... QVectorIterator i(vector); while (i.hasNext()) - qDebug() << i.next(); + float f = i.next(); //! [4] @@ -95,7 +95,7 @@ while (i.hasNext()) QVectorIterator i(vector); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + float f = i.previous(); //! [5] @@ -104,7 +104,7 @@ QSet set; ... QSetIterator i(set); while (i.hasNext()) - qDebug() << i.next(); + float f = i.next(); //! [6] @@ -112,7 +112,7 @@ while (i.hasNext()) QSetIterator i(set); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + QString s = i.previous(); //! [7] @@ -121,7 +121,7 @@ QList list; ... QMutableListIterator i(list); while (i.hasNext()) - qDebug() << i.next(); + float f = i.next(); //! [8] @@ -129,7 +129,7 @@ while (i.hasNext()) QMutableListIterator i(list); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + float f = i.previous(); //! [9] @@ -151,7 +151,7 @@ QLinkedList list; ... QMutableLinkedListIterator i(list); while (i.hasNext()) - qDebug() << i.next(); + float f = i.next(); //! [11] @@ -159,7 +159,7 @@ while (i.hasNext()) QMutableLinkedListIterator i(list); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + float f = i.previous(); //! [12] @@ -181,7 +181,7 @@ QVector vector; ... QMutableVectorIterator i(vector); while (i.hasNext()) - qDebug() << i.next(); + float f = i.next(); //! [14] @@ -189,7 +189,7 @@ while (i.hasNext()) QMutableVectorIterator i(vector); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + float f = i.previous(); //! [15] @@ -211,7 +211,7 @@ QSet set; ... QMutableSetIterator i(set); while (i.hasNext()) - qDebug() << i.next(); + float f = i.next(); //! [17] @@ -219,7 +219,7 @@ while (i.hasNext()) QMutableSetIterator i(set); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + float f = i.previous(); //! [18] diff --git a/src/corelib/doc/snippets/code/doc_src_qset.cpp b/src/corelib/doc/snippets/code/doc_src_qset.cpp index 100661e0..cb35de48 100644 --- a/src/corelib/doc/snippets/code/doc_src_qset.cpp +++ b/src/corelib/doc/snippets/code/doc_src_qset.cpp @@ -73,8 +73,10 @@ if (!set.contains("ninety-nine")) //! [4] QSetIterator i(set); -while (i.hasNext()) - qDebug() << i.next(); +while (i.hasNext()) { + QWidget *w = i.next(); + qDebug() << w; +} //! [4] diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qdir.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qdir.cpp index 3b9435f0..4d79a618 100644 --- a/src/corelib/doc/snippets/code/src_corelib_io_qdir.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_io_qdir.cpp @@ -54,7 +54,7 @@ void wrapInFunction() //! [0] QDir("/home/user/Documents") -QDir("C:/Documents and Settings") +QDir("C:/Users") //! [0] @@ -154,7 +154,7 @@ if (d1 != d2) //! [12] -C:/Documents and Settings/Username +C:/Users/Username //! [12] diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qdiriterator.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qdiriterator.cpp index 56cf9ed6..39fb629b 100644 --- a/src/corelib/doc/snippets/code/src_corelib_io_qdiriterator.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_io_qdiriterator.cpp @@ -51,8 +51,8 @@ //! [0] QDirIterator it("/etc", QDirIterator::Subdirectories); while (it.hasNext()) { - qDebug() << it.next(); - + QString dir = it.next(); + qDebug() << dir; // /etc/. // /etc/.. // /etc/X11 diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qfileinfo.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qfileinfo.cpp index d81360ee..a6e73a3e 100644 --- a/src/corelib/doc/snippets/code/src_corelib_io_qfileinfo.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_io_qfileinfo.cpp @@ -74,10 +74,10 @@ info2.size(); // returns 56201 //! [1] #ifdef Q_OS_WIN -QFileInfo info1("C:\\Documents and Settings\\Bob\\untabify.lnk"); +QFileInfo info1("C:\\Users\\Bob\\untabify.lnk"); info1.isSymLink(); // returns true -info1.absoluteFilePath(); // returns "C:/Documents and Settings/Bob/untabify.lnk" -info1.size(); // returns 743 +info1.absoluteFilePath(); // returns "C:/Users/Bob/untabify.lnk" +info1.size(); // returns 63942 info1.symLinkTarget(); // returns "C:/Pretty++/untabify" QFileInfo info2(info1.symLinkTarget()); diff --git a/src/corelib/doc/snippets/code/src_corelib_thread_qfuture.cpp b/src/corelib/doc/snippets/code/src_corelib_thread_qfuture.cpp index dfa9b670..3e0ad180 100644 --- a/src/corelib/doc/snippets/code/src_corelib_thread_qfuture.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_thread_qfuture.cpp @@ -62,7 +62,7 @@ QFuture future; ... QFutureIterator i(future); while (i.hasNext()) - qDebug() << i.next(); + QString s = i.next(); //! [1] @@ -70,5 +70,5 @@ while (i.hasNext()) QFutureIterator i(future); i.toBack(); while (i.hasPrevious()) - qDebug() << i.previous(); + QString s = i.previous(); //! [2] diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index 412fea96..d8a44655 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Copyright (C) 2016 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** @@ -83,11 +83,14 @@ # endif #elif defined(_MSC_VER) -# ifdef __clang__ -# define Q_CC_CLANG ((__clang_major__ * 100) + __clang_minor__) -# endif # define Q_CC_MSVC (_MSC_VER) # define Q_CC_MSVC_NET +# define Q_CC_MSVC_ONLY Q_CC_MSVC +# ifdef __clang__ +# undef Q_CC_MSVC_ONLY +# define Q_CC_CLANG ((__clang_major__ * 100) + __clang_minor__) +# define Q_CC_CLANG_ONLY Q_CC_CLANG +# endif # define Q_OUTOFLINE_TEMPLATE inline # define Q_COMPILER_MANGLES_RETURN_TYPE # define Q_FUNC_INFO __FUNCSIG__ @@ -106,6 +109,10 @@ # define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N) stdext::make_checked_array_iterator(x, size_t(N)) // Since _MSC_VER >= 1500 /* Intel C++ disguising as Visual C++: the `using' keyword avoids warnings */ # if defined(__INTEL_COMPILER) +# undef Q_CC_MSVC_ONLY +# ifdef Q_CC_CLANG_ONLY +# undef Q_CC_CLANG_ONLY +# endif # define Q_DECL_VARIABLE_DEPRECATED # define Q_CC_INTEL __INTEL_COMPILER # endif @@ -183,6 +190,7 @@ # else # define Q_CC_CLANG ((__clang_major__ * 100) + __clang_minor__) # endif +# define Q_CC_CLANG_ONLY Q_CC_CLANG # if __has_builtin(__builtin_assume) # define Q_ASSUME_IMPL(expr) __builtin_assume(expr) # else @@ -205,6 +213,7 @@ # endif # else /* Plain GCC */ +# define Q_CC_GNU_ONLY Q_CC_GNU # if Q_CC_GNU >= 405 # define Q_ASSUME_IMPL(expr) if (expr){} else __builtin_unreachable() # define Q_UNREACHABLE_IMPL() __builtin_unreachable() @@ -836,7 +845,7 @@ # define Q_DECL_UNUSED_MEMBER Q_DECL_UNUSED #endif -#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG) +#if defined(Q_CC_GNU_ONLY) # define Q_COMPILER_RESTRICTED_VLA # define Q_COMPILER_THREADSAFE_STATICS # if Q_CC_GNU >= 403 @@ -1246,6 +1255,12 @@ # define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N) (x) #endif +/* + * "Weak overloads" - makes an otherwise confliciting overload weaker + * (by making it a template) + */ +#define Q_WEAK_OVERLOAD template + /* * Warning/diagnostic handling */ diff --git a/src/corelib/global/qendian_p.h b/src/corelib/global/qendian_p.h index c830e65b..5421a452 100644 --- a/src/corelib/global/qendian_p.h +++ b/src/corelib/global/qendian_p.h @@ -52,6 +52,7 @@ // #include +#include QT_BEGIN_NAMESPACE @@ -136,6 +137,198 @@ using qint32_be_bitfield = QBEIntegerBitfield; template using quint32_be_bitfield = QBEIntegerBitfield; +enum class QSpecialIntegerBitfieldInitializer {}; +constexpr QSpecialIntegerBitfieldInitializer QSpecialIntegerBitfieldZero{}; + +template +class QSpecialIntegerStorage +{ +public: + using UnsignedStorageType = typename std::make_unsigned::type; + + constexpr QSpecialIntegerStorage() = default; + constexpr QSpecialIntegerStorage(QSpecialIntegerBitfieldInitializer) : val(0) {} + constexpr QSpecialIntegerStorage(UnsignedStorageType initial) : val(initial) {} + + UnsignedStorageType val; +}; + +template +class QSpecialIntegerAccessor; + +template +class QSpecialIntegerConstAccessor +{ + Q_DISABLE_COPY(QSpecialIntegerConstAccessor) +public: + using Storage = const QSpecialIntegerStorage; + using Type = T; + using UnsignedType = typename std::make_unsigned::type; + + QSpecialIntegerConstAccessor(QSpecialIntegerConstAccessor &&) noexcept = default; + QSpecialIntegerConstAccessor &operator=(QSpecialIntegerConstAccessor &&) noexcept = default; + + operator Type() const noexcept + { + if (std::is_signed::value) { + UnsignedType i = S::fromSpecial(storage->val); + i <<= (sizeof(Type) * 8) - width - pos; + Type t = Type(i); + t >>= (sizeof(Type) * 8) - width; + return t; + } + return (S::fromSpecial(storage->val) & mask()) >> pos; + } + + bool operator!() const noexcept { return !(storage->val & S::toSpecial(mask())); } + + static constexpr UnsignedType mask() noexcept + { + return ((UnsignedType(1) << width) - 1) << pos; + } + +private: + template + friend class QSpecialIntegerBitfieldUnion; + friend class QSpecialIntegerAccessor; + + explicit QSpecialIntegerConstAccessor(Storage *storage) : storage(storage) {} + + friend bool operator==(const QSpecialIntegerConstAccessor &i, + const QSpecialIntegerConstAccessor &j) noexcept + { + return ((i.storage->val ^ j.storage->val) & S::toSpecial(mask())) == 0; + } + + friend bool operator!=(const QSpecialIntegerConstAccessor &i, + const QSpecialIntegerConstAccessor &j) noexcept + { + return ((i.storage->val ^ j.storage->val) & S::toSpecial(mask())) != 0; + } + + Storage *storage; +}; + +template +class QSpecialIntegerAccessor +{ + Q_DISABLE_COPY(QSpecialIntegerAccessor) +public: + using Const = QSpecialIntegerConstAccessor; + using Storage = QSpecialIntegerStorage; + using Type = T; + using UnsignedType = typename std::make_unsigned::type; + + QSpecialIntegerAccessor(QSpecialIntegerAccessor &&) noexcept = default; + QSpecialIntegerAccessor &operator=(QSpecialIntegerAccessor &&) noexcept = default; + + QSpecialIntegerAccessor &operator=(Type t) + { + UnsignedType i = S::fromSpecial(storage->val); + i &= ~Const::mask(); + i |= (UnsignedType(t) << pos) & Const::mask(); + storage->val = S::toSpecial(i); + return *this; + } + + operator Const() { return Const(storage); } + +private: + template + friend class QSpecialIntegerBitfieldUnion; + + explicit QSpecialIntegerAccessor(Storage *storage) : storage(storage) {} + + Storage *storage; +}; + +template +class QSpecialIntegerBitfieldUnion +{ +public: + constexpr QSpecialIntegerBitfieldUnion() = default; + constexpr QSpecialIntegerBitfieldUnion(QSpecialIntegerBitfieldInitializer initial) + : storage(initial) + {} + + constexpr QSpecialIntegerBitfieldUnion( + typename QSpecialIntegerStorage::UnsignedStorageType initial) + : storage(initial) + {} + + template + void set(typename A::Type value) + { + member() = value; + } + + template + typename A::Type get() const + { + return member(); + } + + typename QSpecialIntegerStorage::UnsignedStorageType data() const + { + return storage.val; + } + +private: + template struct Contains : std::false_type { }; + template struct Contains : std::is_same { }; + template + struct Contains + : std::conditional::value, std::true_type, Contains>::type {}; + + template + using IsAccessor = Contains; + + template + A member() + { + Q_STATIC_ASSERT(IsAccessor::value); + return A(&storage); + } + + template + typename A::Const member() const + { + Q_STATIC_ASSERT(IsAccessor::value); + return typename A::Const(&storage); + } + + QSpecialIntegerStorage storage; +}; + +template +using QLEIntegerBitfieldUnion + = QSpecialIntegerBitfieldUnion, Accessors...>; + +template +using QBEIntegerBitfieldUnion + = QSpecialIntegerBitfieldUnion, Accessors...>; + +template +using qint32_le_bitfield_union = QLEIntegerBitfieldUnion; +template +using quint32_le_bitfield_union = QLEIntegerBitfieldUnion; +template +using qint32_be_bitfield_union = QBEIntegerBitfieldUnion; +template +using quint32_be_bitfield_union = QBEIntegerBitfieldUnion; + +template +using qint32_le_bitfield_member + = QSpecialIntegerAccessor, pos, width, T>; +template +using quint32_le_bitfield_member + = QSpecialIntegerAccessor, pos, width, T>; +template +using qint32_be_bitfield_member + = QSpecialIntegerAccessor, pos, width, T>; +template +using quint32_be_bitfield_member + = QSpecialIntegerAccessor, pos, width, T>; QT_END_NAMESPACE diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp index 89f49324..292116cc 100644 --- a/src/corelib/global/qlogging.cpp +++ b/src/corelib/global/qlogging.cpp @@ -1543,7 +1543,7 @@ static bool slog2_default_handler(QtMsgType type, const QMessageLogContext &cont // Set as the default buffer slog2_set_default_buffer(buffer_handle); } - int severity; + int severity = SLOG2_INFO; //Determines the severity level switch (type) { case QtDebugMsg: @@ -1669,7 +1669,7 @@ static bool android_default_message_handler(QtMsgType type, #endif //Q_OS_ANDROID #ifdef Q_OS_WIN -static void win_outputDebugString_helper(QStringView message) +static void win_outputDebugString_helper(const QString &message) { const int maxOutputStringLength = 32766; static QBasicMutex m; @@ -1681,7 +1681,7 @@ static void win_outputDebugString_helper(QStringView message) wchar_t *messagePart = new wchar_t[maxOutputStringLength + 1]; for (int i = 0; i < message.length(); i += maxOutputStringLength ) { const int length = std::min(message.length() - i, maxOutputStringLength ); - const int len = message.mid(i, length).toWCharArray(messagePart); + const int len = QStringView{message}.mid(i, length).toWCharArray(messagePart); Q_ASSERT(len == length); messagePart[len] = 0; OutputDebugString(messagePart); diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index 97551212..dbb9469b 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -827,14 +827,18 @@ /*! \enum Qt::DockWidgetArea - \value LeftDockWidgetArea - \value RightDockWidgetArea - \value TopDockWidgetArea - \value BottomDockWidgetArea - \value AllDockWidgetAreas - \value NoDockWidgetArea + Represents the areas a QDockWidget can be plugged to. + \note A floating dock widget with tabs can be docked anywhere. + + \value LeftDockWidgetArea The left dock area of a QMainWindow. + \value RightDockWidgetArea The right dock area of a QMainWindow. + \value TopDockWidgetArea The top dock area of a QMainWindow. + \value BottomDockWidgetArea The bottom dock area of a QMainWindow. + \value AllDockWidgetAreas All dock widget areas (default). + \value NoDockWidgetArea No dock widget areas. \omitvalue DockWidgetArea_Mask + \sa QDockWidget::setAllowedAreas, QDockWidget::isAreaAllowed */ /*! diff --git a/src/corelib/global/qrandom.cpp b/src/corelib/global/qrandom.cpp index 10672c1f..25f87c7e 100644 --- a/src/corelib/global/qrandom.cpp +++ b/src/corelib/global/qrandom.cpp @@ -383,7 +383,6 @@ struct QRandomGenerator::SystemAndGlobalGenerators constexpr SystemAndGlobalGenerators g = {}; Q_UNUSED(g); - Q_STATIC_ASSERT(std::is_literal_type::value); #endif } diff --git a/src/corelib/io/qbuffer.cpp b/src/corelib/io/qbuffer.cpp index 595fcd27..5c562623 100644 --- a/src/corelib/io/qbuffer.cpp +++ b/src/corelib/io/qbuffer.cpp @@ -41,6 +41,8 @@ #include #include "private/qiodevice_p.h" +#include + QT_BEGIN_NAMESPACE /** QBufferPrivate **/ @@ -212,7 +214,7 @@ QBuffer::~QBuffer() } /*! - Makes QBuffer uses the QByteArray pointed to by \a + Makes QBuffer use the QByteArray pointed to by \a byteArray as its internal buffer. The caller is responsible for ensuring that \a byteArray remains valid until the QBuffer is destroyed, or until setBuffer() is called to change the buffer. @@ -366,7 +368,9 @@ qint64 QBuffer::size() const bool QBuffer::seek(qint64 pos) { Q_D(QBuffer); - if (pos > d->buf->size() && isWritable()) { + const auto oldBufSize = d->buf->size(); + constexpr qint64 MaxSeekPos = (std::numeric_limits::max)(); + if (pos <= MaxSeekPos && pos > oldBufSize && isWritable()) { if (seek(d->buf->size())) { const qint64 gapSize = pos - d->buf->size(); if (write(QByteArray(gapSize, 0)) != gapSize) { @@ -377,7 +381,7 @@ bool QBuffer::seek(qint64 pos) return false; } } else if (pos > d->buf->size() || pos < 0) { - qWarning("QBuffer::seek: Invalid pos: %d", int(pos)); + qWarning("QBuffer::seek: Invalid pos: %lld", pos); return false; } return QIODevice::seek(pos); diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index f7da997b..f6e2b74f 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -408,7 +408,7 @@ inline void QDirPrivate::initFileEngine() \snippet code/src_corelib_io_qdir.cpp 0 On Windows, the second example above will be translated to - \c{C:\Documents and Settings} when used to access files. + \c{C:\Users} when used to access files. Examples of relative paths: diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index eee71f1f..e73a6f49 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -1069,8 +1069,8 @@ bool QFileInfo::isBundle() const } /*! - Returns \c true if this object points to a symbolic link or shortcut; - otherwise returns \c false. + Returns \c true if this object points to a symbolic link, shortcut, + or alias; otherwise returns \c false. Symbolic links exist on Unix (including \macos and iOS) and Windows and are typically created by the \c{ln -s} or \c{mklink} commands, @@ -1078,8 +1078,9 @@ bool QFileInfo::isBundle() const the \l{symLinkTarget()}{link's target}. In addition, true will be returned for shortcuts (\c *.lnk files) on - Windows. This behavior is deprecated and will likely change in a future - version of Qt. Opening those will open the \c .lnk file itself. + Windows, and aliases on \macos. This behavior is deprecated and will + likely change in a future version of Qt. Opening a shortcut or alias + will open the \c .lnk or alias file itself. Example: @@ -1111,7 +1112,8 @@ bool QFileInfo::isSymLink() const opens the \l{symLinkTarget()}{link's target}. In contrast to isSymLink(), false will be returned for shortcuts - (\c *.lnk files) on Windows. Use QFileInfo::isShortcut() instead. + (\c *.lnk files) on Windows and aliases on \macos. + Use QFileInfo::isShortcut() on Windows instead. \note If the symlink points to a non existing file, exists() returns false. diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index f32bb524..42739097 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -887,6 +887,8 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM if (!data.hasFlags(QFileSystemMetaData::DirectoryType)) what |= QFileSystemMetaData::DirectoryType; } + if (what & QFileSystemMetaData::AliasType) + what |= QFileSystemMetaData::LinkType; #endif #ifdef UF_HIDDEN if (what & QFileSystemMetaData::HiddenAttribute) { @@ -1022,8 +1024,11 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM #if defined(Q_OS_DARWIN) if (what & QFileSystemMetaData::AliasType) { - if (entryErrno == 0 && hasResourcePropertyFlag(data, entry, kCFURLIsAliasFileKey)) - data.entryFlags |= QFileSystemMetaData::AliasType; + if (entryErrno == 0 && hasResourcePropertyFlag(data, entry, kCFURLIsAliasFileKey)) { + // kCFURLIsAliasFileKey includes symbolic links, so filter those out + if (!(data.entryFlags & QFileSystemMetaData::LinkType)) + data.entryFlags |= QFileSystemMetaData::AliasType; + } data.knownFlagsMask |= QFileSystemMetaData::AliasType; } @@ -1360,10 +1365,7 @@ bool QFileSystemEngine::moveFileToTrash(const QFileSystemEntry &source, int counter = 0; QFile infoFile; auto makeUniqueTrashedName = [trashedName, &counter]() -> QString { - ++counter; - return QString(QLatin1String("/%1-%2")) - .arg(trashedName) - .arg(counter, 4, 10, QLatin1Char('0')); + return QString::asprintf("/%ls-%04d", qUtf16Printable(trashedName), ++counter); }; do { while (QFile::exists(trashDir.filePath(filesDir) + uniqueTrashedName)) diff --git a/src/corelib/io/qlockfile_win.cpp b/src/corelib/io/qlockfile_win.cpp index 277f8d42..38ecef55 100644 --- a/src/corelib/io/qlockfile_win.cpp +++ b/src/corelib/io/qlockfile_win.cpp @@ -48,6 +48,8 @@ #include "QtCore/qdebug.h" #include "QtCore/qthread.h" +#include "private/qsystemlibrary_p.h" + QT_BEGIN_NAMESPACE static inline bool fileExists(const wchar_t *fileName) @@ -150,7 +152,7 @@ QString QLockFilePrivate::processNameByPid(qint64 pid) #if !defined(Q_OS_WINRT) typedef DWORD (WINAPI *GetModuleFileNameExFunc)(HANDLE, HMODULE, LPTSTR, DWORD); - HMODULE hPsapi = LoadLibraryA("psapi"); + HMODULE hPsapi = QSystemLibrary::load(L"psapi"); if (!hPsapi) return QString(); GetModuleFileNameExFunc qGetModuleFileNameEx = reinterpret_cast( diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index 50390e57..0435180f 100644 --- a/src/corelib/io/qprocess_unix.cpp +++ b/src/corelib/io/qprocess_unix.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2016 Intel Corporation. +** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2022 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -422,14 +422,14 @@ void QProcessPrivate::startProcess() // Add the program name to the argument list. argv[0] = nullptr; if (!program.contains(QLatin1Char('/'))) { + // findExecutable() returns its argument if it's an absolute path, + // otherwise it searches $PATH; returns empty if not found (we handle + // that case much later) const QString &exeFilePath = QStandardPaths::findExecutable(program); - if (!exeFilePath.isEmpty()) { - const QByteArray &tmp = QFile::encodeName(exeFilePath); - argv[0] = ::strdup(tmp.constData()); - } - } - if (!argv[0]) + argv[0] = ::strdup(QFile::encodeName(exeFilePath).constData()); + } else { argv[0] = ::strdup(encodedProgramName.constData()); + } // Add every argument to the list for (int i = 0; i < arguments.count(); ++i) @@ -985,12 +985,14 @@ bool QProcessPrivate::startDetached(qint64 *pid) QByteArray tmp; if (!program.contains(QLatin1Char('/'))) { + // findExecutable() returns its argument if it's an absolute path, + // otherwise it searches $PATH; returns empty if not found (we handle + // that case much later) const QString &exeFilePath = QStandardPaths::findExecutable(program); - if (!exeFilePath.isEmpty()) - tmp = QFile::encodeName(exeFilePath); - } - if (tmp.isEmpty()) + tmp = QFile::encodeName(exeFilePath); + } else { tmp = QFile::encodeName(program); + } argv[0] = tmp.data(); if (envp) diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index 8bf63e8a..76d75693 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -659,7 +659,7 @@ bool QResource::isCompressed() const possible compression algorithm. If this function returns QResource::ZstdCompression, you need to use the - Zstandard library functios (\c{ header). Qt does not provide a + Zstandard library functios (\c{} header). Qt does not provide a wrapper. See \l{http://facebook.github.io/zstd/zstd_manual.html}{Zstandard manual}. diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 8f2361c8..46e66109 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -619,7 +619,8 @@ void QSettingsPrivate::iniEscapedString(const QString &str, QByteArray &result, bool needsQuotes = false; bool escapeNextIfDigit = false; bool useCodec = codec && !str.startsWith(QLatin1String("@ByteArray(")) - && !str.startsWith(QLatin1String("@Variant(")); + && !str.startsWith(QLatin1String("@Variant(")) + && !str.startsWith(QLatin1String("@DateTime(")); int i; int startPos = result.size(); @@ -2162,8 +2163,10 @@ void QConfFileSettingsPrivate::ensureSectionParsed(QConfFile *confFile, \snippet settings/settings.cpp 15 - Note that type information is not preserved when reading settings from INI - files; all values will be returned as QString. + Note that INI files lose the distinction between numeric data and the + strings used to encode them, so values written as numbers shall be read back + as QString. The numeric value can be recovered using \l QString::toInt(), \l + QString::toDouble() and related functions. The \l{tools/settingseditor}{Settings Editor} example lets you experiment with different settings location and with fallbacks @@ -2446,9 +2449,10 @@ void QConfFileSettingsPrivate::ensureSectionParsed(QConfFile *confFile, On 32-bit Windows or from a 64-bit application on 64-bit Windows, this works the same as specifying NativeFormat. This enum value was added in Qt 5.7. - \value IniFormat Store the settings in INI files. Note that type information - is not preserved when reading settings from INI files; - all values will be returned as QString. + \value IniFormat Store the settings in INI files. Note that INI files + lose the distinction between numeric data and the + strings used to encode them, so values written as + numbers shall be read back as QString. \value InvalidFormat Special value returned by registerFormat(). \omitvalue CustomFormat1 diff --git a/src/corelib/io/qstandardpaths.cpp b/src/corelib/io/qstandardpaths.cpp index 04aff3d1..3f979d75 100644 --- a/src/corelib/io/qstandardpaths.cpp +++ b/src/corelib/io/qstandardpaths.cpp @@ -306,7 +306,7 @@ QT_BEGIN_NAMESPACE \li "/Library/Caches" \row \li GenericDataLocation \li "" - \li "/Documents" + \li "/Library/Application Support" \row \li RuntimeLocation \li "/cache" \li not supported diff --git a/src/corelib/io/qt_attribution.json b/src/corelib/io/qt_attribution.json index cc62beef..be37ffa1 100644 --- a/src/corelib/io/qt_attribution.json +++ b/src/corelib/io/qt_attribution.json @@ -20,7 +20,7 @@ supported by Qt (by the QNetworkCookieJar class).", "Homepage": "Consult https://github.com/publicsuffix/list for the sha1 but download from ...", "Homepage": "http://publicsuffix.org/", - "Version": "d4e247a71d1b6da08dad906b098c818493166fcc, fetched on 2021-06-11", + "Version": "c7fe8ddee7f4e16095e51fbc3dd72f18b7a8567d, fetched on 2022-02-17", "License": "Mozilla Public License 2.0", "LicenseFile": "PSL-LICENSE.txt", "LicenseId": "MPL-2.0", diff --git a/src/corelib/io/qurltlds_p.h b/src/corelib/io/qurltlds_p.h index 1353210a..c6ce557a 100644 --- a/src/corelib/io/qurltlds_p.h +++ b/src/corelib/io/qurltlds_p.h @@ -61,14953 +61,14779 @@ QT_BEGIN_NAMESPACE // for instructions see the program at // util/corelib/qurl-generateTLDs/ -static const quint16 tldCount = 9177; +static const quint16 tldCount = 9212; static const quint32 tldIndices[] = { 0, -17, -36, -56, -62, -62, -69, -69, -69, -75, -87, -153, -174, -174, -174, -198, -198, -198, -215, -215, +18, +28, +35, +45, +45, +92, +108, +130, +177, +199, +199, +199, +219, +219, +219, +228, +228, +228, +228, 240, -255, -264, -288, -314, -328, -328, -344, -344, -396, -396, -420, -449, -449, -454, -463, -463, -469, -475, -498, -516, -523, -523, -550, -561, -597, -608, -608, -626, -636, -636, -647, -647, -647, -647, -675, -715, -715, +251, +308, +324, +372, +372, +386, +386, +386, +386, +402, +402, +402, +402, +402, +408, +431, +431, +447, +447, +447, +460, +503, +511, +521, +535, +549, +558, +590, +609, +644, +644, +651, +719, +719, +719, 732, -732, -745, -753, -768, -787, -799, -799, +761, +761, +761, +761, +780, +795, +795, 806, -814, -840, -849, -849, -860, -881, -881, -881, -913, -926, -946, -946, -946, -946, -946, -952, -971, -971, -978, -996, -1002, -1019, -1019, -1025, -1059, -1059, -1059, -1082, -1082, -1082, -1110, -1117, -1117, -1123, -1139, -1139, -1160, -1170, -1191, -1191, -1191, -1207, -1217, -1217, -1232, -1238, -1245, -1279, +825, +825, +825, +832, +832, +839, +839, +855, +886, +900, +900, +909, +919, +934, +947, +963, +963, +963, +963, +981, +981, +981, +981, +995, +1030, +1037, +1037, +1054, +1073, +1073, +1073, +1083, +1113, +1127, +1138, +1138, +1157, +1157, +1157, +1157, +1166, +1166, +1189, +1225, +1252, 1299, -1319, -1336, -1336, -1342, -1357, -1363, -1370, -1370, -1380, -1400, -1405, -1424, -1430, -1430, -1430, -1438, -1438, -1457, -1475, -1493, -1493, -1529, -1541, -1556, -1556, -1563, -1563, -1563, -1576, -1618, -1656, -1685, -1706, -1721, -1741, -1761, -1781, -1797, -1797, -1797, -1804, -1810, -1816, -1816, -1816, -1854, -1860, -1860, -1899, -1899, -1933, -1945, -1945, -1958, -1986, -1986, -1992, -2007, -2013, -2013, -2019, -2019, -2025, -2036, -2036, -2036, -2036, -2036, -2036, -2111, -2111, -2111, -2147, -2147, -2158, -2163, -2176, -2176, -2195, -2202, -2216, -2222, -2254, -2284, -2284, -2297, -2319, -2319, -2325, -2340, -2350, -2357, -2362, -2362, -2362, -2380, -2387, -2400, -2400, -2400, -2448, -2448, -2455, -2463, +1305, +1310, +1310, +1310, +1310, +1340, +1385, +1385, +1393, +1393, +1419, +1426, +1426, +1426, +1426, +1441, +1441, +1441, +1505, +1521, +1521, +1532, +1573, +1573, +1573, +1573, +1580, +1580, +1584, +1593, +1619, +1654, +1654, +1654, +1708, +1723, +1730, +1730, +1747, +1747, +1747, +1752, +1817, +1824, +1824, +1833, +1833, +1838, +1843, +1843, +1843, +1843, +1868, +1868, +1874, +1887, +1887, +1906, +1906, +1906, +1906, +1944, +1944, +1970, +1970, +1970, +1987, +2002, +2002, +2030, +2051, +2070, +2081, +2095, +2131, +2131, +2131, +2155, +2174, +2184, +2184, +2197, +2220, +2255, +2255, +2255, +2295, +2310, +2310, +2310, +2339, +2339, +2339, +2355, +2355, +2355, +2355, +2359, +2386, +2386, +2386, +2386, +2441, +2471, +2471, +2471, +2471, 2478, -2501, -2520, -2538, -2565, -2584, -2591, -2610, -2610, -2651, -2651, -2667, -2667, -2695, -2704, -2716, -2716, -2716, +2485, +2529, +2549, +2556, +2567, +2567, +2604, +2623, +2639, +2649, +2655, +2660, +2673, +2673, +2686, +2686, +2686, +2701, 2723, 2723, -2759, -2759, -2765, -2771, -2799, -2818, -2836, -2836, -2848, -2848, -2848, -2859, -2869, -2878, -2878, -2902, -2902, -2902, -2919, -2954, -2954, -2954, -2965, -2980, -2980, -3012, -3018, -3025, -3062, -3062, -3092, -3104, -3104, +2729, +2729, +2750, +2764, +2764, +2764, +2764, +2784, +2800, +2811, +2837, +2842, +2842, +2872, +2887, +2910, +2910, +2934, +2934, +2934, +2934, +2934, +2952, +2984, +2992, +3016, +3026, +3074, +3083, +3099, 3116, -3122, -3141, -3165, -3165, -3199, -3242, -3273, -3273, -3291, -3322, -3336, -3375, -3375, -3381, -3412, -3412, -3412, -3434, -3448, -3482, -3482, -3482, -3488, -3497, -3510, +3116, +3116, +3125, +3143, +3163, +3163, +3185, +3191, +3191, +3191, +3210, +3223, +3243, +3243, +3243, +3243, +3249, +3259, +3270, +3289, +3307, +3307, +3307, +3341, +3359, +3359, +3359, +3359, +3377, +3377, +3386, +3402, +3410, +3410, +3418, +3446, +3446, +3446, +3446, +3457, +3457, +3457, +3471, +3514, 3521, -3558, -3563, -3563, -3581, -3581, -3581, -3587, -3587, -3587, -3593, -3616, -3616, -3654, -3670, -3670, -3676, -3688, -3715, -3736, -3763, +3521, +3555, +3562, +3590, +3597, +3615, +3615, +3642, +3642, +3642, +3642, +3646, +3658, +3671, +3694, +3703, +3708, +3723, +3723, +3739, +3739, +3752, +3767, +3793, 3799, 3806, -3813, -3822, -3828, -3871, -3881, -3897, -3897, -3897, -3897, -3897, -3906, -3906, -3916, -3933, -3943, -3943, -3963, -3970, -3996, -4010, -4063, -4063, -4081, -4081, -4092, -4097, -4097, -4097, -4136, -4136, -4146, -4175, -4183, -4183, -4183, -4183, -4199, -4199, -4206, -4206, -4206, -4216, -4224, -4231, +3806, +3841, +3841, +3853, +3853, +3879, +3879, +3893, +3893, +3893, +3893, +3893, +3926, +3926, +3926, +3944, +3962, +3962, +3962, +3976, +3995, +3995, +3995, +4017, +4067, +4067, +4093, +4104, +4157, +4171, +4171, +4185, +4204, +4226, +4226, +4226, +4226, +4226, +4226, 4236, -4236, -4236, -4243, -4243, -4256, -4256, +4253, +4253, +4253, 4262, -4262, -4262, -4272, -4294, -4298, -4298, -4304, -4314, -4314, -4314, -4333, -4357, -4384, -4384, -4384, -4389, -4419, -4419, -4425, -4425, -4446, -4485, -4501, -4535, -4535, -4555, -4555, -4555, -4577, -4577, -4594, -4594, -4594, -4594, -4594, -4594, -4594, -4594, -4594, -4594, -4604, -4604, -4604, -4604, -4623, -4623, -4648, -4658, -4658, -4665, -4695, -4719, -4742, -4742, -4763, -4763, -4784, -4788, -4794, -4794, -4810, -4827, -4827, -4839, -4839, -4839, -4839, -4875, +4281, +4328, +4328, +4341, +4367, +4367, +4367, +4377, +4393, +4398, +4398, +4404, +4426, +4451, +4451, +4451, +4479, +4495, +4495, +4511, +4558, +4569, +4569, +4578, +4582, +4588, +4588, +4595, +4629, +4634, +4634, +4634, +4634, +4651, +4661, +4661, +4677, +4690, +4690, +4709, +4753, +4771, +4771, +4771, +4781, +4781, +4781, +4781, +4781, +4787, +4787, +4787, +4817, +4817, +4817, +4829, +4852, +4858, +4862, +4872, 4884, -4884, -4914, -4933, -4948, -4948, -4992, -5018, -5043, -5058, -5068, -5068, -5090, -5090, -5096, -5117, -5117, -5117, -5123, -5132, -5150, -5150, -5166, -5172, -5172, -5184, -5184, -5188, -5209, -5245, -5245, -5245, -5261, -5261, -5269, -5269, -5319, -5319, -5319, -5319, -5319, -5334, -5334, -5344, -5381, -5402, -5411, -5446, -5482, -5482, -5498, -5506, -5513, -5531, -5531, -5551, -5555, -5555, -5555, -5577, -5581, -5609, -5609, -5609, -5627, -5627, -5627, -5650, -5667, -5671, -5671, -5677, -5698, -5705, -5705, -5721, -5738, -5755, -5762, -5762, -5762, -5785, -5822, -5822, -5860, -5894, -5894, -5913, -5913, -5926, -5932, -5932, -5932, -5943, -5963, -5963, -5963, -5986, -5986, -6002, -6012, -6012, -6012, -6012, -6019, -6019, -6023, -6079, -6079, +4902, +4916, +4940, +4989, +4996, +5016, +5016, +5026, +5026, +5026, +5031, +5031, +5031, +5041, +5052, +5083, +5083, +5083, +5089, +5089, +5100, +5100, +5109, +5118, +5146, +5151, +5151, +5185, +5185, +5185, +5185, +5185, +5201, +5211, +5233, +5281, +5303, +5303, +5303, +5335, +5362, +5369, +5387, +5406, +5406, +5406, +5406, +5428, +5443, +5443, +5443, +5443, +5485, +5485, +5504, +5520, +5520, +5520, +5536, +5554, +5554, +5554, +5567, +5567, +5620, +5620, +5629, +5714, +5720, +5720, +5720, +5759, +5763, +5763, +5772, +5782, +5805, +5805, +5805, +5815, +5836, +5836, +5850, +5868, +5882, +5895, +5912, +5929, +5937, +5937, +5937, +5947, +5947, +5947, +5947, +5965, +5965, +5971, +5982, +6046, +6046, +6056, +6056, +6075, 6083, -6094, -6094, -6111, -6117, -6117, -6117, -6124, -6134, -6147, -6147, -6147, -6153, -6157, -6157, -6157, -6173, -6185, -6205, -6216, -6216, +6083, +6083, +6101, +6101, +6101, +6119, +6146, +6193, +6193, +6221, 6248, -6259, -6269, -6269, -6297, -6320, -6336, -6336, -6356, -6362, -6396, -6396, -6413, -6420, -6444, -6444, -6444, -6500, -6512, -6512, -6512, -6512, -6518, -6526, -6526, -6539, -6539, -6557, -6557, -6557, -6571, -6583, -6628, -6628, -6628, -6640, -6640, -6640, -6662, -6674, +6285, +6285, +6285, +6315, +6328, +6328, +6328, +6375, +6400, +6409, +6409, +6440, +6440, +6440, +6440, +6440, +6440, +6450, +6450, +6450, +6460, +6460, +6472, +6484, +6510, +6521, +6541, +6541, +6541, +6548, +6554, +6594, +6605, +6605, +6605, +6609, +6631, +6631, +6641, +6679, 6693, 6693, 6693, -6693, -6718, -6729, -6751, -6751, -6751, -6801, -6811, -6831, -6831, -6831, -6831, -6850, -6869, -6869, -6911, -6922, -6922, -6951, -6951, -6978, -7027, -7027, -7027, -7033, -7033, -7033, -7033, -7057, -7063, -7063, -7081, -7098, -7098, -7098, -7108, -7108, -7108, -7145, -7145, -7145, -7162, -7162, -7162, -7162, -7162, -7162, -7220, -7232, -7239, -7264, -7264, -7268, -7268, -7299, -7299, -7299, -7327, -7346, -7346, -7363, -7377, -7377, -7377, -7392, -7419, -7419, -7419, -7428, -7455, -7455, -7476, -7476, -7501, -7501, -7501, -7501, -7501, -7552, -7574, -7585, -7595, -7595, -7630, -7659, -7659, -7659, -7663, -7663, -7683, -7683, -7711, -7748, -7748, -7772, -7772, -7782, -7794, -7819, +6703, +6710, +6710, +6726, +6762, +6762, +6769, +6789, +6807, +6807, +6807, +6807, +6824, +6847, +6847, +6851, +6878, +6923, +6923, +6958, +6962, +6962, +6966, +6998, +7032, +7043, +7053, +7060, +7060, +7067, +7067, +7067, +7119, +7126, +7126, +7126, +7126, +7135, +7135, +7135, +7170, +7198, +7198, +7198, +7281, +7281, +7281, +7291, +7348, +7348, +7358, +7380, +7380, +7396, +7396, +7415, +7436, +7436, +7443, +7443, +7460, +7460, +7460, +7490, +7505, +7505, +7512, +7526, +7586, +7604, +7610, +7616, +7634, +7634, +7634, +7634, +7634, +7660, +7660, +7689, +7713, +7733, +7733, +7733, +7733, +7733, +7733, +7765, +7811, +7823, +7823, 7833, -7840, -7861, -7879, -7910, -7943, -7965, -7979, -7989, -7989, -7989, -8012, -8038, -8058, -8081, -8081, -8085, -8107, -8143, -8143, -8151, -8151, -8151, -8193, -8193, -8193, -8193, -8203, -8221, -8221, -8221, -8221, -8251, -8251, -8256, -8286, -8286, -8351, -8351, -8367, -8367, -8367, -8392, -8392, -8392, -8392, -8398, -8398, -8398, -8437, -8467, -8472, +7833, +7857, +7857, +7857, +7867, +7867, +7867, +7867, +7894, +7907, +7907, +7907, +7907, +7914, +7914, +7955, +7992, +7992, +7992, +7992, +8013, +8022, +8022, +8022, +8022, +8044, +8044, +8044, +8050, +8062, +8062, +8062, +8090, +8090, +8106, +8115, +8159, +8169, +8177, +8192, +8192, +8206, +8206, +8206, +8212, +8238, +8238, +8238, +8252, +8252, +8268, +8284, +8284, +8314, +8314, +8338, +8429, +8471, +8471, +8471, +8477, +8477, +8477, +8477, 8495, -8510, 8517, 8517, -8539, -8570, -8570, -8594, -8594, -8594, -8594, -8594, -8604, -8604, -8638, -8670, -8720, -8720, -8749, -8749, -8765, -8765, -8765, -8776, +8517, +8552, +8558, +8568, +8568, +8628, +8654, +8664, +8683, +8683, +8683, +8683, +8693, +8711, +8726, +8726, +8726, +8726, +8735, +8747, +8759, +8771, +8782, 8786, -8795, -8795, -8795, -8795, -8795, -8812, -8827, -8841, -8841, -8848, -8848, -8848, -8855, -8867, -8867, -8867, -8867, -8867, -8867, -8900, -8900, -8900, -8915, -8953, -8987, +8800, +8838, +8853, +8853, +8866, +8877, +8877, +8884, +8897, +8986, +8986, +8986, +8992, 9011, -9032, -9043, -9043, -9043, -9043, -9043, -9043, -9043, -9043, -9043, -9053, -9053, -9068, -9079, -9089, -9094, -9099, -9099, -9126, -9126, -9150, -9150, -9150, -9150, -9171, -9171, -9171, -9196, -9196, -9233, -9233, -9261, -9261, -9261, -9261, -9280, -9294, -9307, -9307, -9342, -9342, -9373, -9384, -9384, -9384, -9384, -9384, -9394, -9394, -9410, -9410, -9410, -9425, -9442, -9442, -9442, -9442, +9017, +9017, +9017, +9029, +9040, +9047, +9074, +9074, +9074, +9074, +9105, +9155, +9165, +9165, +9165, +9192, +9206, +9216, +9216, +9250, +9274, +9274, +9274, +9281, +9281, +9281, +9293, +9318, +9324, +9331, +9339, +9351, +9357, +9357, +9363, +9430, +9430, +9430, +9446, +9457, +9464, 9471, -9471, -9471, -9500, -9500, -9510, -9531, -9531, -9561, -9577, -9612, -9642, -9657, -9657, -9657, -9692, -9692, -9692, -9696, -9696, -9714, -9714, -9714, -9730, -9739, -9739, -9739, -9749, -9749, -9770, -9770, -9770, -9775, -9789, +9484, +9497, +9509, +9509, +9509, +9535, +9571, +9571, +9571, +9601, +9608, +9654, +9667, +9667, +9691, +9698, +9704, +9737, +9751, +9758, +9774, +9811, 9818, -9818, -9818, -9834, -9834, -9834, -9841, -9868, -9868, -9868, -9875, -9893, -9905, -9905, -9909, -9921, -9938, -9958, -9983, -9983, -10000, -10016, -10016, -10030, -10030, -10030, -10030, -10046, -10066, -10094, -10104, -10118, -10137, -10154, -10177, -10225, -10246, -10264, -10272, -10280, -10299, -10299, -10299, -10304, -10304, -10325, +9839, +9853, +9929, +9948, +9955, +9974, +9981, +9981, +9989, +9996, +10064, +10088, +10095, +10095, +10099, +10099, +10106, +10117, +10140, +10140, +10140, +10140, +10167, +10174, +10181, +10200, +10222, +10229, +10239, +10253, +10284, +10331, +10331, 10344, -10372, -10406, -10424, -10424, -10429, -10429, +10344, +10344, +10344, +10351, +10351, +10377, +10388, +10421, +10421, +10421, +10428, +10428, +10428, +10434, 10444, -10487, -10500, -10525, -10525, -10525, +10450, +10481, +10501, +10501, +10508, 10540, -10545, -10554, -10554, -10554, -10554, 10564, -10596, -10617, -10623, -10629, -10643, -10651, -10684, -10684, -10704, -10726, -10746, -10758, -10762, -10791, -10806, -10823, -10870, -10877, -10900, -10900, -10922, -10928, -10928, -10949, -11008, -11008, -11048, -11066, -11103, -11103, -11103, -11103, -11103, -11103, -11103, -11103, -11120, -11120, -11120, -11120, -11120, -11120, -11135, -11135, -11135, -11135, -11135, -11155, -11155, -11167, -11167, -11176, -11176, -11187, -11217, -11217, -11225, -11235, -11243, +10564, +10590, +10590, +10590, +10597, +10626, +10626, +10637, +10637, +10646, +10646, +10668, +10668, +10668, +10673, +10680, +10680, +10696, +10721, +10728, +10728, +10736, +10743, +10765, +10772, +10793, +10800, +10800, +10807, +10827, +10834, +10875, +10875, +10875, +10875, +10882, +10882, +10889, +10924, +10924, +10931, +10931, +10950, +10960, +10960, +10976, +11004, +11018, +11025, +11025, +11062, +11062, +11062, +11062, +11069, +11091, +11098, +11098, +11119, +11126, +11133, +11183, +11183, +11194, +11204, +11204, +11204, +11216, +11216, +11216, +11244, +11244, +11244, 11262, -11267, -11294, -11307, -11324, -11333, -11343, -11357, -11357, -11357, -11373, -11391, -11408, -11461, -11481, -11500, -11500, -11507, -11511, -11523, -11530, -11571, -11588, -11617, -11639, -11639, -11639, -11664, -11671, -11676, -11708, -11708, -11708, -11708, -11724, -11724, -11731, -11731, -11731, -11731, -11769, -11769, -11769, -11779, -11779, -11791, -11807, -11813, -11813, -11820, -11835, -11847, -11877, -11912, -11917, -11924, -11941, -11953, -11973, -11973, -11983, -12001, -12028, -12042, -12042, -12095, -12095, -12095, -12095, -12095, -12095, -12102, -12112, -12126, -12126, -12145, -12152, -12189, -12205, -12214, -12214, -12231, -12247, -12247, -12293, +11296, +11296, +11296, +11306, +11358, +11358, +11358, +11375, +11393, +11450, +11458, +11464, +11464, +11487, +11503, +11503, +11548, +11570, +11577, +11610, +11626, +11644, +11644, +11669, +11694, +11716, +11751, +11758, +11789, +11789, +11789, +11799, +11799, +11832, +11850, +11879, +11901, +11916, +11923, +11930, +11950, +11993, +11993, +12037, +12044, +12093, +12110, +12117, +12134, +12161, +12161, +12178, +12201, +12208, +12215, +12256, +12322, 12348, -12361, -12389, -12389, -12423, -12423, -12423, -12439, -12439, -12439, -12439, -12439, -12439, -12447, -12447, -12507, -12512, -12512, -12512, -12528, -12528, -12528, -12528, -12528, +12355, +12355, +12355, +12383, +12394, +12421, +12421, +12435, +12455, +12475, +12475, +12488, +12488, +12488, +12504, 12559, 12566, -12592, -12592, -12597, -12603, -12603, -12603, -12620, -12644, -12644, -12644, -12644, -12666, -12714, -12731, -12731, -12745, -12782, -12791, -12791, -12816, -12832, -12854, -12892, -12892, -12892, -12907, -12928, -12939, -12977, -12996, -12996, -13022, -13027, -13039, -13039, -13039, -13039, -13039, -13049, -13088, -13116, -13116, -13156, -13156, -13156, -13156, -13164, -13174, -13174, -13184, -13229, -13229, -13267, -13267, -13267, -13272, -13299, -13299, -13316, -13338, -13338, -13338, -13370, -13370, -13370, -13374, -13394, -13410, -13416, -13459, -13459, -13468, -13468, -13472, -13477, -13488, -13488, -13516, -13528, +12580, +12631, +12647, +12654, +12654, +12665, +12672, +12672, +12682, +12704, +12711, +12718, +12729, +12742, +12742, +12742, +12760, +12804, +12810, +12824, +12844, +12844, +12878, +12891, +12898, +12912, +12918, +12929, +12945, +13008, +13015, +13021, +13050, +13056, +13056, +13056, +13060, +13067, +13073, +13073, +13077, +13077, +13087, +13093, +13102, +13107, +13132, +13142, +13142, +13146, +13161, +13161, +13180, +13213, +13256, +13263, +13277, +13310, +13330, +13330, +13344, +13351, +13364, +13380, +13406, +13458, +13483, +13490, +13497, +13497, +13522, 13528, 13568, -13579, -13583, -13583, -13608, -13608, -13618, +13590, +13607, +13614, +13632, +13632, +13649, +13663, 13676, -13681, -13690, -13690, -13707, -13707, -13707, -13707, -13726, -13726, -13764, -13775, -13775, -13775, -13811, -13842, -13858, -13873, -13885, -13924, -13924, -13924, -13924, -13969, -13984, -13991, -13991, -13991, -13991, -13991, -13991, +13694, +13713, +13720, +13769, +13802, +13869, +13876, +13876, +13904, +13915, +13915, +13957, 14000, 14000, -14000, -14038, -14057, -14057, -14057, -14057, -14057, -14087, -14095, -14106, -14116, +14007, +14026, +14056, +14073, +14073, +14089, +14122, +14137, +14152, 14159, -14167, -14199, -14199, -14199, -14211, -14211, -14217, -14230, -14251, -14251, -14261, -14286, -14290, -14300, -14300, -14300, -14327, -14342, -14356, -14381, -14381, -14381, -14381, -14381, -14402, -14409, -14409, -14419, -14419, -14440, -14444, -14444, +14184, +14191, +14191, +14191, +14220, +14241, +14259, +14270, +14276, +14276, +14283, +14295, +14333, +14352, +14352, +14352, +14358, +14365, +14365, +14365, +14387, +14387, +14387, +14401, +14405, +14405, +14415, +14415, +14461, 14467, 14467, -14477, -14493, -14511, -14519, -14519, -14576, -14605, -14620, -14647, -14688, -14688, -14719, -14728, -14728, -14732, -14741, -14741, -14741, -14741, -14805, -14805, -14805, -14810, -14810, -14891, -14915, -14942, -14954, -14954, -14964, -15008, -15008, -15018, -15050, -15063, -15081, -15098, -15098, -15098, -15110, -15110, -15110, -15119, -15119, -15126, -15133, -15133, -15133, -15133, -15166, -15166, -15166, -15166, -15166, -15166, -15166, -15166, -15166, -15173, -15173, -15215, -15215, -15215, -15215, -15215, -15234, -15243, -15264, -15264, -15264, -15264, -15284, -15284, -15284, -15284, -15308, -15308, -15326, -15346, -15346, -15346, -15377, -15377, -15389, -15389, -15429, -15429, -15448, -15448, -15457, -15457, -15457, -15483, -15501, -15501, -15511, -15531, -15545, -15595, +14490, +14490, +14490, +14490, +14490, +14512, +14526, +14526, +14537, +14596, +14613, +14626, +14626, +14645, +14645, +14650, +14650, +14669, +14695, +14706, +14706, +14706, +14718, +14724, +14734, +14746, +14765, +14774, +14788, +14866, +14888, +14888, +14888, +14895, +14895, +14895, +14895, +14924, +14924, +14924, +14939, +14952, +14970, +14970, +14970, +14980, +14980, +14997, +15002, +15002, +15016, +15016, +15028, +15049, +15049, +15062, +15076, +15076, +15093, +15093, +15116, +15199, +15219, +15219, +15219, +15219, +15219, +15219, +15240, +15281, +15325, +15325, +15331, +15351, +15357, +15357, +15375, +15391, +15410, +15419, +15419, +15419, +15434, +15434, +15485, +15553, +15573, +15573, +15604, +15618, +15624, 15629, -15629, -15646, -15654, -15654, -15668, -15668, -15668, -15697, -15709, -15709, -15709, -15724, -15742, -15742, -15761, -15774, -15811, -15838, -15838, -15838, -15855, -15855, -15865, -15865, -15865, -15865, -15865, -15865, -15872, -15872, -15872, -15896, -15921, -15921, -15921, -15947, -15947, -15947, -15947, -15947, -15978, -15978, -15978, -16009, -16025, -16042, -16042, -16042, -16052, -16052, -16078, -16078, -16082, -16092, -16102, -16102, -16102, -16102, -16102, -16102, -16116, -16126, -16138, -16144, -16144, -16164, -16164, -16174, -16196, -16203, -16214, -16234, -16234, -16261, -16297, -16297, -16319, -16347, -16347, -16347, -16380, -16380, -16380, -16380, -16396, -16396, -16396, -16396, -16415, -16423, +15635, +15675, +15727, +15733, +15738, +15781, +15801, +15816, +15842, +15892, +15907, +15907, +15933, +15969, +15969, +15969, +15988, +16016, +16016, +16022, +16035, +16051, +16057, +16057, +16067, +16098, +16098, +16104, +16104, +16168, +16190, +16190, +16210, +16227, +16241, +16241, +16241, +16269, +16269, +16275, +16275, +16282, +16293, +16293, +16293, +16293, +16312, +16322, +16342, +16358, +16367, +16367, +16377, +16377, +16377, +16384, +16384, +16401, +16417, +16417, +16432, +16432, +16432, +16432, +16444, +16457, +16463, 16467, -16514, -16514, -16518, -16568, -16578, -16617, -16637, -16637, -16637, -16657, -16683, -16683, -16704, -16704, -16732, -16737, -16758, -16758, -16797, -16836, -16836, -16883, -16883, -16890, -16890, -16890, -16905, -16905, -16905, -16905, -16905, -16905, -16905, -16929, -16950, -16961, -16961, +16479, +16494, +16503, +16510, +16530, +16530, +16541, +16541, +16589, +16589, +16596, +16596, +16608, +16608, +16618, +16618, +16618, +16623, +16639, +16639, +16639, +16639, +16678, +16686, +16686, +16696, +16709, +16709, +16716, +16764, +16801, +16813, +16825, +16839, +16859, +16859, +16868, +16889, +16913, +16913, +16913, +16919, +16926, +16926, +16932, +16947, +16947, +16953, +16978, +16990, +17004, +17004, +17004, +17012, +17023, 17030, -17050, -17062, -17080, -17093, -17093, +17043, +17059, +17082, +17082, +17082, +17089, +17095, +17101, 17110, -17138, -17138, -17148, -17148, -17216, -17228, -17239, -17239, -17269, -17298, -17298, -17312, -17312, -17312, -17312, -17312, -17312, -17312, -17345, -17360, -17360, -17369, -17369, -17389, +17166, +17166, +17166, +17166, +17166, +17172, +17180, +17180, +17241, +17263, +17263, +17263, +17263, +17275, +17275, +17287, +17327, +17359, +17359, +17359, +17359, +17359, +17359, +17359, +17380, +17380, +17380, +17391, +17391, +17391, +17391, 17408, -17408, -17416, -17416, -17416, -17440, -17458, -17458, -17458, -17458, -17458, -17458, -17458, -17474, -17499, -17499, -17499, -17499, -17506, -17506, -17512, -17512, -17512, -17512, -17532, -17546, -17569, -17569, -17579, -17583, -17583, -17583, -17591, -17604, -17604, -17604, -17604, -17628, -17685, -17693, -17707, -17707, -17734, -17753, -17753, -17770, -17770, -17780, -17798, -17814, -17814, -17820, -17855, -17855, -17855, -17855, -17894, -17921, +17426, +17433, +17433, +17433, +17444, +17503, +17503, +17520, +17520, +17535, +17535, +17535, +17535, +17535, +17535, +17535, +17535, +17535, +17562, +17574, +17612, +17618, +17618, +17625, +17650, +17655, +17655, +17663, +17695, +17695, +17705, +17712, +17712, +17733, +17733, +17733, +17733, +17751, +17751, +17757, +17757, +17757, +17757, +17763, +17819, +17819, +17819, +17826, +17845, +17852, +17860, +17886, +17886, +17886, +17896, +17896, +17902, +17914, +17924, +17924, 17942, -17950, -17969, -17986, -17986, -17999, -18031, -18040, -18053, -18077, -18086, -18129, -18159, -18159, -18159, -18169, -18169, -18169, -18169, -18211, -18234, -18234, -18242, -18242, -18259, +17953, +17961, +17974, +18001, +18022, +18029, +18050, +18068, +18083, +18083, +18106, +18131, +18131, +18131, +18139, +18146, +18146, +18146, +18161, +18182, +18186, +18186, +18215, +18237, +18252, +18252, 18262, -18292, -18304, -18307, -18317, -18317, -18320, -18320, -18342, -18380, -18403, -18432, -18435, -18455, -18461, -18467, -18480, -18483, -18529, -18532, -18555, -18561, -18592, -18598, -18598, -18598, -18601, -18604, -18607, -18607, -18616, -18619, -18643, -18649, -18649, -18655, -18674, -18677, -18693, -18729, -18729, -18752, -18775, -18802, -18805, -18805, -18805, +18262, +18287, +18287, +18287, +18287, +18287, +18287, +18287, +18305, +18327, +18327, +18337, +18368, +18374, +18374, +18374, +18416, +18460, +18460, +18473, +18502, +18514, +18523, +18523, +18559, +18559, +18564, +18564, +18595, +18609, +18609, +18648, +18654, +18654, +18654, +18665, +18685, +18748, +18748, +18748, +18784, +18804, 18816, -18829, -18838, -18872, -18893, -18921, -18941, -18950, -18967, -18970, -18991, +18828, +18873, +18889, +18895, +18895, +18901, +18916, +18916, +18916, +18957, +18957, +18957, +18978, +18978, +18978, +18992, 19004, -19030, -19051, -19051, -19083, -19090, -19093, -19105, -19132, -19147, -19150, -19207, -19227, -19230, -19230, -19262, -19271, -19280, -19291, -19299, -19299, -19317, -19327, -19330, -19333, -19353, -19377, -19389, -19408, +19048, +19086, +19098, +19116, +19130, +19130, +19130, +19130, +19157, +19175, +19175, +19175, +19209, +19241, +19241, +19263, +19263, +19269, +19269, +19269, +19269, +19295, +19295, +19309, +19340, +19360, +19366, +19366, +19381, +19381, +19381, 19418, -19418, -19418, -19427, -19427, -19430, -19436, -19445, -19451, -19468, -19471, -19504, -19507, -19532, -19535, +19459, +19472, +19483, +19490, +19551, 19557, -19569, -19588, -19591, -19614, -19617, -19617, +19557, +19577, +19580, +19583, +19599, +19602, +19613, +19616, +19620, 19627, -19630, -19633, -19655, -19658, -19661, -19685, -19703, -19703, -19706, -19714, -19727, -19727, -19737, -19786, -19795, -19810, -19827, -19830, -19845, -19858, -19864, -19864, -19872, -19889, -19915, -19951, -19951, -19965, -19974, -19994, -20021, -20021, -20036, +19647, +19659, +19679, +19705, +19705, +19711, +19732, +19744, +19763, +19769, +19772, +19790, +19807, +19817, +19823, +19831, +19908, +19911, +19914, +19917, +19942, +19945, +19948, +19958, +19984, +19984, +19990, +20006, +20009, 20039, 20042, -20052, -20055, -20055, -20055, -20077, +20042, 20091, -20119, -20130, -20160, -20160, -20160, -20163, -20166, -20183, -20217, -20228, -20242, -20245, -20245, -20248, -20267, -20270, -20270, -20306, -20327, -20362, -20365, -20365, -20368, -20406, -20412, -20435, -20441, -20441, -20464, -20496, -20515, -20527, -20564, +20111, +20129, +20132, +20143, +20149, +20152, +20161, +20186, +20192, +20195, +20198, +20213, +20216, +20222, +20225, +20236, +20253, +20253, +20266, +20282, +20282, +20282, +20313, +20358, +20382, +20382, +20395, +20426, +20443, +20446, +20481, +20498, +20512, +20512, +20522, +20528, +20534, +20534, +20537, 20567, -20567, -20575, -20605, -20605, -20605, -20608, -20611, -20634, -20640, -20677, -20680, +20578, +20578, +20578, +20614, +20643, +20646, +20655, +20655, +20668, +20668, +20692, 20717, -20729, -20754, -20754, -20770, -20773, -20773, -20776, -20779, -20782, -20817, -20820, -20872, -20887, -20904, -20910, +20720, +20745, +20751, +20763, +20780, +20783, +20806, +20828, +20848, +20854, +20873, +20876, +20879, +20882, +20905, 20923, -20946, -20952, -20988, -20988, -20991, -21016, -21032, -21035, -21035, -21035, -21038, -21038, -21053, -21056, -21056, -21056, -21067, -21077, -21080, -21080, -21106, -21129, -21129, -21129, -21144, -21147, -21158, -21158, -21158, -21177, -21198, -21238, -21302, -21302, -21339, -21371, -21374, -21394, -21407, -21407, -21417, -21420, -21437, -21451, -21454, -21454, -21496, -21514, -21514, -21517, -21517, -21535, -21535, -21535, -21554, -21580, -21580, -21602, -21609, -21623, -21623, -21626, -21636, -21662, -21677, -21686, -21686, -21691, -21697, -21713, -21727, -21751, -21776, -21786, -21812, -21829, -21882, -21895, -21902, -21926, -21951, +20942, +20945, +20971, +20974, +20977, +20977, +20980, +20980, +20997, +21004, +21013, +21101, +21104, +21107, +21123, +21160, +21160, +21163, +21163, +21176, +21204, +21204, +21243, +21243, +21250, +21250, +21266, +21269, +21278, +21291, +21314, +21314, +21317, +21320, +21323, +21326, +21350, +21350, +21358, +21378, +21404, +21435, +21435, +21442, +21452, +21452, +21474, +21477, +21497, +21497, +21507, +21543, +21546, +21546, +21556, +21562, +21579, +21579, +21579, +21616, +21619, +21622, +21635, +21638, +21641, +21647, +21668, +21699, +21699, +21699, +21715, +21740, +21746, +21756, +21759, +21779, +21817, +21825, +21847, +21864, +21894, +21897, +21928, +21950, +21956, +21959, 21970, -21980, -21990, -22002, -22011, -22021, -22031, -22052, -22062, -22065, -22071, -22082, -22114, -22127, -22135, -22141, +21989, +21992, +21992, +22001, +22026, +22026, +22029, +22057, +22084, +22096, +22107, +22123, 22144, -22157, -22180, -22183, -22209, -22255, +22150, +22156, +22162, +22165, +22171, +22174, +22174, +22204, +22210, +22210, +22221, +22270, 22289, -22325, -22363, +22292, +22311, +22333, +22336, +22336, +22344, 22374, +22382, +22385, +22393, 22413, -22431, -22431, -22434, -22445, -22465, -22472, -22475, -22491, -22523, -22538, -22557, -22581, -22581, -22591, -22591, -22604, -22604, -22607, -22620, -22623, -22634, -22669, -22672, -22672, -22684, -22703, -22724, -22738, -22784, -22788, -22803, -22803, -22803, -22844, -22863, -22898, -22898, -22913, -22913, -22913, -22933, -22933, -22967, -22977, -23017, -23044, -23044, -23047, -23054, +22452, +22452, +22470, +22486, +22500, +22500, +22515, +22515, +22539, +22542, +22552, +22568, +22568, +22568, +22593, +22596, +22599, +22608, +22608, +22639, +22659, +22662, +22665, +22668, +22668, +22674, +22677, +22726, +22729, +22729, +22770, +22810, +22810, +22810, +22810, +22810, +22810, +22810, +22810, +22838, +22855, +22855, +22860, +22881, +22936, +22940, +22940, +23000, +23004, +23004, +23007, +23030, +23033, +23036, +23052, +23055, 23061, -23066, -23077, -23084, -23094, -23101, -23113, -23120, -23163, -23170, -23170, -23189, -23196, -23196, -23221, -23221, -23261, -23271, -23278, -23278, -23315, -23322, -23354, -23365, -23365, -23388, -23393, -23419, -23424, -23424, -23424, -23449, -23464, -23471, -23490, +23061, +23067, +23070, +23145, +23148, +23173, +23203, +23206, +23209, +23219, +23249, +23299, +23302, +23308, +23325, +23370, +23376, +23387, +23448, +23451, +23457, +23469, 23509, -23509, -23516, -23540, -23567, -23577, -23584, -23613, -23620, -23620, -23620, -23620, -23620, -23635, -23642, -23645, -23645, -23654, -23654, -23668, -23684, -23706, -23727, -23745, -23758, -23773, -23784, -23791, -23821, -23849, -23849, -23862, -23891, -23917, -23924, -23933, -23965, -23982, -23989, -24001, +23550, +23553, +23578, +23599, +23616, +23619, +23629, +23632, +23655, +23658, +23677, +23685, +23696, +23699, +23712, +23752, +23752, +23752, +23781, +23785, +23823, +23823, +23841, +23841, +23844, +23844, +23847, +23847, +23879, +23886, +23886, +23913, +23956, +23959, +23970, +23970, +23970, +23970, +23991, +24005, +24008, 24011, -24049, -24057, -24080, -24096, -24125, -24159, -24173, -24186, -24186, -24200, -24229, -24255, -24255, -24262, -24295, -24305, +24011, +24062, +24079, +24079, +24088, +24110, +24110, +24120, +24158, +24158, +24158, +24158, +24161, +24161, +24194, +24194, +24203, +24203, +24228, +24228, +24242, +24253, +24272, +24272, +24272, +24292, 24329, -24336, -24372, -24372, -24379, -24413, -24430, -24448, -24453, -24471, -24484, -24484, -24496, -24496, -24529, -24553, -24553, -24560, -24593, -24619, -24667, -24674, +24329, +24329, +24342, +24361, +24361, +24361, +24361, +24423, +24423, +24437, +24437, +24437, +24444, +24455, +24472, +24478, +24488, +24508, +24522, +24536, +24536, +24536, +24556, +24556, +24556, +24556, +24566, +24575, +24575, +24589, +24625, +24625, +24625, +24653, 24687, -24705, -24705, -24733, -24740, -24757, -24757, -24764, -24793, -24810, -24810, -24824, -24824, -24859, -24859, -24883, -24897, -24897, -24913, -24919, -24919, -24919, -24926, -24938, -24938, -24943, -24954, -24987, -25010, -25017, -25041, -25041, -25067, -25118, -25122, -25129, -25149, -25171, -25185, -25211, +24702, +24702, +24725, +24765, +24790, +24790, +24790, +24802, +24802, +24802, +24811, +24832, +24842, +24842, +24866, +24882, +24882, +24882, +24892, +24924, +24990, +24990, +24990, +24990, +25015, +25019, +25019, +25065, +25120, +25120, +25120, +25137, +25137, +25137, +25146, +25165, +25165, +25165, +25189, +25213, +25229, 25239, -25262, -25262, -25262, -25287, +25256, +25268, +25268, +25268, +25268, 25293, -25319, -25347, -25347, -25347, -25356, -25382, -25382, -25397, -25397, -25405, -25405, -25405, -25405, -25420, -25432, -25432, -25471, +25293, +25300, +25332, +25361, +25369, +25369, +25369, +25369, +25369, +25369, +25379, +25392, +25392, +25402, +25414, +25462, +25493, +25493, +25493, +25493, +25500, 25507, -25531, -25541, -25563, +25533, +25548, +25555, +25555, +25555, 25591, -25591, -25591, -25605, +25595, +25595, +25604, 25612, -25626, -25648, -25671, -25692, -25726, -25739, -25746, -25750, -25774, -25785, -25805, -25812, +25656, +25656, +25656, +25713, +25717, +25717, +25724, +25783, +25802, +25807, +25816, 25843, 25843, -25843, -25843, -25850, -25888, -25898, +25847, +25847, 25905, -25905, -25942, -25949, -25956, -25973, -25984, -25991, -26074, -26091, -26101, -26108, -26115, -26125, -26168, -26185, -26192, -26206, -26216, -26223, -26245, -26245, -26245, -26257, -26261, -26283, -26310, -26328, -26350, -26370, -26370, -26383, -26413, -26461, -26475, -26506, -26529, -26529, -26529, -26529, -26543, -26566, -26566, -26579, -26638, -26638, -26638, -26660, -26660, -26678, -26678, -26725, -26725, +25915, +25923, +25952, +25988, +26001, +26001, +26001, +26008, +26035, +26039, +26059, +26059, +26059, +26059, +26079, +26103, +26118, +26118, +26127, +26127, +26127, +26127, +26127, +26135, +26159, +26169, +26169, +26188, +26203, +26203, +26210, +26272, +26277, +26308, +26308, +26308, +26313, +26313, +26313, +26335, +26356, +26356, +26356, +26367, +26367, +26367, +26411, +26428, +26428, +26428, +26438, +26438, +26456, +26456, +26472, +26517, +26517, +26517, +26540, +26569, +26569, +26569, +26578, +26578, +26578, +26584, +26584, +26601, +26645, +26649, +26649, +26715, +26735, 26739, -26754, -26754, -26761, -26774, -26774, -26774, -26781, -26788, -26795, -26811, -26817, -26833, -26833, -26833, -26847, -26847, -26880, -26886, -26899, -26899, -26899, -26906, -26928, -26933, -26933, -26964, -26973, -26995, -26995, -26995, -27011, -27011, -27031, -27048, -27048, -27055, -27060, -27074, -27090, -27090, -27110, -27137, -27137, -27137, -27159, -27175, -27187, -27205, -27205, -27225, -27225, -27255, -27264, -27264, -27264, -27264, -27264, -27264, -27288, -27292, -27292, -27326, -27333, -27337, -27375, -27387, -27403, -27415, -27430, -27446, -27462, -27483, -27514, -27540, -27547, -27556, -27566, -27573, +26773, +26773, +26773, +26773, +26773, +26773, +26773, +26773, +26773, +26793, +26793, +26793, +26804, +26804, +26835, +26845, +26857, +26869, +26891, +26891, +26895, +26916, +26916, +26916, +26916, +26988, +26996, +26996, +26996, +27006, +27028, +27028, +27028, +27068, +27068, +27068, +27073, +27093, +27103, +27109, +27134, +27134, +27134, +27134, +27148, +27161, +27174, +27174, +27203, +27203, +27210, +27210, +27218, +27223, +27223, +27229, +27233, +27268, +27284, +27284, +27284, +27284, +27284, +27284, +27296, +27343, +27343, +27343, +27348, +27373, +27373, +27373, +27373, +27391, +27391, +27391, +27391, +27391, +27391, +27391, +27391, +27391, +27410, +27410, +27429, +27470, +27492, +27492, +27492, +27511, +27524, +27524, +27542, +27552, +27552, +27559, +27559, 27580, -27586, -27586, -27590, -27597, -27657, -27679, -27702, -27724, -27740, -27740, +27580, +27580, +27591, +27623, +27623, +27623, +27632, +27651, +27651, +27651, +27651, +27673, +27694, +27694, +27703, +27703, +27739, +27739, +27739, 27768, -27783, -27790, -27790, -27809, -27816, -27840, -27847, -27847, -27872, -27894, -27910, -27937, -27937, -27954, -27977, -27977, -27984, +27768, +27768, +27777, +27777, +27777, +27777, +27777, +27810, +27825, +27825, +27832, +27842, +27859, +27866, +27871, +27871, +27881, +27881, +27881, +27881, +27899, +27899, +27913, +27931, +27936, +27936, +27952, +27969, +27988, 27998, -28032, -28079, -28093, -28100, -28107, -28154, -28160, -28166, -28166, -28176, -28190, -28217, -28260, -28260, -28305, -28305, -28326, -28361, -28422, +28003, +28031, +28031, +28031, +28041, +28112, +28117, +28117, +28123, +28157, +28175, +28175, +28175, +28175, +28175, +28175, +28207, +28220, +28227, +28227, +28237, +28281, +28281, +28281, +28289, +28308, +28327, +28327, +28327, +28327, +28327, +28347, +28365, +28386, +28408, +28408, +28423, +28439, +28439, 28439, -28455, 28465, -28465, -28465, -28494, -28500, -28516, -28524, -28531, -28538, -28552, -28576, -28576, -28581, -28581, -28581, -28593, -28593, -28593, -28648, -28668, -28675, -28675, -28685, +28485, +28501, +28522, +28529, +28529, +28529, +28529, +28529, +28551, +28551, +28557, +28557, +28574, +28580, +28580, +28580, +28591, +28614, +28625, +28625, +28651, +28669, +28669, +28679, +28689, 28700, 28700, 28700, -28707, -28725, -28725, -28732, -28747, -28781, -28781, -28800, -28812, -28833, -28858, -28865, -28891, -28908, -28942, -28959, -28959, -28959, -28975, -28982, -28989, -28989, -28996, -29017, -29035, -29035, -29047, -29063, -29087, -29093, -29093, -29114, -29114, -29121, -29121, -29138, -29208, -29213, -29213, -29213, +28700, +28700, +28700, +28720, +28741, +28748, +28748, +28748, +28765, +28806, +28806, +28836, +28836, +28856, +28856, +28856, +28875, +28875, +28875, +28875, +28896, +28896, +28896, +28909, +28928, +28935, +28935, +28935, +28968, +28981, +28981, +28981, +28999, +28999, +29006, +29059, +29076, +29076, +29076, +29086, +29090, +29090, +29119, +29119, +29119, +29119, +29132, +29132, +29160, +29166, +29166, +29175, +29194, +29194, +29201, +29201, +29218, 29228, -29238, -29257, -29257, -29257, -29257, -29257, +29254, +29254, +29254, +29284, +29284, 29300, -29318, -29337, -29344, -29382, -29389, -29407, -29407, -29414, -29421, -29457, -29457, -29471, -29494, -29510, -29510, -29522, -29538, -29544, -29544, -29544, -29544, -29558, -29580, -29589, -29589, -29589, -29589, -29626, -29644, -29671, -29680, -29702, -29713, -29713, -29713, -29724, -29731, -29731, -29757, -29764, -29771, -29800, -29815, -29815, -29831, -29870, -29896, -29940, -29947, -29954, -29954, -29954, -29992, -30006, -30035, -30058, -30079, -30086, -30099, -30122, -30166, -30221, -30238, -30245, -30245, -30259, -30266, -30287, -30316, -30323, -30332, -30332, -30341, -30348, -30355, -30366, -30385, -30419, -30426, -30473, -30518, -30551, -30579, -30579, -30596, -30615, -30615, -30615, -30622, -30626, -30643, -30661, -30661, -30661, -30661, +29311, +29311, +29349, +29355, +29370, +29370, +29370, +29381, +29397, +29397, +29397, +29397, +29418, +29459, +29459, +29492, +29492, +29532, +29550, +29550, +29594, +29594, +29594, +29610, +29623, +29640, +29650, +29662, +29690, +29741, +29741, +29741, +29781, +29787, +29787, +29797, +29797, +29797, +29797, +29844, +29866, +29878, +29878, +29889, +29906, +29906, +29906, +29906, +29913, +29928, +29944, +29959, +29976, +29976, +29976, +29976, +29986, +29986, +29986, +29986, +30028, +30028, +30028, +30053, +30064, +30077, +30077, +30089, +30113, +30135, +30135, +30150, +30150, +30172, +30172, +30190, +30190, +30190, +30190, +30201, +30239, +30239, +30249, +30261, +30274, +30274, +30274, +30280, +30280, +30311, +30311, +30311, +30327, +30346, +30346, +30346, +30346, +30364, +30364, +30364, +30425, +30434, +30434, +30434, +30452, +30469, +30469, +30491, +30491, +30526, +30526, +30535, +30540, +30553, +30564, +30599, +30640, 30667, -30699, -30699, -30721, -30746, -30746, -30758, -30783, -30801, -30824, -30824, -30843, -30876, -30909, -30929, +30703, +30713, +30723, +30762, +30826, +30830, +30866, +30866, +30873, +30891, +30895, +30905, +30913, +30928, +30956, +30967, +30967, 30976, -30986, -30991, -31005, -31026, -31026, -31045, -31113, -31153, -31160, -31167, -31183, -31210, -31225, -31231, -31247, -31247, -31265, -31288, -31359, -31365, -31376, -31376, -31391, -31391, -31391, -31395, -31395, -31408, -31414, -31434, -31448, -31474, -31491, -31511, -31520, -31548, -31578, -31578, -31578, -31578, -31602, -31609, -31645, -31652, -31671, -31677, -31712, -31726, -31737, -31737, -31737, -31744, -31744, -31744, -31751, -31751, -31762, -31762, -31769, -31776, -31786, -31802, -31802, -31817, -31832, -31852, -31852, -31852, -31859, +31014, +31041, +31051, +31051, +31051, +31062, +31076, +31093, +31093, +31093, +31093, +31104, +31146, +31146, +31146, +31164, +31223, +31244, +31244, +31262, +31262, +31262, +31262, +31277, +31277, +31277, +31284, +31295, +31315, +31338, +31338, +31348, +31415, +31432, +31454, +31475, +31494, +31494, +31494, +31494, +31507, +31524, +31524, +31543, +31549, +31568, +31568, +31568, +31568, +31608, +31608, +31624, +31653, +31703, +31710, +31710, +31710, +31738, +31738, +31757, +31763, +31778, +31778, +31778, +31803, +31803, +31811, +31811, +31818, +31818, +31818, +31818, +31827, +31827, +31836, +31842, +31842, +31855, +31855, 31866, -31889, -31889, -31896, -31903, -31903, -31910, -31920, -31945, -31952, -31952, -31969, -31969, -31985, -31985, -31985, -31985, -31985, -31985, -31985, -32009, -32025, -32025, -32058, -32071, -32114, -32114, -32128, -32152, -32159, -32159, -32159, -32166, -32187, -32187, +31907, +31907, +31917, +31924, +31924, +31930, +31942, +31957, +31957, +31957, +31957, +31963, +31980, +31991, +32005, +32023, +32047, +32059, +32059, +32059, +32080, +32080, +32087, +32087, +32111, +32111, +32120, +32131, +32161, +32182, +32190, 32200, -32200, -32226, -32226, -32233, -32233, -32233, -32242, -32242, -32242, +32230, +32251, +32251, +32251, +32255, +32255, +32260, +32260, +32267, +32267, 32282, -32282, -32282, -32282, -32282, -32282, -32289, -32305, +32299, 32312, -32312, -32317, -32357, -32357, -32378, -32378, -32393, -32393, -32400, -32423, -32423, -32423, -32431, -32431, -32431, -32449, -32470, -32494, -32494, -32494, -32501, -32501, -32543, -32561, +32339, +32339, +32370, +32370, +32395, +32395, +32436, +32447, +32468, +32475, +32493, +32519, +32533, +32533, +32545, +32562, 32581, 32581, -32629, -32644, -32662, -32673, -32673, -32696, -32705, -32722, -32722, -32728, -32763, -32787, -32803, -32803, -32818, -32865, -32865, -32875, -32882, -32911, -32911, -32943, -32973, -33000, -33018, -33018, -33024, -33060, -33060, -33071, -33071, -33071, -33071, -33085, -33110, -33149, -33149, -33157, -33157, -33206, -33206, -33206, -33206, -33222, -33242, -33242, -33252, -33252, -33252, -33252, -33271, -33285, -33301, -33301, -33301, -33332, -33360, -33360, -33360, -33360, -33398, -33398, -33398, -33398, -33412, -33412, -33412, -33412, -33412, -33459, -33482, -33486, -33486, -33499, -33514, -33514, -33545, -33545, -33545, -33567, -33567, -33567, -33584, -33589, -33605, -33620, -33635, -33667, -33695, -33706, -33722, -33751, -33758, -33758, -33764, -33764, -33764, -33781, -33793, -33804, -33804, -33819, -33826, -33826, -33826, -33826, -33826, -33835, -33835, -33835, +32593, +32597, +32597, +32597, +32597, +32597, +32654, +32654, +32693, +32737, +32737, +32737, +32764, +32791, +32816, +32816, +32816, +32820, +32835, +32835, +32835, +32879, +32918, +32924, +32944, +32978, +33039, +33058, +33058, +33058, +33058, +33058, +33065, +33105, +33105, +33105, +33105, +33120, +33129, +33129, +33129, +33184, +33184, +33184, +33184, +33189, +33220, +33220, +33220, +33220, +33265, +33265, +33278, +33288, +33288, +33288, +33294, +33294, +33325, +33325, +33347, +33357, +33391, +33401, +33417, +33439, +33456, +33456, +33476, +33512, +33564, +33564, +33564, +33581, +33631, +33631, +33640, +33640, +33650, +33650, +33657, +33678, +33691, +33698, +33698, +33731, +33741, +33741, +33741, +33778, +33778, +33778, +33778, +33794, +33824, +33824, 33848, -33862, -33862, -33862, -33866, -33938, -33938, -33938, -33938, -33955, -33971, -33971, -33971, -33983, -33983, -33990, -33990, -34027, -34050, -34050, -34054, -34079, -34079, -34079, -34109, -34124, -34140, -34140, -34140, -34140, -34152, -34163, -34163, -34175, -34214, -34214, -34221, -34221, -34231, -34231, -34231, -34253, -34253, -34270, -34270, -34270, -34303, -34303, -34319, -34325, -34335, -34344, -34357, -34373, -34393, -34393, -34431, -34461, -34471, -34471, -34471, -34492, -34527, -34527, -34535, -34547, -34547, +33848, +33848, +33848, +33848, +33867, +33867, +33867, +33867, +33867, +33867, +33867, +33867, +33914, +33945, +33945, +33945, +33992, +33992, +33992, +33992, +34038, +34052, +34052, +34052, +34052, +34062, +34062, +34069, +34069, +34082, +34094, +34102, +34126, +34126, +34126, +34135, +34154, +34154, +34154, +34173, +34189, +34204, +34209, +34223, +34223, +34241, +34241, +34241, +34241, +34241, +34241, +34249, +34281, +34281, +34281, +34289, +34298, +34298, +34298, +34298, +34341, +34341, +34341, +34341, +34341, +34346, +34346, +34356, +34356, +34356, +34370, +34370, +34417, +34424, +34424, +34451, +34467, +34548, +34548, 34554, -34558, -34558, -34558, -34558, -34613, -34613, -34613, -34647, -34665, -34691, +34554, +34619, +34626, +34638, +34638, +34657, +34657, +34670, +34687, 34695, -34713, -34727, -34760, -34760, -34760, -34765, -34765, -34787, -34787, -34787, -34814, -34820, -34834, -34834, -34866, -34881, -34881, -34881, -34881, -34881, -34881, -34902, -34907, -34907, -34917, -34917, -34917, -34917, -34928, -34933, -34960, -34972, -34972, -34981, -34993, -35003, -35003, -35003, -35013, -35013, -35054, -35067, -35067, -35067, -35074, -35081, -35105, -35120, -35120, -35120, -35120, +34695, +34708, +34728, +34728, +34738, +34748, +34748, +34748, +34748, +34748, +34755, +34805, +34805, +34805, +34858, +34858, +34858, +34858, +34897, +34906, +34920, +34920, +34927, +34927, +34927, +34927, +34934, +34952, +34952, +34984, +35000, +35007, +35014, +35029, +35048, +35090, +35090, +35090, +35090, +35101, +35101, +35101, +35101, +35118, +35118, +35128, +35128, 35142, -35148, -35148, -35173, -35205, -35205, -35214, -35234, -35266, -35266, -35266, -35276, -35290, +35142, +35142, +35160, +35174, +35174, +35178, +35178, +35208, +35208, +35208, +35253, +35253, +35253, +35259, +35277, +35289, +35289, +35301, 35320, -35344, -35373, -35408, -35435, +35341, +35341, +35359, +35359, +35416, +35416, +35416, +35447, 35463, -35500, -35500, -35500, -35511, -35516, -35516, -35516, -35522, -35522, -35544, -35544, -35566, -35566, +35470, +35496, +35549, +35549, +35549, +35562, +35569, +35569, +35569, 35582, -35594, -35594, -35594, -35594, -35594, -35636, -35636, -35654, -35660, -35680, -35708, -35708, -35729, -35729, -35729, -35734, -35751, -35751, -35766, -35766, -35791, -35791, -35809, -35809, -35809, -35825, -35875, -35875, -35888, -35927, -35927, -35933, -35933, -35942, -35960, -35960, -35972, -35991, -35991, -36005, -36041, -36041, -36091, -36091, -36115, -36136, -36152, -36168, -36179, -36209, -36227, -36236, -36263, -36263, -36263, -36263, -36263, -36281, -36292, -36292, -36301, -36301, -36372, -36372, -36377, -36401, -36420, -36434, +35582, +35582, +35582, +35582, +35608, +35608, +35615, +35615, +35641, +35655, +35655, +35665, +35665, +35665, +35675, +35675, +35733, +35750, +35750, +35758, +35770, +35777, +35777, +35777, +35801, +35801, +35801, +35801, +35839, +35839, +35839, +35839, +35855, +35855, +35862, +35862, +35878, +35878, +35878, +35878, +35897, +35937, +35937, +35937, +35985, +36000, +36000, +36000, +36025, +36049, +36060, +36081, +36094, +36094, +36094, +36094, +36127, +36167, +36167, +36173, +36185, +36185, +36185, +36192, +36244, +36272, +36279, +36279, +36291, +36323, +36323, +36323, +36387, +36400, +36400, +36410, 36442, 36442, 36442, -36476, -36515, -36536, -36570, -36570, -36580, -36580, -36580, -36580, -36580, -36598, -36598, -36598, -36616, -36635, -36641, -36641, -36641, -36641, -36641, -36641, +36442, +36442, +36456, +36463, +36463, +36508, +36508, +36508, +36518, +36554, +36623, +36643, 36651, -36685, -36685, -36689, -36689, -36689, -36689, -36689, -36694, -36723, +36672, +36698, +36705, +36715, 36735, -36757, -36757, -36757, -36757, -36757, -36783, -36783, -36807, -36835, -36835, -36866, -36879, -36885, +36735, +36735, +36735, +36768, +36768, +36777, +36788, +36788, +36788, +36788, +36788, +36805, +36852, +36870, +36883, 36900, -36919, -36961, -36978, +36912, +36912, +36912, +36931, +36938, +36938, +36938, +36953, +36975, +36975, +36987, +36987, 36987, 37000, -37044, -37076, -37087, -37103, -37117, -37117, -37128, -37151, -37169, -37196, -37226, -37226, -37252, -37252, -37252, -37275, -37292, -37292, -37292, -37292, -37292, -37292, -37292, -37292, -37292, +37014, +37039, +37056, +37063, +37080, +37091, +37091, +37098, +37107, +37125, +37162, +37162, +37162, +37218, +37241, +37241, +37261, +37308, +37324, +37324, 37324, -37335, -37335, 37352, -37358, +37352, +37352, 37377, -37399, -37410, -37445, -37445, -37451, -37451, -37451, -37462, -37510, -37510, -37555, -37555, -37555, -37555, -37555, -37569, -37620, -37631, -37648, -37656, -37666, -37673, -37697, -37697, -37723, -37769, -37769, -37769, -37788, -37826, -37851, -37851, -37851, -37851, -37873, -37873, +37383, +37383, +37383, +37383, +37391, +37427, +37427, +37427, +37427, +37427, +37427, +37427, +37444, +37476, +37490, +37500, +37538, +37538, +37538, +37538, +37552, +37591, +37598, +37632, +37682, +37682, +37682, +37682, +37706, +37726, +37726, +37726, +37759, +37759, +37759, +37759, +37759, +37773, +37773, +37773, +37777, +37792, +37797, +37797, +37797, +37797, +37797, +37807, +37807, +37841, +37845, +37855, 37873, 37891, -37891, -37891, -37904, -37909, -37909, -37909, -37909, -37916, -37943, -37954, -37954, -37964, -37976, -37976, -37989, -37989, -38018, -38018, -38018, -38018, -38025, -38025, -38037, -38074, -38091, -38091, -38091, -38104, -38104, -38104, -38136, -38136, -38163, -38163, -38199, -38218, -38218, -38218, -38218, -38258, -38258, -38258, -38258, -38287, -38308, +37898, +37907, +37907, +37907, +37907, +37934, +37956, +37956, +37956, +38006, +38030, +38044, +38044, +38051, +38099, +38119, +38119, +38119, +38119, +38119, +38125, +38133, +38203, +38203, +38203, +38213, +38249, +38280, +38280, +38280, +38290, +38307, +38307, 38323, -38323, -38323, -38340, -38375, -38419, -38419, -38419, -38419, -38419, -38419, -38435, -38471, -38471, -38504, -38526, -38526, -38582, -38589, -38589, -38609, -38619, -38633, -38633, -38667, -38667, -38667, -38667, -38680, -38709, -38709, -38709, -38709, -38737, -38737, -38737, -38760, -38760, -38760, -38760, -38760, -38779, -38833, -38833, -38883, -38883, -38883, -38889, -38908, -38956, -38967, -38988, -38988, -39028, -39047, -39047, -39095, -39149, -39158, -39158, -39158, -39182, -39233, -39262, -39277, -39313, -39313, -39345, -39362, -39369, -39369, -39378, -39395, -39395, -39429, -39438, -39453, -39502, -39502, -39539, -39539, -39593, +38329, +38329, +38335, +38343, +38368, +38405, +38405, +38415, +38450, +38461, +38461, +38469, +38548, +38569, +38576, +38593, +38635, +38635, +38635, +38664, +38686, +38686, +38686, +38697, +38731, +38745, +38755, +38759, +38763, +38783, +38783, +38792, +38817, +38817, +38817, +38826, +38847, +38847, +38858, +38858, +38880, +38896, +38896, +38896, +38914, +38940, +38940, +38940, +38978, +38978, +38978, +38987, +39012, +39035, +39035, +39045, +39045, +39085, +39092, +39116, +39128, +39168, +39168, +39201, +39209, +39209, +39209, +39209, +39273, +39273, +39283, +39283, +39326, +39326, +39326, +39326, +39341, +39341, +39341, +39355, +39382, +39403, +39403, +39413, +39435, +39435, +39435, +39452, +39475, +39482, +39482, +39490, +39524, +39524, +39524, +39529, +39587, 39618, -39644, -39689, -39712, -39712, -39712, -39736, -39736, -39736, -39746, -39759, -39777, -39777, -39802, -39802, -39812, -39812, +39618, +39628, +39628, +39628, +39628, +39628, +39641, +39656, +39656, +39668, +39682, +39687, +39694, +39699, +39699, +39704, +39704, +39738, +39756, +39756, +39756, +39772, +39806, 39825, 39825, -39832, -39832, -39847, -39847, -39872, -39911, -39957, -39991, -39991, -40009, -40026, -40026, -40035, -40035, -40035, -40035, -40039, -40039, -40039, +39825, +39834, +39840, +39845, +39883, +39883, +39904, +39904, +39904, +39922, +39945, +39945, +39956, +39976, +39999, +39999, +40015, +40051, +40051, +40051, +40051, +40051, +40051, 40061, -40069, -40086, -40086, -40091, -40111, -40150, -40179, -40199, -40215, -40215, -40215, -40238, -40238, -40238, -40252, -40252, -40252, -40259, -40259, -40321, -40321, -40328, -40328, -40346, -40346, -40369, -40380, -40388, -40388, -40388, -40407, -40423, -40423, -40423, -40436, -40436, -40443, -40449, -40457, -40473, -40473, -40496, -40502, -40534, -40556, -40574, -40595, -40613, -40613, -40630, -40637, -40637, -40644, -40650, -40675, -40686, -40686, -40686, -40752, +40061, +40071, +40084, +40084, +40084, +40100, +40128, +40135, +40135, +40147, +40162, +40162, +40166, +40187, +40187, +40187, +40187, +40187, +40210, +40210, +40229, +40249, +40249, +40249, +40256, +40256, +40267, +40271, +40282, +40319, +40319, +40319, +40335, +40363, +40363, +40363, +40392, +40427, +40433, +40445, +40451, +40465, +40494, +40494, +40494, +40506, +40521, +40527, +40536, +40555, +40569, +40569, +40569, +40581, +40587, +40587, +40587, +40605, +40611, +40611, +40628, +40685, +40715, +40715, +40715, +40734, +40734, +40734, 40781, -40802, -40815, +40787, +40817, 40821, -40838, -40838, -40838, -40855, -40887, -40930, -40949, -40965, -40969, -40988, -40988, -40988, -40988, -40988, -40988, -41020, -41036, -41059, -41074, -41074, -41093, -41098, -41098, -41104, -41156, +40821, +40830, +40871, +40871, +40875, +40875, +40886, +40886, +40904, +40926, +40932, +40932, +40942, +40948, +40948, +40948, +40948, +41023, +41054, +41058, +41068, +41068, +41072, +41086, +41086, +41117, +41123, +41123, +41129, +41129, +41154, +41161, +41177, +41177, 41184, 41184, -41200, -41223, -41238, -41244, -41244, -41244, -41267, -41267, -41267, -41273, -41273, -41273, -41297, -41297, -41303, -41324, -41335, -41354, -41360, -41360, -41360, -41360, -41367, -41367, +41198, +41208, +41243, +41243, +41243, +41278, +41278, +41278, +41278, +41294, +41310, +41310, +41337, +41371, 41383, -41408, -41449, -41486, -41514, -41514, -41514, -41514, -41514, -41529, -41548, -41548, -41589, -41608, -41608, -41628, -41628, -41667, -41701, -41701, -41719, -41719, -41732, -41754, -41785, -41810, -41845, -41860, -41860, -41860, -41873, -41890, -41921, -41942, -41942, -41952, -41975, -42000, -42000, -42000, -42021, +41383, +41383, +41390, +41444, +41444, +41464, +41464, +41483, +41483, +41519, +41595, +41625, +41625, +41637, +41637, +41668, +41668, +41668, +41687, +41715, +41715, +41715, +41715, +41715, +41715, +41722, +41753, +41775, +41775, +41775, +41781, +41796, +41803, +41820, +41820, +41820, +41820, +41829, +41829, +41839, +41839, +41839, +41864, +41864, +41864, +41876, +41935, +41957, +41957, +41982, +42017, 42034, 42034, -42034, -42034, -42034, -42049, -42049, -42096, -42096, -42096, -42096, -42107, -42107, -42122, -42173, -42208, -42214, -42231, -42231, -42238, -42252, -42252, -42266, -42292, +42046, +42062, +42109, +42109, +42115, +42136, +42136, +42136, +42157, +42196, +42223, +42230, +42230, +42247, +42247, +42247, +42256, +42269, +42269, +42279, +42279, 42316, -42331, -42331, -42331, -42350, +42316, +42316, +42316, +42316, +42330, +42330, +42330, +42348, +42348, +42348, +42348, 42365, -42371, -42378, -42389, -42395, -42395, -42435, -42446, -42446, -42458, -42458, -42476, -42476, -42476, -42486, -42506, -42510, -42559, -42565, -42583, -42600, -42643, -42650, -42656, -42668, -42688, -42698, -42738, -42761, -42761, -42800, -42806, -42847, -42851, -42877, -42881, -42917, -42929, -42945, -42945, -42945, -42951, -42951, +42382, +42382, +42406, +42406, +42406, +42406, +42411, +42431, +42463, +42473, +42473, +42490, +42490, +42490, +42514, +42514, +42520, +42520, +42532, +42538, +42538, +42538, +42547, +42608, +42648, +42648, +42648, +42684, +42684, +42692, +42692, +42710, +42758, +42758, +42758, +42771, +42771, +42771, +42771, +42826, +42833, +42837, +42853, +42890, +42903, +42903, +42914, +42948, 42967, -43009, -43009, -43028, -43040, -43040, -43046, -43046, -43072, -43088, -43097, -43139, -43146, -43172, -43192, -43192, -43192, -43220, -43232, -43238, -43238, -43256, -43256, -43256, -43277, -43295, -43313, -43325, -43325, -43349, -43367, -43380, -43387, -43425, -43441, -43484, -43484, -43507, -43507, -43526, -43537, -43572, -43577, -43577, +42982, +43002, +43002, +43002, +43002, +43002, +43064, +43099, +43099, +43099, +43132, +43147, +43147, +43175, +43219, +43237, +43237, +43243, +43253, +43263, +43263, +43282, +43323, +43362, +43362, +43369, +43411, +43418, +43418, +43434, +43450, +43454, +43454, +43454, +43472, +43472, +43472, +43472, +43472, +43492, +43502, +43506, +43525, +43525, +43525, +43549, 43587, -43591, -43591, -43619, -43626, -43646, -43646, -43674, -43704, -43704, -43751, -43781, -43798, -43824, -43846, -43846, -43862, -43862, -43878, -43878, -43884, -43911, -43911, -43911, -43911, -43911, -43925, -43933, -43943, -43949, -43949, -43976, -43976, -43976, -43986, -44000, -44000, -44012, -44035, -44053, -44053, -44053, +43594, +43594, +43623, +43649, +43659, +43672, +43678, +43678, +43678, +43678, +43678, +43678, +43678, +43678, +43699, +43699, +43699, +43699, +43699, +43721, +43747, +43747, +43747, +43783, +43788, +43788, +43788, +43805, +43805, +43833, +43833, +43854, +43854, +43854, +43881, +43897, +43897, +43897, +43914, +43914, +43947, +43974, +43984, +43995, +43995, +43995, +43995, +43995, +44022, +44022, +44033, +44041, 44068, -44090, -44118, -44130, -44130, -44130, -44130, -44142, -44149, -44155, -44155, -44155, -44155, -44174, -44174, -44174, -44190, -44190, -44215, -44215, -44215, +44068, +44097, +44127, +44137, +44137, +44137, +44141, +44158, +44158, +44178, +44194, +44203, +44210, 44231, -44263, -44273, -44273, -44273, -44273, -44296, -44311, -44311, -44311, -44327, -44327, -44327, -44345, -44368, -44368, -44368, -44368, -44368, -44380, -44414, -44414, -44422, -44439, -44459, -44459, -44484, -44484, -44484, -44503, -44503, -44520, -44520, -44520, -44520, -44524, -44557, -44557, -44564, -44584, -44584, -44606, -44614, -44614, -44614, -44614, -44634, -44648, -44679, -44685, -44728, -44778, -44785, -44792, -44792, -44803, -44814, -44829, -44845, -44863, -44870, -44895, -44910, -44919, -44960, -44960, -44972, -44972, -44972, -44972, -44985, -45017, -45036, -45062, -45062, -45074, -45088, -45105, -45136, -45142, -45142, -45174, -45186, -45193, -45193, +44261, +44261, +44261, +44279, +44279, +44287, +44287, +44287, +44307, +44324, +44324, +44330, +44340, +44340, +44348, +44376, +44390, +44390, +44390, +44390, +44390, +44390, +44404, +44404, +44449, +44462, +44477, +44485, +44540, +44540, +44540, +44540, +44574, +44590, +44590, +44603, +44642, +44657, +44657, +44672, +44672, +44682, +44682, +44724, +44766, +44766, +44766, +44780, +44798, +44809, +44821, +44821, +44821, +44821, +44821, +44821, +44838, +44861, +44861, +44861, +44871, +44871, +44871, +44892, +44941, +44941, +44941, +44950, +44950, +44961, +44961, +44961, +44977, +45024, +45034, +45080, +45094, +45106, +45106, +45113, +45130, +45145, +45145, +45155, +45175, +45175, +45175, 45203, 45203, -45203, -45213, -45232, -45232, -45236, +45209, +45209, +45209, +45209, +45209, +45209, +45221, +45230, +45230, +45230, +45238, 45277, -45297, -45297, -45297, -45302, -45315, -45315, -45361, -45385, -45420, -45455, -45455, -45455, -45455, -45464, +45301, +45307, +45313, +45313, +45313, +45313, +45323, +45389, +45389, +45389, +45395, +45434, +45451, +45451, +45451, +45469, 45486, -45490, -45490, +45486, +45508, 45508, 45524, 45524, -45524, -45543, -45543, -45543, -45589, -45613, -45629, -45641, +45550, +45580, +45605, +45605, +45605, +45605, +45620, +45632, +45632, +45632, +45661, +45661, 45669, -45681, -45698, -45698, -45698, -45698, -45723, -45723, -45723, +45695, +45695, +45695, +45695, 45735, -45742, -45763, -45787, -45791, -45791, -45818, -45831, -45843, -45861, -45861, -45877, -45877, -45892, -45892, -45901, -45916, -45935, -45935, -45935, -45953, -45953, -45967, -45967, -45998, -46007, -46007, -46011, -46024, -46047, -46047, -46047, -46053, -46053, -46067, -46078, -46098, -46126, -46169, -46194, +45735, +45735, +45745, +45778, +45829, +45829, +45829, +45829, +45829, +45829, +45840, +45864, +45864, +45864, +45872, +45872, +45872, +45872, +45878, +45878, +45886, +45894, +45912, +45952, +45952, +45952, +45965, +46000, +46000, +46004, +46014, +46034, +46034, +46034, +46042, +46055, +46055, +46055, +46055, +46073, +46073, +46073, +46081, +46138, +46148, +46155, +46164, +46210, 46225, -46240, -46240, -46256, -46279, -46279, -46308, -46308, -46308, -46330, -46373, -46383, -46407, -46407, -46425, -46425, -46441, -46476, -46498, -46512, -46525, -46525, -46525, -46540, -46557, -46574, -46590, +46225, +46225, +46243, +46263, +46272, +46272, +46289, +46289, +46289, +46289, +46324, +46324, +46342, +46372, +46392, +46414, +46414, +46414, +46414, +46414, +46421, +46436, +46493, +46508, +46508, +46520, +46532, +46577, +46577, +46577, +46588, +46597, 46609, -46609, -46632, -46632, -46647, -46655, -46697, -46742, -46742, -46742, -46742, -46742, -46752, +46628, +46635, +46635, +46635, +46654, +46661, +46661, +46661, +46665, +46694, +46738, +46738, +46738, +46738, +46738, +46759, +46759, 46780, -46780, -46807, -46807, -46807, -46807, +46801, +46801, +46801, +46801, +46810, 46820, -46829, -46864, -46864, -46894, -46894, -46898, -46938, -46938, -46938, -46945, -46945, -46971, -46977, -46999, -47012, -47026, -47026, -47044, -47059, -47059, -47104, -47104, -47104, -47104, -47104, -47104, -47104, -47121, -47121, -47121, -47131, -47160, -47170, -47182, -47182, -47182, -47209, -47209, -47280, -47302, -47362, -47374, -47389, -47398, -47398, -47418, -47425, +46820, +46868, +46868, +46868, +46878, +46878, +46886, +46886, +46886, +46905, +46917, +46917, +46929, +46963, +46963, +46963, +46987, +47033, +47033, +47033, +47040, +47040, +47057, +47063, +47082, +47122, +47122, +47129, +47144, +47144, +47144, +47144, +47144, +47195, +47244, +47244, +47261, +47313, +47342, +47356, +47373, +47391, 47435, -47452, -47459, -47459, -47459, -47465, -47486, -47486, -47506, -47522, -47541, +47435, +47447, +47478, +47485, +47492, +47492, +47509, 47547, -47557, -47603, -47621, -47631, -47631, -47662, -47662, -47683, -47689, -47706, -47731, -47736, -47736, -47736, -47736, -47750, -47780, -47780, -47785, -47792, -47803, -47810, -47837, -47837, -47852, -47852, -47890, -47890, -47890, -47902, -47924, -47968, -47984, -48002, -48002, -48002, -48002, -48002, -48002, +47554, +47577, +47585, +47620, +47627, +47634, +47670, +47712, +47730, +47730, +47770, +47794, +47809, +47809, +47809, +47853, +47860, +47876, +47876, +47909, +47909, +47909, +47914, +47921, +47940, +47966, +47971, +47978, +47986, +47986, 48014, -48020, -48020, -48020, -48035, -48045, -48045, -48045, -48053, -48053, -48092, -48092, -48117, -48117, -48143, -48143, -48150, -48160, -48187, -48187, -48187, -48203, -48203, -48239, -48250, -48250, -48250, -48250, -48250, -48269, -48284, -48288, -48288, -48288, -48303, -48303, -48303, -48303, -48303, -48322, -48322, -48322, -48335, -48347, -48347, -48347, -48360, -48360, -48360, -48360, -48360, -48379, -48379, -48392, -48392, -48392, -48392, -48409, +48021, +48021, +48041, +48081, +48115, +48115, +48122, +48138, +48214, +48214, +48232, +48270, +48282, +48296, +48324, +48352, +48357, +48367, +48378, +48395, +48411, 48425, -48459, -48459, -48466, -48483, -48504, -48504, -48536, -48536, -48536, -48550, -48564, -48606, -48626, -48660, -48677, -48677, -48677, -48689, -48689, -48689, +48461, +48486, +48505, +48505, +48521, +48566, +48573, +48573, +48573, +48585, +48609, +48609, +48633, +48667, +48686, 48697, -48697, -48728, -48739, -48757, -48757, -48777, -48793, -48793, -48815, -48815, -48829, -48852, -48860, -48860, -48899, -48899, -48912, -48963, -48963, -48992, -48992, -48992, -48992, -49006, -49014, -49042, -49042, -49055, -49055, -49055, -49071, -49077, -49108, -49108, -49120, -49120, -49120, -49120, +48703, +48749, +48756, +48756, +48791, +48811, +48836, +48836, +48864, +48889, +48889, +48903, +48903, +48937, +48952, +48959, +48959, +48966, +48988, +48988, +49000, +49000, +49007, +49007, +49030, +49030, +49045, +49052, +49062, +49062, +49062, +49062, +49062, +49088, +49107, +49107, +49107, +49107, 49127, 49127, -49131, -49145, -49162, -49162, -49179, -49207, -49207, -49207, -49207, -49207, -49207, -49207, -49207, -49207, -49218, -49218, -49235, -49250, -49260, -49270, -49270, -49286, -49295, -49295, -49295, -49295, -49337, -49347, -49358, -49358, -49390, -49403, -49403, -49413, -49423, -49423, -49423, -49455, -49471, -49471, -49477, -49477, -49477, -49494, -49512, -49521, -49521, -49552, -49582, -49612, -49641, -49653, -49653, -49653, -49675, -49680, +49127, +49170, +49170, +49183, +49195, +49201, +49208, +49208, +49222, +49229, +49251, +49251, +49258, +49298, +49330, +49330, +49350, +49398, +49398, +49405, +49412, +49440, +49456, +49456, +49464, +49464, +49464, +49464, +49480, +49527, +49546, +49546, +49546, +49586, +49593, +49607, +49622, +49640, +49647, +49654, +49672, +49672, +49672, +49672, 49690, -49724, -49724, -49755, -49773, -49795, -49795, -49795, -49795, -49795, -49801, -49822, -49822, -49850, -49850, -49878, -49897, -49897, -49897, -49897, -49897, -49919, -49942, +49713, +49743, +49750, +49766, +49784, +49798, +49798, +49804, +49852, +49869, +49876, +49917, 49947, -49956, -49956, -49956, -49975, -49975, -49990, -50000, -50000, -50000, -50008, -50034, -50034, -50050, -50050, -50059, -50059, -50075, -50075, -50075, -50104, -50112, -50112, -50112, -50112, -50149, -50158, -50158, -50198, -50232, -50248, -50262, -50262, -50272, -50272, -50281, -50281, -50281, -50288, -50295, -50295, -50305, -50320, -50363, -50363, -50400, -50410, -50410, -50423, -50435, +49954, +49961, +49994, +50011, +50042, +50042, +50072, +50110, +50110, +50117, +50139, +50145, +50145, +50153, +50160, +50185, +50185, +50192, +50237, +50298, +50326, +50345, +50356, +50375, +50375, +50375, +50385, +50385, +50385, +50392, +50392, 50448, -50453, -50467, -50467, -50467, -50485, -50485, -50503, -50513, -50535, -50535, -50542, -50583, -50589, -50597, -50602, -50627, -50640, -50682, -50689, -50708, -50712, -50712, -50712, -50728, -50746, -50774, -50774, -50790, -50802, -50802, -50802, -50834, -50847, -50865, -50880, -50880, -50880, -50880, -50899, -50908, -50923, -50955, -50993, -51005, -51005, -51016, -51025, +50448, +50448, +50462, +50521, +50545, +50551, +50560, +50560, +50596, +50596, +50618, +50648, +50655, +50655, +50662, +50757, +50764, +50771, +50771, +50783, +50783, +50783, +50800, +50813, +50838, +50871, +50895, +50903, +50910, +50928, +50944, +50951, +50951, +50963, +50963, +50987, +50994, +50994, +51001, +51022, +51022, +51036, 51043, -51064, -51064, -51081, -51109, -51126, -51178, -51178, -51178, -51187, -51220, -51220, +51063, +51094, +51094, +51094, +51129, +51136, +51136, +51136, +51153, +51153, +51153, +51167, +51167, +51179, +51179, +51179, +51201, +51218, +51225, 51239, -51239, -51239, -51258, -51274, -51274, -51311, -51311, -51311, -51325, -51336, -51336, -51336, -51336, -51336, -51336, -51336, -51336, -51349, -51349, -51369, -51375, -51375, -51375, -51375, -51375, -51398, -51417, -51417, -51427, -51427, -51440, -51465, -51465, -51465, -51465, -51465, -51478, -51478, -51485, -51503, -51511, -51517, -51528, -51550, -51550, -51569, -51569, -51586, -51586, -51586, +51292, +51299, +51304, +51319, +51319, +51345, +51345, +51345, +51404, +51416, +51430, +51474, +51491, +51510, +51510, +51529, 51595, -51601, -51608, -51633, -51650, -51650, -51650, -51650, -51650, -51650, -51670, -51670, -51690, -51714, -51714, -51732, -51750, -51750, -51782, -51791, -51799, -51799, +51595, +51609, +51614, +51635, +51684, +51705, +51705, +51721, +51753, +51753, +51768, +51781, 51805, -51820, -51820, -51820, -51852, -51856, -51856, -51856, -51856, -51869, -51884, -51884, -51925, -51936, -51936, -51941, -51954, -51954, -51954, -51954, -51976, -51976, -51999, -51999, -52008, -52038, -52038, +51812, +51830, +51863, +51863, +51863, +51875, +51914, +51914, +51914, +51914, +51950, +51965, +51965, +51972, +52022, +52027, +52027, +52042, 52055, -52055, -52070, -52087, -52094, -52129, -52145, -52145, -52158, -52165, -52198, +52074, +52081, +52093, +52112, +52119, +52119, +52140, +52167, +52180, +52187, +52197, +52209, 52225, 52225, -52232, -52245, -52262, -52262, -52262, -52269, -52269, -52269, -52281, -52281, -52290, -52290, -52290, -52290, -52316, -52316, -52341, +52231, +52258, +52274, +52274, +52285, +52314, +52328, +52328, +52328, +52328, +52340, +52355, +52372, +52372, +52372, 52379, -52417, -52417, -52426, -52433, -52446, +52386, +52419, +52419, +52419, +52419, +52432, 52450, -52463, -52467, -52467, -52467, -52479, -52487, -52502, -52522, -52522, -52558, -52574, -52574, -52574, -52574, -52612, -52612, -52633, -52655, -52714, -52722, -52731, -52736, -52765, -52778, -52778, -52819, -52874, -52891, -52891, -52903, -52903, -52903, -52926, -52965, -52982, -53003, -53003, -53023, +52450, +52491, +52523, +52550, +52556, +52576, +52576, +52586, +52586, +52586, +52603, +52610, +52610, +52610, +52610, +52610, +52610, +52644, +52656, +52670, +52687, +52701, +52719, +52726, +52732, +52756, +52801, +52824, +52842, +52842, +52849, +52849, +52855, +52876, +52876, +52883, +52883, +52897, +52918, +52952, +52966, +52973, +52973, +52986, +52986, +53010, +53017, +53024, 53031, -53048, -53062, -53062, -53109, -53115, -53115, -53115, -53125, -53125, -53125, -53132, -53140, -53156, -53156, -53165, -53176, -53183, -53226, -53256, -53256, -53275, -53293, -53293, -53293, -53293, -53293, -53313, -53323, -53323, -53323, -53323, -53330, -53355, -53355, -53362, -53368, -53374, -53374, -53374, -53374, -53374, -53374, -53374, -53381, -53381, -53381, -53381, -53391, -53400, -53412, -53412, -53412, -53440, -53440, -53448, -53448, -53466, -53481, -53481, -53481, -53481, -53481, -53481, -53491, +53042, +53076, +53130, +53151, +53161, +53203, +53229, +53229, +53236, +53243, +53250, +53257, +53280, +53280, +53297, +53304, +53327, +53327, +53332, +53345, +53366, +53390, +53411, +53411, +53419, +53419, +53460, +53474, +53474, 53505, -53521, -53550, -53559, -53559, -53570, -53577, -53577, -53628, -53644, -53665, -53665, -53665, +53584, +53591, +53607, +53615, +53634, +53634, +53641, 53675, -53675, -53675, -53675, -53698, -53698, -53719, -53719, -53731, -53753, -53753, -53759, -53777, -53793, -53814, -53838, +53709, +53716, +53733, +53751, +53772, +53772, +53788, +53822, +53829, +53829, 53849, -53884, -53884, -53884, -53899, -53899, -53915, -53915, -53925, -53953, -53983, -53993, -53993, -54029, -54053, -54053, -54063, -54063, -54063, +53885, +53885, +53885, +53911, +53942, +53949, +53949, +53964, +53964, +53971, +53978, +53990, +54008, +54023, +54030, +54039, +54058, +54058, +54058, 54075, -54094, -54094, -54094, -54104, -54110, -54127, -54127, -54127, -54127, -54158, -54158, -54195, -54208, -54215, -54232, -54232, -54249, -54259, -54278, -54278, -54278, -54284, -54284, -54284, -54294, -54294, -54294, -54310, -54359, -54372, -54372, -54372, -54372, -54377, -54383, -54415, -54415, -54415, -54426, -54447, -54474, +54115, +54124, +54124, +54131, +54188, +54188, +54205, +54205, +54205, +54227, +54227, +54227, +54227, +54269, +54276, +54298, +54298, +54319, +54319, +54319, +54381, +54388, +54392, +54392, 54499, 54499, -54509, -54514, -54514, -54514, -54536, -54547, -54547, -54553, -54578, -54590, -54590, -54603, -54603, -54603, -54619, -54626, -54645, -54645, -54660, -54676, -54704, -54704, -54704, -54721, -54721, -54721, -54729, -54729, -54755, -54755, -54755, -54755, -54755, -54755, -54771, -54812, -54836, -54836, -54846, -54919, -54919, -54937, -54962, -54962, -54962, -55003, -55023, -55023, -55037, -55037, -55037, -55044, -55050, -55050, -55061, -55061, -55061, -55061, -55061, -55092, -55113, -55130, -55142, -55185, -55196, -55196, -55196, -55196, -55196, -55202, -55261, -55278, -55278, -55298, -55298, -55315, -55315, -55354, -55354, -55354, -55382, -55389, -55405, -55410, -55410, -55416, -55416, -55416, -55416, -55416, -55416, -55416, -55416, -55422, -55458, -55465, -55465, -55479, -55508, -55508, -55514, -55521, +54506, +54506, +54513, +54513, +54520, +54548, +54638, +54651, +54651, +54662, +54682, +54710, +54717, +54743, +54804, +54804, +54811, +54811, +54823, +54843, +54850, +54871, +54878, +54890, +54897, +54897, +54917, +54933, +54933, +54933, +54933, +54940, +54946, +54978, +54978, +54998, +54998, +55011, +55011, +55025, +55025, +55038, +55071, +55081, +55081, +55081, +55103, +55103, +55110, +55132, +55163, +55186, +55186, +55198, +55198, +55198, +55204, +55211, +55211, +55223, +55230, +55230, +55309, +55316, +55316, +55316, +55343, +55350, +55357, +55364, +55406, +55459, +55459, +55466, +55497, +55533, 55540, -55540, -55540, -55540, -55553, -55563, -55577, -55577, -55595, -55595, -55617, -55617, -55617, -55621, -55640, -55640, -55640, -55640, -55663, -55681, -55681, -55726, -55746, -55746, -55762, -55762, -55774, -55825, -55838, -55854, -55864, -55864, -55864, -55886, -55897, -55917, -55917, -55931, -55961, -55961, -55961, -55985, -56003, -56003, -56003, -56025, -56025, -56074, -56074, -56074, -56105, -56118, -56141, -56141, -56141, -56141, -56141, -56169, -56203, -56203, -56203, -56203, -56221, -56225, -56258, -56272, -56278, -56321, -56321, -56339, -56372, -56372, -56397, -56411, -56428, -56437, -56437, -56458, -56469, -56538, -56544, -56562, -56562, -56579, -56579, -56593, -56593, -56593, -56613, -56613, -56619, -56670, -56676, -56705, -56705, -56705, -56723, -56733, -56733, -56733, -56733, -56739, -56739, -56739, +55559, +55603, +55608, +55608, +55614, +55629, +55648, +55655, +55680, +55756, +55756, +55763, +55770, +55770, +55782, +55782, +55789, +55843, +55843, +55843, +55862, +55902, +55909, +55921, +55932, +55967, +55974, +55995, +56019, +56026, +56069, +56069, +56092, +56119, +56137, +56137, +56137, +56137, +56144, +56161, +56206, +56213, +56213, +56213, +56228, +56244, +56251, +56251, +56291, +56303, +56310, +56310, +56320, +56361, +56381, +56381, +56381, +56399, +56406, +56413, +56413, +56482, +56503, +56503, +56517, +56566, +56586, +56586, +56586, +56623, +56630, +56649, +56683, +56742, 56758, 56758, -56758, -56775, -56785, -56793, -56793, -56819, -56837, -56862, -56862, -56862, -56868, -56868, -56917, -56917, -56942, -56942, -56968, -57007, -57007, -57039, -57043, -57043, -57043, -57043, -57049, -57049, -57075, -57075, -57103, -57118, -57143, -57150, -57165, -57180, -57180, -57187, -57234, -57234, -57252, -57258, -57258, -57258, -57271, -57285, -57285, -57285, -57294, -57294, -57294, -57304, -57321, +56795, +56795, +56822, +56822, +56822, +56822, +56848, +56855, +56883, +56901, +56914, +56918, +56952, +56975, +56999, +57011, +57011, +57011, +57018, +57018, +57018, +57053, +57053, +57053, +57066, +57084, +57091, +57098, +57131, +57155, +57169, +57169, +57186, +57193, +57193, +57207, +57218, +57241, +57241, +57255, +57272, +57314, +57330, +57330, 57343, -57374, -57386, -57386, -57428, -57436, -57449, -57449, -57455, -57471, -57482, -57491, +57378, +57393, +57400, +57408, +57441, +57481, +57494, +57501, +57507, +57514, +57521, 57528, -57550, -57560, -57560, -57560, +57544, +57551, +57558, 57566, -57584, -57584, -57611, -57627, -57627, -57656, -57656, -57656, -57656, -57675, -57692, -57727, -57727, -57727, -57727, -57733, -57744, -57780, -57790, -57790, -57790, -57804, +57603, +57603, +57609, +57631, +57631, +57657, +57657, +57657, +57657, +57657, +57663, +57672, +57672, +57687, +57687, +57702, +57718, +57741, +57741, +57772, +57772, +57803, 57810, -57810, -57810, -57831, -57855, -57863, -57874, -57887, -57887, -57896, -57938, -57938, -57938, -57938, -57963, -57963, -57963, -57967, -57967, -57990, -57990, -57990, -58012, -58023, -58023, -58066, -58119, -58119, -58144, -58154, -58167, -58189, -58203, -58203, -58217, -58217, -58234, -58234, -58234, -58246, -58259, -58285, -58322, -58322, -58362, -58378, -58386, -58393, -58430, -58430, -58430, -58430, -58451, -58451, -58470, -58479, -58479, -58479, -58530, -58544, -58544, -58570, -58570, -58570, -58583, -58583, -58592, -58592, -58606, -58618, -58618, -58628, -58648, -58648, -58663, -58686, -58702, -58717, -58727, -58734, -58744, -58744, -58776, -58776, -58810, -58810, -58810, -58821, -58834, -58845, -58845, -58857, -58874, -58913, -58913, -58913, -58939, -58945, -58955, -58968, -58992, -58992, -59002, -59002, -59035, -59064, -59076, -59120, -59150, -59169, -59169, -59176, -59176, -59193, -59200, -59232, -59232, -59247, -59261, -59284, -59312, -59338, -59338, -59345, -59355, -59367, -59385, -59392, -59419, -59419, -59431, -59438, -59501, -59515, -59546, -59566, -59580, -59587, -59594, -59619, -59638, -59652, -59652, +57827, +57873, +57886, +57893, +57893, +57902, +57902, +57902, +57912, +57927, +57934, +57934, +57940, +57940, +57951, +57955, +57973, +58031, +58052, +58052, +58052, +58052, +58085, +58085, +58118, +58143, +58159, +58159, +58159, +58159, +58194, +58194, +58194, +58250, +58250, +58250, +58250, +58250, +58276, +58276, +58289, +58289, +58327, +58327, +58350, +58366, +58396, +58396, +58396, +58434, +58450, +58450, +58467, +58467, +58467, +58467, +58467, +58500, +58500, +58500, +58509, +58535, +58535, +58546, +58554, +58554, +58580, +58580, +58580, +58601, +58617, +58630, +58645, +58674, +58674, +58674, +58674, +58674, +58674, +58674, +58690, +58690, +58690, +58706, +58714, +58728, +58728, +58728, +58728, +58728, +58728, +58728, +58735, +58735, +58735, +58740, +58740, +58754, +58754, +58754, +58754, +58778, +58797, +58797, +58797, +58815, +58830, +58830, +58830, +58890, +58890, +58890, +58897, +58897, +58897, +58907, +58935, +58935, +58940, +58940, +58950, +59011, +59011, +59021, +59080, +59132, +59132, +59132, +59132, +59214, +59258, +59258, +59277, +59298, +59309, +59319, +59341, +59358, +59370, +59370, +59377, +59411, +59411, +59411, +59421, +59482, +59543, +59558, +59558, +59578, +59578, +59578, +59578, +59624, +59624, +59649, +59666, 59696, -59709, -59716, -59716, -59716, -59723, -59764, -59764, -59771, -59822, -59859, -59859, -59866, -59891, -59898, -59923, -59937, -59949, -59956, -59956, -59963, -59985, -59992, -59992, -59992, -60017, +59696, +59696, +59696, +59718, +59718, +59718, +59728, +59728, +59728, +59746, +59766, +59789, +59829, +59829, +59829, +59829, +59846, +59846, +59867, +59878, +59907, +59907, +59907, +59919, +59919, +59919, +59934, +59951, +59966, +59966, +59966, 60041, -60054, -60087, -60087, -60094, -60118, -60164, -60178, -60178, -60178, -60207, -60207, -60216, -60234, -60247, -60265, -60272, -60279, -60279, -60279, -60313, -60313, -60320, -60345, -60374, -60382, -60394, -60394, -60394, -60394, -60394, -60449, -60449, -60458, -60483, -60483, -60496, -60503, -60519, -60526, -60540, -60554, -60554, -60570, -60578, -60592, -60592, -60599, -60607, -60624, -60631, -60638, -60638, -60708, -60715, +60041, +60052, +60052, +60086, +60086, +60086, +60102, +60127, +60127, +60132, +60132, +60132, +60132, +60139, +60139, +60139, +60154, +60154, +60176, +60194, +60211, +60221, +60251, +60305, +60305, +60305, +60311, +60328, +60335, +60335, +60341, +60440, +60440, +60440, +60440, +60440, +60440, +60440, +60463, +60504, +60504, +60504, +60524, +60524, +60524, +60524, +60544, +60603, +60603, +60603, +60622, +60682, +60709, +60709, +60709, 60722, -60729, -60729, -60729, -60736, -60736, -60736, -60747, -60765, -60789, -60832, -60839, -60839, -60839, -60858, -60858, -60858, -60858, -60873, -60880, -60902, -60924, -60931, -60938, -60945, -60952, -60982, -60989, -61009, -61066, -61078, -61078, -61078, -61078, -61105, -61105, -61144, -61165, -61165, -61165, -61180, -61180, -61180, -61224, -61231, -61258, -61268, -61275, -61295, -61295, -61295, -61302, -61316, -61316, -61351, -61369, -61410, -61428, -61450, -61450, -61463, +60728, +60728, +60751, +60787, +60799, +60799, +60799, +60821, +60821, +60821, +60821, +60833, +60846, +60846, +60851, +60857, +60863, +60863, +60891, +60926, +60926, +60934, +60944, +60970, +60970, +60970, +60970, +61014, +61014, +61014, +61014, +61014, +61020, +61027, +61027, +61044, +61064, +61068, +61096, +61096, +61096, +61102, +61124, +61153, +61176, +61182, +61211, +61211, +61225, +61225, +61232, +61249, +61294, +61301, +61308, +61336, +61401, +61401, +61401, +61421, +61439, +61439, +61439, +61460, +61467, +61486, 61493, -61511, +61503, +61510, +61510, +61510, 61552, -61579, +61570, +61577, +61590, +61590, 61603, +61610, 61617, 61617, -61624, -61624, -61624, -61631, -61656, -61682, -61689, -61707, -61714, -61721, -61735, -61742, -61753, -61760, -61774, -61800, -61838, -61850, -61856, -61863, -61900, -61917, -61932, -61939, -61946, -61960, -61979, -62000, -62026, -62033, -62040, -62052, -62052, -62061, -62068, -62077, -62084, -62096, -62140, -62140, -62147, -62153, -62153, -62182, -62195, -62195, -62195, -62213, -62213, -62239, +61627, +61634, +61651, +61658, +61680, +61686, +61708, +61740, +61747, +61754, +61766, +61780, +61787, +61805, +61812, +61812, +61812, +61835, +61835, +61904, +61935, +61935, +61972, +61991, +61998, +62004, +62004, +62004, +62011, +62011, +62048, +62055, +62076, +62076, +62083, +62116, +62116, +62116, +62123, +62160, +62160, +62167, +62167, +62185, +62185, +62185, +62185, +62252, +62265, 62265, 62279, -62304, -62313, -62320, -62327, -62352, -62359, -62366, -62371, -62404, -62434, -62477, -62477, -62484, -62499, -62515, -62522, -62529, -62544, -62565, -62565, -62588, -62588, -62593, -62618, -62618, -62624, -62624, -62624, -62624, -62642, -62660, -62684, -62688, -62688, -62702, -62702, -62716, +62329, +62342, +62342, +62350, +62408, +62455, +62473, +62482, +62482, +62489, +62495, +62521, +62564, +62564, +62591, +62591, +62607, +62620, +62620, +62650, +62709, +62709, +62720, 62738, -62763, -62763, -62782, -62812, -62829, -62858, -62858, -62887, -62887, -62908, -62915, -62929, -62968, -62982, -62982, +62764, +62764, +62778, +62778, +62807, +62813, +62820, +62832, +62847, +62862, +62862, +62862, +62885, +62892, +62911, +62918, +62918, +62983, 62996, +62996, +62996, +62996, +63003, 63014, -63024, -63054, -63065, -63082, -63082, -63107, -63143, -63159, -63176, -63176, -63213, -63250, -63250, -63291, -63324, +63061, +63061, +63061, +63067, +63078, +63090, +63090, +63100, +63119, +63138, +63151, +63157, +63182, +63195, +63202, +63209, +63222, +63261, +63273, +63284, +63315, +63315, +63315, +63315, 63348, -63355, -63384, -63384, -63390, -63397, -63432, -63439, -63439, -63459, -63497, -63497, -63519, -63519, -63535, -63549, +63365, +63365, +63372, +63382, +63409, +63420, +63426, +63463, +63469, +63475, +63490, +63525, +63539, +63543, +63558, 63582, -63601, -63601, -63608, -63619, -63655, -63662, +63599, +63606, +63606, +63615, +63622, +63629, +63648, 63678, -63678, -63678, -63684, -63718, -63745, -63765, -63773, -63779, -63779, -63811, -63818, -63859, -63886, -63892, -63947, -63947, -63988, -64025, -64034, -64058, -64067, -64090, -64106, -64106, -64106, -64111, -64111, -64129, -64129, -64135, -64152, -64189, -64189, -64189, -64189, -64196, -64196, -64209, -64222, -64222, -64235, -64235, -64263, -64270, -64270, -64270, -64296, -64314, -64321, -64321, -64321, -64321, -64321, -64328, -64347, +63704, +63710, +63717, +63737, +63744, +63759, +63772, +63821, +63834, +63840, +63849, +63849, +63881, +63894, +63901, +63901, +63908, +63915, +63930, +63946, +63953, +63959, +63985, +63992, +64005, +64011, +64018, +64059, +64066, +64066, +64089, +64116, +64123, +64137, +64151, +64166, +64205, +64219, +64219, +64273, +64273, +64273, +64294, +64313, +64331, +64348, 64359, -64359, -64359, -64359, -64359, -64388, -64427, -64434, -64434, -64461, -64468, -64499, -64506, -64513, -64513, -64513, -64513, -64513, -64522, -64522, -64558, -64568, -64602, -64615, -64621, -64627, -64627, -64627, -64627, -64627, -64654, -64654, -64661, -64661, -64675, -64675, -64675, -64675, -64685, -64685, -64704, -64730, -64746, -64761, -64768, -64768, -64811, -64811, -64811, -64811, -64811, -64832, -64844, -64844, -64859, -64878, -64888, -64902, -64933, -64933, -64976, -64987, -65004, -65004, -65013, -65013, -65023, -65023, -65047, -65047, -65047, -65047, -65054, -65060, -65078, -65104, -65104, -65116, -65127, -65127, -65137, -65156, -65178, -65178, -65178, -65214, -65214, -65214, -65238, -65238, -65266, -65266, -65266, -65266, -65274, -65294, -65294, -65294, -65294, -65306, -65306, -65306, -65363, -65363, -65363, -65363, -65390, +64385, +64401, +64401, +64421, +64479, +64479, +64493, +64500, +64519, +64526, +64526, +64532, +64560, +64588, +64588, +64594, +64645, +64657, +64657, +64666, +64682, +64714, +64714, +64721, +64767, +64777, +64784, +64784, +64795, +64807, +64814, +64827, +64865, +64890, +64916, +64923, +64977, +65018, +65024, +65058, +65075, +65081, +65096, +65111, +65157, +65194, +65194, +65211, +65243, +65252, +65258, +65276, +65307, +65325, +65337, +65337, +65360, +65360, +65360, +65388, 65402, -65408, -65408, -65408, -65408, -65408, -65408, -65454, -65454, -65454, -65464, -65464, -65484, -65491, -65505, -65518, -65518, -65518, -65530, -65554, -65572, -65592, -65639, -65639, -65648, -65655, -65665, -65665, -65665, -65699, -65699, -65711, +65424, +65431, +65449, +65488, +65521, +65521, +65567, +65600, +65631, +65637, +65701, 65731, 65731, 65731, -65731, -65767, -65787, -65787, -65787, -65808, -65828, -65866, -65878, -65878, -65889, -65889, -65930, -65930, -65930, -65930, -65930, -65930, -65930, -65936, -65951, -65957, -65957, -65973, -65979, -66004, -66004, -66050, -66050, -66097, -66113, -66140, -66140, -66149, -66175, -66204, -66213, -66213, +65744, +65757, +65763, +65763, +65783, +65827, +65841, +65841, +65858, +65914, +65921, +65928, +65943, +65958, +65965, +65998, +66012, +66081, +66120, +66127, +66127, +66193, +66207, 66229, -66229, -66263, -66271, -66293, -66293, -66320, -66320, -66339, -66339, -66339, -66339, -66339, -66349, -66355, -66363, -66363, -66407, -66407, -66407, -66416, -66416, -66425, -66425, -66444, -66470, -66470, -66490, -66490, -66490, -66506, -66506, -66521, -66521, -66557, -66557, -66557, -66557, -66557, -66557, -66565, -66565, -66565, -66596, -66632, -66641, -66641, -66641, -66641, -66641, +66259, +66267, +66267, +66267, +66289, +66289, +66333, +66333, +66333, +66333, +66333, +66333, +66366, +66386, +66403, +66403, +66414, +66431, +66445, +66452, +66452, +66461, +66479, +66486, +66495, +66527, +66560, +66560, +66590, +66623, +66642, +66642, 66655, -66655, -66663, -66663, -66663, -66674, -66684, -66703, -66717, -66734, -66734, -66774, -66800, -66836, -66853, -66863, -66863, -66924, -66924, -66937, -66951, -66970, -66970, -66970, -67005, -67005, -67005, -67039, -67067, -67067, -67090, -67097, -67097, -67113, -67119, -67119, -67150, -67170, -67170, -67182, -67188, -67253, -67268, -67295, -67311, -67311, -67311, -67319, -67335, -67340, -67356, -67356, -67368, -67368, -67368, -67377, -67383, -67383, -67383, -67383, -67383, -67396, -67396, -67408, -67426, +66669, +66690, +66697, +66722, +66722, +66722, +66722, +66736, +66736, +66766, +66780, +66805, +66814, +66880, +66880, +66880, +66906, +66943, +66943, +66943, +66956, +66981, +66995, +66995, +66995, +67003, +67021, +67041, +67089, +67096, +67096, +67096, +67096, +67116, +67116, +67142, +67160, +67160, +67183, +67183, +67195, +67233, +67233, +67239, +67277, +67277, +67277, +67320, +67365, +67365, +67373, +67373, +67393, +67400, +67400, +67409, +67421, +67433, +67448, +67448, 67456, -67470, -67494, -67494, -67494, -67494, -67506, -67506, -67506, -67506, -67506, -67511, -67529, -67529, -67551, -67557, -67565, -67581, -67587, -67604, -67604, -67611, -67611, -67611, -67621, -67621, -67628, -67628, -67672, -67693, -67693, -67705, -67712, -67724, -67724, -67724, -67724, -67740, -67749, -67771, -67781, -67781, -67781, -67808, -67808, -67808, -67815, -67862, -67873, -67873, -67873, -67882, -67882, -67888, -67906, -67912, -67931, -67931, -67931, -67941, -67973, -67973, -68011, -68045, -68045, -68062, -68062, -68068, -68068, -68080, -68091, -68091, -68127, -68151, -68151, -68172, -68172, -68172, -68172, -68179, -68189, -68204, -68224, -68233, -68251, -68251, -68258, -68258, -68258, -68270, -68270, -68270, -68307, -68307, -68326, -68326, +67456, +67456, +67477, +67493, +67493, +67493, +67512, +67518, +67518, +67533, +67533, +67553, +67585, +67585, +67592, +67592, +67592, +67592, +67592, +67592, +67592, +67592, +67605, +67656, +67684, +67719, +67719, +67743, +67761, +67761, +67770, +67813, +67825, +67831, +67840, +67860, +67860, +67866, +67881, +67927, +67936, +67936, +67936, +67951, +67951, +67951, +67977, +67977, +67983, +67989, +67996, +68015, +68015, +68024, +68031, +68031, +68053, +68053, +68074, +68110, +68137, +68145, +68171, +68191, +68191, +68191, +68234, +68252, +68266, +68275, +68284, +68296, +68296, +68296, +68296, +68311, +68343, +68350, +68350, +68350, +68350, +68358, 68366, -68366, -68366, -68385, -68385, -68385, -68391, -68391, -68391, -68420, -68427, -68427, -68427, -68427, -68437, -68437, -68437, -68437, -68445, -68445, -68462, -68462, -68462, -68475, -68475, -68475, -68488, -68497, -68504, -68504, -68527, -68550, -68563, -68563, -68582, -68582, -68582, -68582, -68622, -68622, -68651, -68656, -68669, -68682, -68682, -68693, -68693, -68701, -68701, -68701, -68701, -68701, -68701, -68729, -68743, -68743, -68757, -68757, -68773, -68789, -68801, -68833, -68833, -68833, -68833, -68840, -68866, -68866, -68866, -68881, -68909, -68925, -68946, -68989, -68989, -69005, -69015, -69029, -69044, -69076, -69076, -69095, -69095, -69102, -69125, -69125, -69125, -69125, -69139, -69161, -69161, -69166, -69172, -69172, -69178, -69186, -69215, -69215, -69243, -69243, -69243, -69273, -69273, -69273, -69273, -69283, -69299, -69299, -69299, -69299, -69299, -69340, -69381, +68387, +68395, +68401, +68438, +68455, +68494, +68494, +68510, +68510, +68524, +68524, +68536, +68536, +68553, +68562, +68572, +68591, +68591, +68591, +68601, +68641, +68659, +68659, +68659, +68659, +68659, +68659, +68659, +68718, +68718, +68718, +68738, +68788, +68844, +68844, +68850, +68850, +68850, +68850, +68862, +68880, +68880, +68880, +68890, +68907, +68919, +68919, +68929, +68963, +69010, +69010, +69018, +69039, +69050, +69050, +69068, +69116, +69116, +69116, +69116, +69145, +69200, +69200, +69233, +69233, +69245, +69251, +69257, +69257, +69285, +69292, +69300, +69341, +69341, +69341, +69341, +69341, +69353, +69353, +69363, +69372, +69372, 69388, -69398, -69398, -69398, -69398, -69398, -69438, -69438, -69438, -69445, -69445, -69476, -69476, -69476, -69481, -69503, -69541, -69541, -69541, -69573, -69593, -69593, -69593, -69609, -69619, -69661, -69661, -69700, -69706, -69736, -69736, -69770, -69770, -69776, -69799, -69840, -69840, -69875, -69894, -69894, -69917, -69933, -69949, -69949, -69949, -69954, +69388, +69406, +69434, +69434, +69434, +69448, +69448, +69448, +69471, +69480, +69502, +69502, +69502, +69502, +69502, +69502, +69502, +69502, +69530, +69530, +69537, +69597, +69627, +69627, +69627, +69633, +69652, +69652, +69652, +69670, +69670, +69670, +69682, +69697, +69713, +69713, +69749, +69766, +69772, +69772, +69789, +69807, +69834, +69834, +69843, +69858, +69874, +69874, +69880, +69943, +69959, 69965, -69965, -69965, -69965, -69965, -69979, -69986, -70005, -70010, -70016, -70035, -70035, -70072, -70082, -70119, -70158, -70168, -70177, -70202, -70230, -70242, -70242, -70275, -70282, -70282, -70282, -70296, -70296, -70296, -70296, -70296, +69971, +70027, +70027, +70027, +70045, +70065, +70101, +70101, +70101, +70101, +70101, +70101, +70113, +70149, +70198, +70205, +70211, +70224, +70224, +70224, +70251, +70270, 70302, 70302, -70302, -70302, -70302, -70324, -70324, -70341, -70367, -70392, -70425, -70467, -70467, -70504, -70504, -70522, -70522, -70522, -70561, -70561, -70580, -70601, -70612, -70612, -70663, -70663, -70669, -70669, -70669, -70669, -70698, -70698, -70722, -70734, -70750, -70756, -70794, -70794, -70809, -70819, -70819, -70819, -70853, -70870, -70906, -70917, -70922, -70935, -70950, -70977, -70990, -71014, -71024, -71041, -71076, -71076, -71090, -71090, +70313, +70320, +70320, +70320, +70340, +70391, +70397, +70410, +70441, +70464, +70478, +70478, +70495, +70495, +70495, +70495, +70495, +70549, +70549, +70549, +70549, +70569, +70584, +70591, +70591, +70591, +70606, +70606, +70606, +70623, +70631, +70638, +70638, +70682, +70682, +70689, +70710, +70721, +70721, +70728, +70728, +70752, +70752, +70752, +70762, +70762, +70769, +70769, +70769, +70796, +70796, +70810, +70817, +70855, +70882, +70882, +70882, +70888, +70911, +70927, +70927, +70943, +70978, +70978, +71002, +71021, +71036, +71036, +71043, +71057, +71057, +71057, +71083, 71100, -71125, -71125, -71131, -71131, -71137, -71157, +71113, +71113, +71129, 71169, -71181, -71181, -71181, -71193, -71201, -71210, -71216, -71243, -71253, -71253, -71290, -71306, -71372, -71391, -71391, -71405, -71423, -71423, -71428, -71428, -71443, -71460, -71460, -71460, -71460, -71460, -71460, -71460, -71460, -71460, -71460, -71511, -71511, +71176, +71176, +71184, +71228, +71228, +71238, +71238, +71260, +71272, +71272, +71272, +71272, +71291, +71299, +71299, +71341, +71404, +71411, +71419, +71459, +71483, +71483, +71508, 71521, 71535, -71543, -71548, -71548, -71553, -71553, -71573, -71573, -71596, -71625, -71625, -71625, -71639, -71667, -71674, -71674, -71698, -71705, -71705, -71705, -71725, -71732, -71750, -71773, -71773, -71773, -71780, -71787, -71805, -71805, -71805, -71835, -71869, -71880, -71885, -71892, -71914, -71921, -71950, +71535, +71535, +71571, +71578, +71578, +71587, +71594, +71616, +71616, +71627, +71637, +71644, +71644, +71644, +71664, +71671, +71671, +71671, +71706, +71746, +71746, +71786, +71803, +71838, +71853, +71862, +71888, +71895, +71916, +71916, +71937, 71976, -71993, -71993, -72005, -72012, -72019, -72026, -72062, -72093, -72100, -72125, -72146, -72146, -72146, -72195, -72233, -72270, -72294, -72307, -72317, -72345, -72377, -72384, -72413, +71976, +71982, +72006, +72021, +72021, +72030, +72035, +72035, +72035, +72043, +72050, +72085, +72099, +72099, +72121, +72134, +72134, +72140, +72160, +72160, +72160, +72169, +72194, +72208, +72208, +72234, +72252, +72259, +72259, +72273, +72292, +72343, +72343, +72364, +72390, +72390, +72390, +72397, +72397, +72397, +72397, +72397, +72397, 72426, 72426, -72449, -72449, -72463, -72463, -72479, -72479, -72486, -72505, -72511, -72531, -72538, -72558, -72565, -72565, -72565, -72591, -72598, -72608, +72461, +72478, +72490, +72497, +72526, +72577, +72577, +72584, +72596, +72633, +72633, 72640, -72658, -72686, -72700, -72736, -72743, -72743, -72743, -72743, -72771, -72803, -72819, -72832, -72832, -72857, -72864, -72874, -72897, -72910, -72918, -72918, -72941, -72964, -72964, -72976, -72976, -72990, -73023, -73023, -73030, -73038, -73044, -73070, -73079, -73079, -73086, -73093, -73120, -73139, -73146, -73146, -73153, -73164, +72640, +72640, +72674, +72674, +72674, +72674, +72674, +72674, +72684, +72716, +72723, +72730, +72772, +72772, +72795, +72795, +72837, +72914, +72914, +72914, +72933, +72965, +72973, +72978, +72978, +73009, +73033, +73040, +73062, +73062, +73101, +73108, +73108, +73115, +73144, +73144, +73158, +73201, 73213, -73262, -73277, -73277, -73292, -73325, -73325, -73355, -73361, -73390, -73390, -73407, +73213, +73219, +73219, +73219, +73219, +73248, +73303, +73303, +73310, +73323, +73362, +73389, +73389, 73414, -73414, -73421, -73440, -73479, -73487, -73502, -73511, -73527, +73445, +73445, +73445, +73456, +73490, +73506, +73506, +73526, +73543, 73549, -73556, -73576, -73576, -73576, -73586, -73595, -73595, -73602, -73602, -73621, -73663, -73670, -73684, -73691, -73724, -73743, +73549, +73566, +73573, +73573, +73573, +73585, +73597, +73604, +73604, +73614, +73639, +73639, +73649, +73666, +73666, +73685, +73685, +73696, +73735, +73735, 73771, -73783, -73783, -73783, -73783, -73800, -73800, -73805, -73811, -73828, -73828, -73833, -73853, -73870, -73875, -73875, -73894, -73935, -73959, -73979, -74000, -74000, -74006, -74013, -74013, -74013, -74042, -74055, -74062, -74069, -74069, -74069, -74069, -74076, -74082, -74107, -74114, -74121, -74141, -74146, -74166, -74166, -74184, -74205, -74219, -74259, -74259, -74259, -74288, -74329, -74329, -74336, -74336, -74376, -74383, -74383, -74383, -74390, -74410, -74417, -74417, -74424, -74431, -74453, -74467, -74481, -74514, -74537, -74552, -74552, -74552, -74561, -74561, -74571, -74571, -74571, -74578, -74597, -74597, -74621, -74641, -74641, -74648, -74685, -74709, -74709, -74724, -74758, -74758, -74772, -74782, -74805, -74811, -74841, +73771, +73802, +73826, +73826, +73836, +73873, +73873, +73873, +73873, +73884, +73884, +73884, +73884, +73884, +73884, +73884, +73903, +73903, +73936, +73936, +73936, +73955, +74030, +74040, +74066, +74086, +74086, +74096, +74105, +74105, +74112, +74112, +74124, +74149, +74149, +74149, +74149, +74156, +74156, +74156, +74180, +74180, +74235, +74242, +74279, +74279, +74320, +74320, +74335, +74350, +74358, +74372, +74372, +74380, +74402, +74402, +74434, +74470, +74490, +74497, +74508, +74533, +74546, +74546, +74546, +74546, +74560, +74560, +74567, +74607, +74614, +74614, +74623, +74659, +74678, +74678, +74693, +74731, +74731, +74737, +74737, +74753, +74764, +74764, +74764, +74810, +74818, +74818, +74828, +74844, +74864, +74864, +74864, +74864, +74884, +74884, 74899, -74912, -74925, -74933, -74940, -74959, -74975, -74982, -74989, -75002, -75036, -75036, -75076, -75083, -75119, -75133, -75155, -75169, +74927, +74927, +74934, +74955, +75022, +75053, +75053, +75062, +75062, +75062, +75070, +75079, +75123, +75123, +75123, +75123, +75123, +75134, +75134, +75134, +75134, +75148, +75148, 75174, -75195, -75195, -75224, -75224, -75224, -75239, -75269, -75284, -75284, -75312, -75329, -75383, -75383, +75196, +75213, +75213, +75213, +75264, +75285, +75285, +75285, +75313, +75320, +75320, +75333, +75350, +75391, +75391, +75391, 75404, -75451, -75451, -75473, -75473, -75482, -75488, -75488, -75488, -75517, -75527, -75534, -75534, -75558, -75581, -75604, -75644, -75666, -75666, -75673, -75706, -75706, -75725, -75757, -75764, -75764, -75783, -75807, -75827, -75866, -75899, -75906, -75913, -75913, -75943, -75955, -75967, -75995, -76031, -76072, -76072, -76079, -76095, -76112, -76112, -76119, -76126, -76126, -76133, -76144, -76144, -76166, -76186, -76186, +75404, +75412, +75412, +75425, +75450, +75458, +75458, +75458, +75458, +75458, +75458, +75489, +75511, +75511, +75535, +75576, +75576, +75576, +75586, +75597, +75610, +75610, +75634, +75695, +75695, +75695, +75708, +75708, +75734, +75734, +75734, +75769, +75796, +75809, +75845, +75880, +75904, +75910, +75937, +75937, +75937, +75937, +75937, +75954, +75972, +75972, +75972, +75972, +76012, +76012, +76022, +76035, +76051, +76051, +76067, +76108, +76108, +76108, +76108, +76137, +76137, +76137, +76137, +76146, +76154, +76154, +76154, +76169, +76185, +76185, 76203, -76203, -76234, -76234, -76249, -76263, -76305, -76316, -76325, -76343, -76361, -76368, -76368, -76368, -76434, -76466, -76473, -76481, -76481, -76499, -76536, -76536, -76536, -76536, -76567, -76567, -76567, -76574, -76574, -76582, -76582, -76582, -76582, -76593, -76608, -76608, -76608, -76608, -76615, -76632, -76661, -76668, -76694, -76701, -76701, -76701, -76718, -76738, -76772, -76780, -76780, -76780, -76780, -76794, -76808, -76808, -76808, -76825, -76841, -76867, -76885, -76912, -76912, -76912, -76939, -76939, -76957, -76957, -76973, -77001, -77015, -77015, -77027, -77027, -77060, -77070, -77070, +76216, +76216, +76216, +76216, +76228, +76228, +76228, +76228, +76246, +76251, +76251, +76251, +76251, +76268, +76268, +76268, +76360, +76360, +76360, +76379, +76397, +76412, +76423, +76433, +76472, +76472, +76472, +76488, +76488, +76509, +76523, +76533, +76539, +76610, +76610, +76627, +76635, +76641, +76641, +76663, +76663, +76686, +76692, +76726, +76771, +76771, +76771, +76771, +76816, +76851, +76851, +76851, +76851, +76857, +76872, +76872, +76888, +76907, +76907, +76907, +76965, +76981, +76981, +76991, +77022, +77049, +77049, +77055, +77088, +77088, +77088, 77093, -77104, -77114, -77129, -77129, -77129, +77120, 77136, 77136, -77136, -77184, -77199, -77221, -77229, -77236, -77236, -77249, -77276, -77309, -77332, -77362, -77362, -77388, -77398, -77404, -77404, -77450, -77460, -77487, -77487, -77504, -77519, -77539, -77549, -77549, -77556, -77556, -77572, -77572, -77580, -77610, -77631, -77631, -77631, -77631, -77650, -77659, -77659, -77659, -77670, -77670, -77682, -77682, -77682, -77730, -77730, -77730, -77738, -77738, -77738, -77738, -77738, -77748, -77748, -77761, -77789, -77808, -77808, -77824, -77824, -77824, -77824, -77824, -77824, -77835, -77835, -77867, -77895, -77895, -77914, -77914, -77933, -77966, -78003, -78039, -78057, -78071, -78098, -78122, -78122, -78128, -78159, -78159, -78169, -78201, -78201, -78208, -78226, -78247, -78257, +77166, +77175, +77175, +77191, +77201, +77242, +77253, +77253, +77261, +77261, +77278, +77285, +77285, +77285, +77296, +77296, +77305, +77324, +77324, +77324, +77344, +77344, +77359, +77359, +77364, +77372, +77372, +77372, +77372, +77456, +77456, +77456, +77462, +77482, +77482, +77482, +77500, +77526, +77537, +77537, +77548, +77592, +77613, +77613, +77613, +77613, +77640, +77664, +77664, +77704, +77704, +77704, +77734, +77741, +77751, +77751, +77774, +77792, +77828, +77828, +77839, +77854, +77854, +77854, +77863, +77905, +77905, +77905, +77905, +77944, +77979, +77989, +77989, +77989, +77989, +77989, +78016, +78030, +78043, +78049, +78058, +78080, +78095, +78119, +78127, +78137, +78178, +78188, +78205, +78205, +78205, +78212, +78217, +78243, 78268, 78268, -78280, -78280, -78280, -78280, -78293, -78319, -78319, -78342, -78356, -78372, -78381, -78381, -78396, -78396, -78396, -78396, -78434, -78453, -78453, -78459, -78477, -78477, -78477, -78477, +78268, +78303, +78316, +78316, +78358, +78412, +78422, +78422, +78422, +78437, +78450, +78450, +78455, +78465, 78487, -78492, -78492, -78532, -78542, -78570, -78587, -78603, -78633, -78644, -78644, -78644, -78644, +78487, +78487, +78517, +78530, +78530, +78558, +78558, +78588, +78595, +78595, +78595, 78650, -78693, -78693, -78735, -78758, -78787, -78824, -78838, -78838, -78838, -78838, -78838, -78838, -78849, -78869, -78869, -78869, -78869, -78891, -78891, -78891, -78891, -78898, -78898, -78898, -78918, -78944, -78944, -78958, -78965, -78965, -78972, -78984, -78998, -78998, -78998, -79034, -79057, -79064, +78650, +78660, +78704, +78704, +78710, +78720, +78775, +78785, +78785, +78793, +78793, +78807, +78807, +78807, +78842, +78842, +78842, +78856, +78856, +78873, +78873, +78884, +78928, +78942, +78954, +78954, +78990, +79019, +79030, +79045, +79084, 79084, 79090, -79090, -79090, -79102, -79116, -79123, -79132, -79155, -79180, -79180, -79194, -79194, -79217, -79217, -79217, -79224, -79243, -79243, -79243, -79250, -79257, -79264, -79301, +79120, +79163, +79169, +79169, +79177, +79193, +79193, +79203, +79218, +79218, +79230, +79230, +79239, +79262, +79262, +79262, +79262, +79282, +79282, +79289, +79308, +79325, 79331, -79339, -79339, -79339, -79346, -79353, -79361, -79368, -79375, -79397, -79404, -79415, -79428, -79428, -79436, -79448, -79455, -79455, -79487, -79504, -79511, -79534, -79548, -79566, -79573, +79348, +79402, +79413, +79419, +79419, +79430, +79451, +79476, +79476, +79483, +79519, +79535, +79535, +79555, 79583, -79602, -79633, -79648, +79590, +79590, +79590, +79590, +79590, +79590, +79608, +79638, +79638, +79652, +79652, +79652, 79670, -79677, -79677, -79684, -79684, -79706, -79706, -79725, -79764, -79764, -79770, -79793, -79793, -79809, -79809, -79809, -79809, -79830, -79837, -79843, -79876, -79899, -79899, -79899, -79936, -79942, -79952, -79967, -79998, -80047, -80088, -80137, -80144, -80164, -80171, -80178, -80178, -80178, -80185, -80192, -80239, -80247, -80302, -80302, -80326, -80350, -80357, -80357, -80385, -80396, -80417, -80455, -80455, -80455, -80480, -80514, -80531, -80543, -80543, -80543, -80571, +79693, +79693, +79703, +79709, +79709, +79709, +79735, +79750, +79760, +79773, +79811, +79835, +79835, +79835, +79874, +79874, +79874, +79884, +79920, +79920, +79925, +79940, +79958, +79988, +79988, +79988, +79997, +80043, +80043, +80043, +80090, +80090, +80097, +80111, +80132, +80132, +80132, +80149, +80182, +80182, +80182, +80182, +80182, +80182, +80182, +80195, +80195, +80214, +80214, +80238, +80238, +80238, +80238, +80238, +80262, +80293, +80293, +80303, +80361, +80382, +80382, +80392, +80415, +80415, +80415, +80415, +80434, +80434, +80434, +80434, +80434, +80463, +80463, +80463, +80482, +80482, +80482, +80490, +80508, +80508, +80508, +80508, +80519, +80537, +80537, +80564, 80618, 80618, -80625, -80685, -80690, -80711, -80718, -80741, -80755, -80776, -80776, -80776, -80776, -80790, -80790, -80797, -80815, -80838, -80856, -80863, -80870, +80618, +80634, +80675, +80675, +80675, +80675, +80675, +80675, +80675, +80675, +80705, +80742, +80748, +80748, +80764, +80764, +80764, +80775, +80775, +80775, +80775, +80784, +80839, +80853, +80853, +80862, 80877, -80877, -80877, -80885, -80904, -80948, -80965, -80986, -81006, -81006, -81027, -81041, -81041, -81062, -81062, +80884, +80890, +80906, +80930, +80930, +80930, +80930, +80963, +80979, +80979, +80992, +81019, +81026, +81037, +81037, +81071, +81071, +81087, +81087, 81087, -81094, -81094, -81094, 81108, -81117, -81124, -81143, -81150, -81173, -81192, -81210, -81210, -81227, -81266, -81279, -81302, -81302, -81309, -81309, -81337, -81348, -81355, -81362, -81386, -81411, -81421, -81421, -81456, -81480, -81504, -81529, -81555, -81590, -81597, -81604, -81621, -81621, -81628, -81628, -81652, -81680, -81680, +81108, +81119, +81119, +81134, +81134, +81134, +81134, +81146, +81146, +81169, +81188, +81236, +81249, +81249, +81273, +81346, +81346, +81367, +81381, +81413, +81413, +81413, +81452, +81457, +81457, +81469, +81469, +81481, +81488, +81495, +81495, +81511, +81511, +81524, +81524, +81524, +81532, +81558, +81596, +81632, +81632, +81632, +81632, +81645, +81651, +81651, 81707, -81714, -81738, -81738, -81763, -81776, -81801, -81808, -81830, -81844, -81865, -81872, -81884, -81884, +81740, +81740, +81778, +81821, +81826, +81826, +81826, +81851, +81870, +81870, 81896, -81896, -81896, -81903, -81903, -81917, -81924, -81939, -81995, -82003, -82026, -82056, -82056, -82056, -82078, -82078, -82086, -82109, -82150, -82165, -82165, -82186, -82186, -82186, -82186, -82186, -82208, -82208, +81914, +81976, +81976, +81976, +81999, +82014, +82014, +82024, +82066, +82081, +82081, +82081, +82099, +82099, +82107, +82116, +82116, +82116, +82116, +82116, +82116, +82132, +82132, +82139, +82166, +82166, +82166, +82192, +82213, +82213, +82213, 82226, -82226, -82239, -82284, -82291, -82301, -82322, -82339, -82361, -82368, -82396, -82412, -82425, -82425, -82425, -82440, -82457, -82489, -82503, -82522, -82522, -82541, -82550, -82567, -82567, -82576, -82594, -82601, -82601, -82616, -82616, -82616, -82616, -82634, -82634, -82634, -82655, -82662, -82676, -82676, -82703, -82737, -82744, -82774, -82816, -82839, -82839, -82869, -82894, -82913, -82929, +82244, +82251, +82263, +82263, +82289, +82289, +82289, +82299, +82338, +82349, +82349, +82349, +82389, +82403, +82403, +82410, +82418, +82418, +82418, +82428, +82428, +82475, +82482, +82515, +82515, +82515, +82515, +82515, +82559, +82559, +82559, +82559, +82559, +82595, +82595, +82606, +82622, +82635, +82643, +82660, +82660, +82672, +82672, +82683, +82718, +82736, +82736, +82736, +82756, +82786, +82786, +82786, +82805, +82813, +82826, +82836, +82875, +82875, +82875, +82875, +82907, +82907, +82907, +82907, +82925, +82925, +82925, 82941, -82954, -82954, -82954, -82978, -82983, -82983, -83017, +82985, 83024, -83024, -83024, -83024, -83024, -83031, -83049, -83092, -83111, -83118, -83131, -83138, -83162, -83182, -83202, -83209, -83209, -83216, -83216, -83216, -83251, -83251, -83251, -83251, -83258, -83272, -83314, -83314, -83314, -83354, -83366, -83366, -83397, -83412, -83419, -83419, -83434, -83440, -83464, -83464, -83497, -83497, -83497, -83524, -83542, -83556, -83611, -83611, -83611, -83611, -83616, -83616, -83667, -83675, -83681, -83704, -83730, -83730, -83749, -83767, -83784, -83789, -83823, -83823, -83858, +83041, +83041, +83077, +83086, +83086, +83086, +83105, +83117, +83117, +83117, +83157, +83157, +83157, +83157, +83196, +83211, +83221, +83249, +83249, +83249, +83249, +83249, +83249, +83265, +83265, +83265, +83304, +83394, +83394, +83394, +83427, +83427, +83427, +83427, +83449, +83449, +83449, +83472, +83517, +83537, +83537, +83537, +83553, +83575, +83575, +83575, +83620, +83647, +83647, +83663, +83663, +83673, +83673, +83673, +83685, +83700, +83700, +83700, +83700, +83705, +83705, +83705, +83745, +83745, +83745, +83788, +83799, +83799, +83799, +83809, +83809, +83817, +83817, +83827, +83827, +83827, +83827, +83827, +83851, +83865, 83872, 83872, -83877, -83893, -83893, -83912, -83912, -83934, -83934, -83941, -83957, -83957, -83968, -83984, -83990, -84001, -84016, -84023, -84048, +83904, +83904, +83904, +83904, +83904, +83904, +83904, +83904, +83928, +83958, +83958, +83958, +83958, +83970, +83970, +84007, +84024, +84024, +84032, +84040, +84040, +84040, +84040, +84054, 84073, -84073, -84098, -84140, -84140, -84140, -84160, -84203, +84087, +84094, +84094, +84094, +84104, +84104, +84125, +84125, +84125, +84125, +84138, +84157, +84157, +84164, +84181, +84205, 84233, -84233, -84245, -84268, -84304, -84304, -84304, -84309, -84315, -84340, -84376, -84388, -84437, -84455, -84462, -84482, -84502, -84516, -84516, -84516, -84532, -84542, -84542, -84542, -84588, -84588, -84608, -84635, -84635, -84635, -84649, -84681, -84698, -84735, -84756, -84774, -84774, -84774, -84774, -84797, -84797, -84815, -84832, -84832, -84832, -84842, -84842, -84869, -84869, -84869, -84879, -84899, -84906, -84906, -84906, -84920, -84925, +84240, +84240, +84273, +84273, +84280, +84297, +84317, +84317, +84317, +84317, +84317, +84317, +84324, +84334, +84369, +84400, +84400, +84400, +84419, +84419, +84419, +84441, +84441, +84480, +84480, +84480, +84480, +84480, +84489, +84499, +84499, +84499, +84499, +84504, +84520, +84527, +84527, +84550, +84566, +84610, +84624, +84624, +84674, +84674, +84674, +84680, +84715, +84715, +84733, +84753, +84753, +84777, +84777, +84798, +84875, +84891, +84891, +84933, 84950, -84965, -84982, -84982, -84994, -84999, -85011, -85041, -85041, -85062, -85062, +84967, +84967, +84974, +85048, 85062, 85062, +85078, +85078, 85086, -85096, -85096, -85121, -85121, -85140, -85140, -85178, -85178, -85196, -85215, -85235, -85235, -85235, -85257, -85257, -85257, -85266, -85279, -85293, -85293, -85293, -85299, -85325, -85325, -85331, -85358, -85358, -85358, -85366, -85379, -85391, -85419, -85419, +85093, +85103, +85103, +85115, +85115, +85115, +85147, +85168, +85190, +85190, +85190, +85213, +85213, +85213, +85247, +85247, +85247, +85262, +85324, +85324, +85324, +85324, +85346, +85372, +85372, +85372, +85402, +85425, 85436, -85442, -85465, -85471, -85495, -85495, -85495, +85466, +85486, +85486, +85486, +85486, +85486, 85505, 85505, -85517, -85517, -85517, -85517, -85561, -85577, -85577, -85594, -85599, -85599, -85621, -85635, -85651, +85525, +85542, +85542, +85542, +85542, +85611, +85623, +85623, +85636, +85661, +85661, +85661, +85681, +85681, 85681, 85689, 85689, -85689, -85689, -85708, -85708, -85718, -85718, -85733, -85733, -85733, -85754, -85774, -85789, -85789, -85811, -85811, -85821, -85821, -85821, -85861, -85882, -85882, -85920, -85920, -85935, -85942, -85962, +85702, +85702, +85702, +85721, +85762, +85787, +85787, +85798, +85798, +85798, +85798, +85798, +85798, +85813, +85813, +85822, +85856, +85856, +85856, +85864, +85881, +85881, +85881, +85881, +85899, +85919, +85926, +85939, +85956, +85956, +85956, 85970, -85970, -85994, -85994, -86024, -86035, +85988, +85996, +85996, +85996, +86007, +86007, +86007, +86007, +86046, +86046, +86046, +86053, 86070, -86098, -86103, -86113, -86134, -86165, -86176, -86176, -86176, -86176, -86176, -86176, -86176, +86070, +86070, +86070, +86070, +86070, +86070, +86077, +86095, +86095, +86112, +86112, +86112, +86127, +86127, +86132, +86132, +86132, +86132, +86142, 86189, -86189, -86189, -86189, -86189, -86207, -86217, -86228, -86248, -86265, -86290, -86329, -86329, -86329, -86329, -86329, -86329, -86346, -86346, -86346, -86346, -86375, -86375, -86394, -86394, -86394, -86402, -86418, -86444, -86455, -86455, -86499, -86499, -86518, -86518, -86539, -86554, -86554, -86554, -86581, -86581, -86581, +86208, +86208, +86208, +86224, +86224, +86231, +86261, +86282, +86296, +86302, +86315, +86353, +86353, +86359, +86359, +86359, +86359, +86366, +86366, +86366, +86378, +86388, +86388, +86388, +86401, +86419, +86429, +86440, +86459, +86459, +86459, +86474, +86500, +86500, +86510, +86584, +86584, 86591, -86611, -86611, -86650, -86650, -86650, -86693, -86693, -86693, -86716, -86732, -86752, -86752, -86767, -86767, -86767, -86777, -86794, -86794, -86803, -86803, -86803, -86803, -86822, -86827, -86827, -86861, -86880, -86880, -86908, -86908, -86908, -86936, -86936, -86936, -86936, -86945, -86945, -86967, -86990, -87003, -87015, -87029, -87061, -87080, -87080, -87098, -87129, -87129, -87129, -87173, -87184, -87209, -87209, -87262, -87279, -87331, -87331, -87331, -87362, -87378, -87387, -87387, -87398, -87398, -87405, -87405, +86591, +86610, +86610, +86610, +86617, +86652, +86652, +86658, +86658, +86669, +86692, +86699, +86699, +86734, +86734, +86734, +86734, +86734, +86776, +86776, +86776, +86776, +86799, +86799, +86799, +86831, +86831, +86838, +86838, +86848, +86906, +86906, +86919, +86957, +86976, +86976, +86976, +86976, +86976, +86976, +87002, +87010, +87010, +87010, +87010, +87010, +87016, +87024, +87037, +87060, +87065, +87065, +87065, +87085, +87085, +87085, +87103, +87103, +87110, +87110, +87138, +87138, +87138, +87138, +87164, +87189, +87224, +87231, +87231, +87254, +87287, +87287, +87303, +87303, +87341, +87361, +87372, +87395, 87425, 87425, -87425, -87425, -87425, -87449, -87449, -87454, -87516, -87567, -87577, -87577, -87577, -87595, -87616, -87652, -87657, -87657, -87657, -87666, -87676, -87732, -87748, -87748, -87772, -87772, -87793, -87793, -87793, -87793, -87806, -87806, -87812, -87836, -87836, -87843, -87843, -87843, -87843, -87859, -87859, -87902, -87918, -87918, +87440, +87440, +87440, +87440, +87450, +87464, +87464, +87471, +87471, +87506, +87514, +87514, +87528, +87576, +87608, +87608, +87608, +87608, +87619, +87619, +87631, +87631, +87631, +87644, +87644, +87699, +87707, +87707, +87707, +87729, +87729, +87729, +87729, +87729, +87744, +87752, +87762, +87778, +87785, +87785, +87791, +87817, +87835, +87841, +87851, +87880, +87880, +87888, +87888, +87911, 87928, -87941, -87975, -87975, -88007, -88007, -88050, -88065, -88108, -88128, -88141, -88146, -88167, -88174, -88181, -88197, -88219, -88219, -88244, -88244, -88262, -88278, -88278, -88285, -88304, -88325, -88325, -88338, -88338, -88349, -88365, -88365, -88365, -88365, -88371, -88394, -88414, -88414, -88414, -88423, -88452, -88464, -88485, -88505, -88552, -88552, -88552, -88552, -88563, -88563, -88578, -88585, -88585, -88604, -88629, -88629, -88635, -88646, -88676, -88689, -88706, -88706, -88706, -88733, -88740, -88754, -88774, -88791, -88835, -88851, -88851, -88851, -88861, -88868, -88893, -88905, -88924, -88930, -88930, -88937, -88953, -88966, -88987, -89008, -89028, -89050, -89069, -89069, -89069, -89069, -89096, -89107, -89114, -89114, -89114, -89139, -89163, +87928, +87928, +87945, +87945, +87945, +87954, +87972, +87972, +87972, +87972, +87978, +87978, +87991, +87991, +88026, +88032, +88032, +88056, +88087, +88158, +88179, +88185, +88185, +88185, +88195, +88202, +88217, +88224, +88224, +88224, +88224, +88231, +88256, +88287, +88331, +88345, +88352, +88360, +88422, +88422, +88438, +88438, +88458, +88486, +88493, +88501, +88542, +88542, +88549, +88561, +88602, +88609, +88617, +88617, +88647, +88687, +88694, +88724, +88750, +88757, +88772, +88779, +88824, +88850, +88850, +88866, +88896, +88908, +88908, +88917, +88942, +88949, +88956, +88996, +89018, +89025, +89025, +89041, +89041, +89041, +89041, +89056, +89056, +89063, +89063, +89080, +89085, +89097, +89111, +89111, +89153, +89153, +89153, +89153, +89153, +89153, +89153, +89153, 89178, -89191, -89191, -89197, -89217, -89217, -89239, -89249, -89249, -89302, -89302, -89312, -89328, -89328, -89328, -89328, -89328, -89328, -89344, -89344, -89344, +89178, +89178, +89195, +89195, +89195, +89202, +89225, +89251, +89265, +89265, +89265, +89275, +89323, +89323, +89337, 89344, 89351, 89351, -89361, -89377, -89377, -89377, -89377, -89384, -89403, -89403, +89351, +89369, +89376, +89376, +89386, +89402, +89402, 89409, -89433, -89433, -89440, -89466, -89478, -89518, -89565, -89565, -89581, -89581, -89593, -89598, -89631, -89646, -89646, -89646, -89646, -89669, -89669, -89694, -89694, +89409, +89418, +89436, +89443, +89467, +89474, +89481, +89481, +89503, +89503, +89510, +89510, +89517, +89534, +89534, +89534, +89534, +89552, +89561, +89561, +89597, +89609, +89623, +89644, +89653, +89672, +89672, +89672, +89672, +89679, +89679, +89686, +89686, +89705, 89718, -89743, -89743, +89725, +89737, 89774, 89774, -89811, +89782, +89794, 89831, -89855, -89855, -89855, -89866, -89879, -89886, +89837, +89837, +89862, +89862, +89862, +89862, 89893, -89893, -89902, -89902, -89912, -89928, -89928, -89938, -89966, -89966, -89966, -89966, -89966, -89988, -90001, -90001, -90001, +89905, +89905, +89905, +89922, +89945, +89945, +89945, +89961, +89969, +89976, +89976, +89976, +90012, 90019, -90036, -90036, -90036, -90067, -90067, -90104, -90122, -90136, -90177, -90199, -90206, -90206, -90216, -90240, -90240, -90271, -90300, -90322, -90322, -90346, -90346, -90380, -90391, -90403, -90412, -90424, -90424, -90424, -90446, -90446, -90446, -90458, -90458, -90458, -90490, -90490, -90546, -90546, -90554, -90564, -90564, -90564, -90592, -90592, -90592, -90592, -90592, +90026, +90039, +90064, +90092, +90099, +90106, +90131, +90147, +90166, +90183, +90190, +90190, +90197, +90204, +90204, +90231, +90231, +90246, +90246, +90253, +90260, +90267, +90295, +90302, +90309, +90345, +90383, +90428, +90428, +90453, +90460, +90460, +90467, +90484, +90501, +90501, +90515, +90534, +90534, +90541, +90555, +90581, +90581, +90593, 90600, -90616, -90626, -90650, -90658, -90668, -90692, -90701, -90701, -90701, -90701, -90718, -90725, -90725, -90749, -90749, -90767, -90779, -90779, -90779, -90779, -90797, -90797, -90828, -90869, -90880, -90880, -90909, -90916, -90916, -90928, -90928, -90928, -90928, -90928, -90928, -90928, -90928, -90928, -90937, -90937, -90937, -90946, -90946, -90960, -91009, -91009, -91017, -91059, -91078, -91078, -91086, -91127, -91145, -91145, -91145, -91155, -91168, -91178, -91185, -91185, -91205, -91205, -91205, -91217, -91225, -91246, -91268, -91268, -91281, -91291, -91291, -91305, +90600, +90606, +90606, +90606, +90606, +90640, +90693, +90700, +90711, +90711, +90721, +90728, +90734, +90763, +90778, +90778, +90778, +90794, +90801, +90801, +90809, +90823, +90842, +90850, +90864, +90893, +90927, +90927, +90950, +90957, +90969, +90975, +90982, +91023, +91039, +91060, +91060, +91060, +91091, +91105, +91112, +91149, +91149, +91149, +91149, +91149, +91156, +91156, +91156, +91222, +91222, +91232, +91245, +91245, +91276, +91284, +91284, +91284, +91284, +91292, +91292, 91320, -91333, -91333, -91333, -91345, -91345, -91345, -91345, -91379, -91399, -91411, -91411, -91442, -91442, -91467, -91482, -91501, -91543, -91543, -91561, -91573, -91598, -91610, -91637, -91680, -91680, -91680, -91680, -91711, -91711, -91711, +91344, +91344, +91354, +91395, +91417, +91425, +91425, +91432, +91452, +91459, +91473, +91526, +91548, +91548, +91562, +91589, +91618, +91630, +91630, +91674, +91702, +91714, 91730, -91744, -91744, -91762, -91762, -91839, -91847, -91847, -91860, -91894, -91912, -91928, -91937, -91954, -91966, -91978, -91990, -92021, -92021, -92021, -92039, +91730, +91753, +91760, +91775, +91824, +91824, +91824, +91830, +91845, +91852, +91859, +91859, +91875, +91896, +91913, +91920, +91920, +91927, +91934, +91934, +91968, +91995, +91995, +92009, +92028, +92034, +92034, +92041, +92047, 92072, -92105, -92105, -92105, -92126, -92133, -92165, -92202, -92244, -92250, -92250, -92261, -92261, -92304, -92315, -92315, -92315, -92341, -92341, -92357, -92373, -92396, -92405, -92405, -92405, -92411, -92411, -92430, -92441, -92441, -92441, -92451, -92451, -92451, -92470, -92497, -92526, -92526, -92526, -92526, +92072, +92089, +92097, +92121, +92121, +92128, +92169, +92187, +92201, +92214, +92247, +92247, +92247, +92247, +92253, +92271, +92278, +92290, +92333, +92368, +92368, +92368, +92393, +92423, +92432, +92432, +92455, +92463, +92479, +92491, +92491, +92505, +92505, +92516, +92524, +92524, +92534, +92541, +92541, 92558, -92576, -92576, -92576, -92576, +92572, +92572, 92588, -92595, -92595, -92622, -92633, -92650, -92650, -92662, -92679, -92708, -92708, -92716, -92716, -92716, +92601, +92607, +92614, +92620, +92632, +92632, +92661, +92661, +92666, +92673, +92673, +92673, +92688, +92688, +92703, +92724, 92732, -92759, -92771, -92771, -92790, -92790, -92837, -92891, -92908, -92920, -92920, -92950, -92984, -93000, -93000, -93011, -93011, -93035, -93047, -93077, -93077, -93089, -93089, -93089, -93101, -93101, -93101, -93114, -93148, -93148, -93169, -93187, -93207, -93219, -93233, -93233, -93240, -93249, -93249, -93274, -93296, -93333, -93356, -93356, -93356, -93368, -93437, -93465, -93491, -93501, -93519, -93560, -93560, -93560, -93574, -93587, -93619, -93648, -93688, -93700, -93712, +92732, +92732, +92768, +92784, +92793, +92793, +92793, +92805, +92805, +92805, +92841, +92857, +92866, +92897, +92919, +92931, +92931, +92951, +92951, +92997, +93010, +93010, +93010, +93033, +93033, +93033, +93043, +93078, +93078, +93116, +93144, +93149, +93156, +93174, +93199, +93241, +93241, +93241, +93281, +93302, +93302, +93302, +93322, +93339, +93339, +93373, +93406, +93414, +93414, +93441, +93441, +93467, +93467, +93480, +93500, +93535, +93541, +93547, +93576, +93576, +93586, +93595, +93604, +93617, +93617, +93623, +93676, +93676, +93676, +93682, +93682, +93689, +93689, +93713, +93730, +93730, +93730, 93739, -93739, -93779, -93779, -93797, -93826, -93856, -93895, -93911, -93911, -93943, -93943, -93968, -93968, -93968, -93968, -93968, -93977, -93977, -93977, -93986, -93997, -94008, -94008, -94031, -94049, -94064, -94064, -94074, -94082, -94099, -94099, -94109, -94128, -94145, -94163, -94169, -94169, -94181, -94181, -94181, -94181, -94181, -94181, -94181, +93782, +93782, +93792, +93798, +93817, +93844, +93844, +93844, +93891, +93917, +93917, +93937, +93937, +93937, +93937, +93937, +93937, +93944, +93944, +93944, +93964, +93978, +93978, +93978, +93996, +94004, +94011, +94011, +94011, +94027, +94039, +94039, +94055, +94075, +94075, +94108, +94171, +94171, +94171, 94203, -94203, -94203, -94203, -94221, -94221, -94221, -94221, -94221, -94241, -94241, -94241, -94241, -94241, -94257, -94270, -94270, -94289, -94289, -94311, -94311, -94311, -94338, -94352, -94352, -94352, -94366, -94366, +94282, +94282, +94282, +94294, +94312, +94343, +94353, +94369, 94388, -94388, -94388, -94398, -94398, -94398, -94410, -94410, -94436, -94436, -94452, -94483, -94489, -94501, -94528, -94548, -94571, -94571, -94584, -94604, -94604, -94604, -94604, -94614, -94614, -94614, -94626, -94655, -94670, -94691, -94697, -94712, -94712, -94736, -94743, -94767, -94803, -94862, -94907, -94907, -94907, +94416, +94416, +94422, +94443, +94458, +94458, +94476, +94476, +94476, +94494, +94504, +94525, +94525, +94525, +94525, +94525, +94538, +94538, +94544, +94554, +94580, +94594, +94615, +94650, +94687, +94687, +94687, +94687, +94687, +94687, +94698, +94698, +94710, +94720, +94738, +94755, +94769, +94769, +94806, +94842, +94842, +94842, +94854, +94892, +94892, +94892, 94907, 94907, 94914, -94924, -94951, -94951, -94951, -94951, -94962, -94962, -94969, -94969, -94988, -94988, -94988, -95002, -95021, -95021, -95058, -95058, -95058, +94922, +94938, +94938, +94953, +94953, +94953, +94953, +94953, +94953, +94953, +94989, +94989, +94989, +95007, +95007, +95027, +95027, +95050, +95050, +95077, 95085, -95085, -95096, -95112, -95112, -95112, -95125, -95125, -95152, -95152, -95183, -95183, -95208, -95213, -95213, -95253, -95271, -95291, -95332, -95332, -95332, -95332, -95357, +95092, +95132, +95146, +95146, +95146, +95160, +95160, +95160, +95160, +95180, +95220, +95220, +95234, +95266, +95281, +95281, +95281, +95316, +95352, +95362, 95373, -95383, -95383, -95397, -95407, -95407, -95407, -95407, -95407, -95428, -95435, -95435, -95442, -95442, -95450, -95478, -95492, -95492, -95492, -95492, -95492, -95492, -95521, -95521, -95521, -95589, -95589, -95599, -95623, -95623, -95637, -95651, -95662, -95702, -95702, -95702, -95711, -95718, -95718, -95734, -95741, -95751, -95751, -95764, -95771, -95771, -95788, -95800, +95404, +95404, +95419, +95419, +95439, +95467, +95467, +95467, +95467, +95541, +95541, +95563, +95572, +95598, +95607, +95616, +95669, +95703, +95703, +95728, 95804, 95804, -95809, -95826, -95826, -95859, -95859, -95859, -95875, -95875, -95919, -95919, -95919, -95929, -95929, -95956, -95964, -95978, -95992, -96019, -96019, -96019, -96056, -96056, -96056, -96056, -96075, -96075, -96100, -96100, -96158, +95804, +95813, +95828, +95848, +95848, +95848, +95922, +95922, +95932, +95932, +95949, +96005, +96012, +96020, +96049, +96049, +96049, +96068, +96102, +96102, +96102, +96112, +96112, +96112, +96125, +96150, +96150, +96165, 96176, -96247, -96247, -96275, -96317, -96317, -96317, -96337, -96337, -96337, -96348, -96348, -96348, -96383, -96383, -96403, -96449, -96449, -96458, -96470, -96481, -96481, -96525, -96536, -96543, -96543, -96564, -96564, -96572, -96605, +96176, +96215, +96233, +96233, +96233, +96294, +96307, +96307, +96307, +96307, +96357, +96357, +96379, +96397, +96397, +96397, +96417, +96441, +96471, +96471, +96471, +96471, +96475, +96475, +96475, +96532, +96553, +96560, +96569, +96597, +96597, +96597, +96597, +96614, +96614, +96614, +96633, 96643, 96643, -96653, -96659, -96673, -96677, -96685, -96685, -96697, -96706, -96706, -96706, -96740, -96756, -96766, -96782, -96782, -96792, -96839, -96849, -96866, -96866, -96902, -96945, -96945, -96953, -96953, -97000, -97015, -97034, -97038, -97046, +96660, +96664, +96691, +96708, +96731, +96754, +96785, +96807, +96807, +96820, +96820, +96872, +96872, +96883, +96917, +96947, +96959, +96982, +97001, +97001, +97001, +97009, +97009, +97024, +97024, +97024, +97024, +97042, +97042, 97056, -97104, -97117, -97155, -97155, -97155, -97178, -97199, -97199, -97217, -97247, -97262, -97269, -97269, -97269, -97269, -97277, -97289, -97322, -97339, -97389, -97409, -97409, -97409, -97432, -97448, -97448, -97448, -97448, -97456, -97510, +97056, +97075, +97075, +97075, +97090, +97090, +97090, +97090, +97119, +97119, +97126, +97141, +97141, +97157, +97173, +97190, +97206, +97206, +97216, +97239, +97307, +97307, +97307, +97311, +97330, +97330, +97330, +97330, +97359, +97359, +97359, +97366, +97387, +97387, +97387, +97398, +97455, +97491, +97491, +97497, +97497, +97520, +97520, +97520, +97524, +97524, +97524, 97530, 97530, -97544, -97561, -97581, -97581, -97616, -97616, +97530, +97530, +97545, +97574, +97574, +97574, +97574, +97589, +97610, +97610, +97610, +97629, 97647, -97656, -97660, -97660, -97660, -97683, -97706, -97754, -97775, -97780, -97787, -97787, -97799, -97813, -97813, -97855, -97855, -97855, -97855, -97879, -97919, -97919, -97934, -97945, -97971, -97999, -98016, -98016, -98024, -98024, -98046, -98046, -98053, -98060, -98060, -98060, -98079, -98079, -98089, -98112, +97647, +97687, +97696, +97713, +97713, +97713, +97724, +97734, +97734, +97734, +97734, +97753, +97766, +97777, +97777, +97777, +97777, +97777, +97812, +97841, +97841, +97841, +97861, +97861, +97861, +97883, +97899, +97993, +97993, +97993, +98001, +98001, +98001, +98020, +98073, +98087, +98087, +98097, 98122, -98151, -98151, -98165, -98172, -98172, -98182, -98211, -98226, +98130, +98130, +98146, +98146, +98162, +98162, +98162, +98208, +98229, +98229, +98229, +98246, +98246, +98246, 98257, -98275, -98310, -98328, -98343, -98343, -98360, -98360, -98388, -98409, -98418, -98423, -98423, -98444, -98444, -98469, -98469, -98505, -98515, -98515, -98536, -98536, -98536, -98546, -98552, -98552, -98559, -98559, -98576, -98594, -98607, -98607, -98632, -98632, -98663, -98663, -98676, -98692, -98692, -98692, -98707, -98727, -98744, -98744, -98775, -98775, -98811, -98833, -98853, -98877, -98928, -98928, -98932, -98962, -98984, -98996, -98996, -99017, -99017, -99017, -99030, -99030, -99030, -99051, -99100, -99120, -99120, -99125, -99149, -99149, -99149, -99158, -99158, -99170, -99179, +98257, +98257, +98257, +98265, +98314, +98314, +98314, +98314, +98330, +98342, +98342, +98376, +98376, +98376, +98376, +98387, +98457, +98457, +98467, +98467, +98467, +98467, +98477, +98477, +98504, +98504, +98511, +98511, +98511, +98540, +98540, +98550, +98568, +98605, +98605, +98605, +98605, +98620, +98627, +98637, +98667, +98667, +98667, +98667, +98684, +98693, +98693, +98693, +98693, +98693, +98693, +98693, +98702, +98732, +98732, +98732, +98732, +98732, +98732, +98732, +98756, +98756, +98756, +98756, +98773, +98783, +98793, +98802, +98802, +98836, +98849, +98872, +98893, +98918, +98923, +98933, +98944, +98944, +98944, +98944, +98955, +98977, +98977, +98985, +98985, +98985, +98985, +98990, +99004, +99004, +99004, +99012, +99029, +99091, +99099, +99099, +99136, +99141, +99160, +99172, +99172, +99172, +99172, +99198, 99215, -99246, -99287, -99305, -99316, -99316, -99333, +99239, +99239, +99273, +99273, +99288, +99308, +99323, 99342, -99367, -99367, -99376, -99376, -99376, -99412, -99412, -99429, -99429, -99469, -99473, -99483, +99355, +99355, +99363, +99386, +99414, +99414, +99430, +99463, +99475, +99499, 99506, -99506, -99506, -99506, -99535, -99541, -99541, -99554, -99567, -99567, -99579, -99579, -99579, -99594, -99617, -99657, -99657, -99657, -99668, -99668, -99668, -99673, -99679, -99679, -99679, -99700, -99759, -99772, -99780, -99780, -99780, -99786, -99803, -99803, -99809, -99820, -99839, -99847, -99859, -99859, -99859, -99881, -99881, -99903, -99903, -99903, -99903, -99903, -99909, -99909, -99909, -99929, -99954, -99964, -99964, -99964, -99980, -99980, -99980, -100021, -100029, -100035, -100041, -100045, -100063, -100104, -100136, -100136, -100136, -100144, -100180, -100186, +99589, +99589, +99589, +99589, +99625, +99643, +99643, +99655, +99674, +99674, +99681, +99691, +99716, +99727, +99731, +99731, +99750, +99750, +99750, +99750, +99750, +99750, +99775, +99775, +99793, +99793, +99793, +99799, +99828, +99842, +99842, +99842, +99842, +99856, +99863, +99902, +99976, +99976, +99976, +99984, +100032, +100032, +100032, +100049, +100070, +100087, +100087, +100094, +100094, +100112, +100130, +100139, +100173, 100196, -100238, -100254, -100272, -100296, -100309, -100341, -100341, -100393, -100425, -100425, -100425, -100449, -100449, -100449, -100482, -100482, -100482, -100501, -100535, -100556, -100556, -100573, -100588, -100618, -100618, -100635, -100653, -100653, -100653, -100695, -100695, -100695, -100742, -100742, -100781, -100816, -100816, -100816, -100874, -100874, -100915, -100915, -100923, -100923, -100948, -100948, -100962, -100962, -100962, -100966, -100971, -100979, -100979, -100979, -100979, -100993, -101014, -101029, -101047, -101054, +100196, +100211, +100220, +100220, +100220, +100230, +100264, +100264, +100264, +100264, +100324, +100324, +100336, +100336, +100348, +100348, +100359, +100368, +100368, +100380, +100380, +100396, +100401, +100436, +100436, +100443, +100443, +100447, +100447, +100488, +100514, +100514, +100527, +100527, +100549, +100592, +100592, +100619, +100619, +100619, +100619, +100619, +100624, +100649, +100649, +100701, +100753, +100762, +100773, +100801, +100813, +100813, +100813, +100835, +100896, +100921, +100921, +100934, +101004, +101012, +101012, +101012, 101086, -101086, -101086, -101094, -101115, -101121, -101140, -101150, -101180, -101180, -101180, -101201, -101201, -101213, -101218, -101226, -101234, -101253, -101260, -101275, -101284, -101284, -101300, -101320, -101364, +101099, +101106, +101106, +101173, +101193, +101197, +101197, +101248, +101267, +101267, +101272, +101288, +101288, +101288, +101305, +101312, +101312, +101312, +101324, +101334, 101372, 101372, -101380, -101380, -101392, -101392, -101392, -101399, -101415, -101415, -101433, -101441, -101451, -101458, -101458, -101466, -101498, -101518, -101553, -101553, -101589, -101615, -101629, -101629, -101629, -101645, -101680, -101680, -101680, -101698, -101719, -101727, -101756, -101767, -101772, -101789, -101805, -101805, -101816, -101816, -101816, -101816, -101816, -101840, -101848, -101868, -101868, -101868, -101884, -101903, -101903, -101903, -101909, -101909, -101926, -101932, -101959, -101959, -101977, -101984, -101988, -101988, -101988, -102001, -102007, -102011, -102011, -102011, -102022, -102044, -102054, -102054, -102061, -102061, -102061, -102061, -102061, -102093, -102113, -102129, -102147, -102147, -102155, -102174, -102217, -102237, -102259, -102272, -102279, -102297, -102320, -102351, -102351, -102351, -102365, -102369, -102394, -102420, -102420, -102465, -102492, -102492, -102492, -102492, -102492, -102512, -102512, -102516, -102534, -102534, -102534, -102534, -102576, -102597, +101400, +101400, +101438, +101462, +101474, +101474, +101487, +101499, +101499, +101536, +101580, +101614, +101614, +101657, +101657, +101657, +101662, +101662, +101699, +101699, +101711, +101740, +101740, +101740, +101755, +101782, +101787, +101793, +101814, +101830, +101862, +101862, +101896, +101902, +101902, +101902, +101902, +101902, +101916, +101923, +101946, +101965, +101997, +102019, +102023, +102069, +102089, +102096, +102096, +102140, +102152, +102152, +102166, +102193, +102209, +102216, +102242, +102242, +102274, +102285, +102309, +102352, +102352, +102358, +102358, +102388, +102392, +102392, +102407, +102407, +102416, +102416, +102416, +102437, +102477, +102477, +102484, +102505, +102517, +102517, +102523, +102550, +102550, +102550, +102550, +102550, +102550, +102554, +102573, +102578, 102615, 102615, -102632, -102661, -102674, -102700, -102700, -102727, -102753, -102760, -102782, -102802, -102802, -102832, -102857, -102868, -102868, -102868, -102868, -102882, -102905, -102956, -102986, -102986, -102986, -102986, -102986, -102997, -102997, -102997, +102615, +102634, +102665, +102665, +102665, +102678, +102729, +102729, +102729, +102765, +102769, +102780, +102799, +102836, +102836, +102836, +102863, +102901, +102901, +102901, +102912, +102938, +102938, +102948, +102960, 103003, -103013, -103013, -103013, -103013, 103025, -103043, +103025, +103038, 103059, -103097, -103097, -103104, -103122, -103126, -103137, -103141, -103141, -103165, -103198, -103204, -103227, -103250, -103263, -103267, -103267, -103275, +103087, +103087, +103087, +103128, +103128, +103128, +103169, +103190, +103210, +103236, +103236, +103287, +103287, +103287, +103297, +103297, 103308, -103327, -103344, -103344, -103344, -103350, -103350, -103350, -103379, +103320, +103325, +103334, +103341, +103349, +103356, +103384, +103396, +103396, +103396, +103396, +103396, +103396, 103406, -103406, -103406, -103424, -103439, -103484, -103490, -103506, -103533, -103533, -103550, -103581, -103601, -103601, -103601, -103613, -103666, -103666, -103666, -103681, -103681, -103702, -103702, -103702, -103733, -103749, -103786, -103786, -103798, -103807, -103820, -103820, -103838, -103838, -103861, -103872, -103880, -103880, -103887, -103894, -103894, -103902, -103922, -103941, -103949, -103949, -103970, -103970, -103976, -103976, -103992, -104021, -104041, -104068, -104073, -104073, -104073, -104083, -104083, -104083, -104093, -104103, -104121, -104121, -104121, -104121, -104121, -104148, -104154, -104166, -104166, -104166, -104189, -104189, -104189, -104189, -104201, -104201, -104201, -104241, +103446, +103460, +103460, +103491, +103520, +103532, +103532, +103532, +103532, +103532, +103539, +103555, +103592, +103638, +103638, +103638, +103642, +103678, +103678, +103687, +103694, +103698, +103698, +103724, +103784, +103796, +103818, +103833, +103844, +103844, +103844, +103886, +103928, +103964, +103997, +104018, +104045, +104045, +104045, +104045, +104045, +104057, +104057, +104069, +104105, +104114, +104114, +104134, +104151, +104151, +104163, +104163, +104182, +104203, +104203, +104214, +104246, 104269, -104281, -104281, -104301, -104331, -104331, -104331, -104348, -104348, -104365, -104393, -104415, -104429, -104436, -104442, -104442, -104448, -104466, -104474, -104474, -104474, -104490, -104490, -104508, -104524, -104536, -104536, -104544, -104576, -104576, -104596, -104622, -104622, -104639, -104648, -104665, -104665, -104665, -104672, -104672, -104687, -104703, -104719, -104727, -104751, -104751, -104777, -104815, -104893, -104912, -104912, -104939, -104951, -104951, -104951, +104269, +104292, +104310, +104328, +104335, +104355, +104423, +104445, +104457, +104457, +104487, +104511, +104511, +104525, +104539, +104545, +104565, +104565, +104621, +104635, +104647, +104647, +104730, +104742, +104752, +104752, +104763, +104808, +104814, +104835, +104855, +104855, +104867, +104867, +104905, +104905, +104905, +104932, +104932, 104963, -104967, -104967, -104999, -105032, +104963, +104963, +104997, +105014, 105036, -105050, -105050, -105050, -105066, -105066, -105087, -105087, -105117, -105117, -105117, -105165, -105200, -105228, -105234, -105253, -105253, -105253, -105287, -105310, +105042, +105070, +105070, +105081, +105081, +105093, +105093, +105093, +105093, +105093, +105107, +105107, +105119, +105137, +105149, +105161, +105161, +105174, +105174, +105186, +105198, +105214, +105214, +105214, +105235, +105235, +105269, +105285, +105285, +105285, +105322, 105333, -105348, -105348, -105364, -105364, -105371, -105381, -105391, -105406, -105406, -105415, -105422, -105448, -105448, -105455, -105455, -105466, -105490, -105504, -105504, -105543, -105551, -105551, -105558, -105565, -105575, -105575, -105575, -105575, -105581, -105643, -105643, -105653, -105653, -105664, -105664, -105680, -105680, -105680, -105701, -105718, -105726, -105726, +105333, +105339, +105339, +105339, +105352, +105418, +105446, +105446, +105446, +105446, +105471, +105471, +105484, +105484, +105529, +105529, +105547, +105571, +105589, +105608, +105608, +105691, +105696, +105696, +105696, +105696, +105696, +105696, +105696, +105696, +105696, +105696, +105696, +105706, +105729, +105729, +105743, 105751, -105760, -105803, -105803, -105803, -105803, -105803, -105803, -105803, -105809, -105842, -105842, -105848, -105848, -105866, -105873, -105873, -105882, -105882, -105886, -105886, -105886, -105912, -105919, -105940, -105947, -105956, -105963, -105963, -105963, -105963, -105963, -105963, -105970, -105996, -105996, -105996, -105996, -106035, -106035, -106035, -106050, -106071, -106082, -106123, -106146, -106167, -106167, -106187, -106197, -106197, -106197, -106197, -106226, -106250, -106250, -106269, -106275, -106281, -106281, -106281, -106304, -106304, -106304, -106333, +105755, +105755, +105755, +105783, +105783, +105783, +105799, +105812, +105812, +105812, +105818, +105824, +105844, +105844, +105844, +105844, +105861, +105861, +105861, +105913, +105926, +105926, +105961, +105977, +106014, +106021, +106027, +106047, +106072, +106072, +106086, +106110, +106122, +106133, +106133, +106150, +106162, +106169, +106201, +106220, +106233, +106233, +106241, +106247, +106247, +106247, +106264, +106264, +106264, +106264, +106268, +106278, +106306, +106306, +106306, 106355, +106366, 106373, -106382, -106382, -106382, -106412, -106419, -106464, -106464, -106464, -106464, -106468, -106489, -106489, -106496, -106528, -106528, -106549, -106549, -106576, +106373, +106373, +106373, +106381, +106399, +106481, +106481, +106487, +106507, +106529, +106529, +106529, +106529, +106546, +106554, +106554, +106560, +106560, +106560, +106560, 106582, -106591, -106591, -106597, -106597, -106597, -106615, -106651, -106726, -106726, -106736, -106779, -106793, -106793, -106818, -106818, -106818, -106824, -106853, -106868, -106872, -106872, -106872, -106879, -106879, -106897, -106913, -106930, -106940, -106940, -106952, -106980, -106993, -107006, -107006, -107047, -107087, -107087, -107094, -107113, -107139, -107139, -107139, -107139, -107192, -107229, -107237, -107237, -107237, -107263, +106608, +106608, +106608, +106612, +106612, +106612, +106612, +106612, +106612, +106623, +106623, +106644, +106644, +106644, +106644, +106644, +106653, +106653, +106653, +106653, +106683, +106683, +106704, +106710, +106728, +106743, +106743, +106757, +106773, +106773, +106773, +106773, +106773, +106773, +106773, +106795, +106847, +106847, +106847, +106863, +106887, +106902, +106902, +106902, +106902, +106902, +106902, +106924, +106938, +106970, +106970, +106983, +107016, +107044, +107044, +107058, +107058, +107058, +107066, +107066, +107091, +107101, +107101, +107125, +107143, +107143, +107143, +107169, +107186, +107203, +107203, +107203, +107235, +107235, +107235, +107241, +107252, +107268, +107268, +107281, +107281, 107295, -107312, -107337, -107344, -107351, +107295, +107302, +107302, +107302, +107302, +107332, +107345, 107371, 107371, -107387, -107429, -107436, -107450, -107471, -107514, -107514, -107553, -107560, -107573, -107573, -107647, -107666, -107671, -107671, -107678, -107678, -107704, -107711, -107711, -107746, -107746, -107776, -107776, -107781, -107827, -107859, -107879, -107879, -107879, -107879, +107371, +107371, +107371, +107371, +107371, +107371, +107381, +107381, +107381, +107428, +107428, +107428, +107439, +107500, +107507, +107507, +107518, +107518, +107518, +107527, +107527, +107581, +107594, +107594, +107594, +107614, +107614, +107614, +107622, +107639, +107650, +107659, +107659, +107698, +107713, +107713, +107713, +107713, +107720, +107720, +107734, +107734, +107734, +107734, +107734, +107751, +107765, +107765, +107771, +107809, +107809, +107809, +107847, +107847, +107847, +107847, +107847, +107847, +107862, +107862, +107862, +107862, +107869, +107869, +107876, +107891, +107910, +107910, 107925, -107948, -107955, -107959, -108004, -108014, -108038, -108045, -108045, -108079, -108103, -108110, -108139, -108154, -108173, -108188, -108208, -108221, -108231, -108231, -108231, -108239, -108275, +107941, +107946, +107946, +107946, +107963, +108005, +108005, +108037, +108037, +108077, +108077, +108077, +108107, +108124, +108124, +108162, +108162, +108162, +108162, +108189, +108193, +108193, +108203, +108246, +108246, +108268, +108268, +108289, +108289, +108289, +108289, +108289, +108289, +108306, 108315, -108329, -108346, -108346, -108375, -108375, -108409, -108409, +108340, +108368, +108368, +108368, +108389, +108389, +108389, +108389, +108399, +108419, +108419, +108419, +108441, 108457, -108468, -108468, -108468, -108468, -108468, -108484, -108492, -108492, -108492, -108518, -108535, -108535, -108547, -108594, -108594, -108600, -108600, -108619, -108639, -108655, -108663, -108686, -108686, -108706, -108744, -108794, -108824, -108824, -108830, -108837 +108457, +108457, +108480, +108519, +108553, +108563, +108563, +108605, +108617, +108624, +108640, +108640, +108640, +108640, +108656, +108705, +108750, +108750, +108772, +108831, +108858, +108858, +108877, +108899, +108899, +108904, +108914, +108947, +108990, +108990, +108994, +108994, +108994, +108994, +108994, +109004, +109004, +109004, +109018, +109046, +109066, +109066, +109066, +109066, +109074, +109083, +109097, +109119, +109144, +109144, +109163, +109181, +109185, +109189, +109196, +109196, +109196, +109221, +109233, +109276, +109276, +109276, +109286, +109286, +109302, +109302, +109302, +109322, +109336, +109358, +109358, +109391, +109391, +109391, +109412, +109422, +109436, +109436, +109436, +109436, +109436, +109453, +109479, +109496, +109496, +109505, +109526, +109569, +109569, +109578, +109578, +109612, +109619, +109619, +109644, +109659, +109675, +109675, +109690, +109752, +109787, +109787, +109799, +109837, +109854, +109854, +109854, +109854, +109883, +109883, +109899, +109928, +109928, +109928, +109928 }; static const char *tldData[] = { -"frankfurt.museum\0" -"writesthisblog.com\0" -"mil.gh\0leadpages.co\0" -"co.bi\0" -"london\0" -"co.bn\0" -"jevnaker.no\0" -"kihoku.ehime.jp\0cc.ga.us\0lib.tx.us\0fi.cloudplatform.fi\0loginto.me\0" -"aisai.aichi.jp\0co.ca\0" -"mil.gt\0mn.us\0bplaced.de\0" -"co.bw\0wiw.gov.pl\0" -"co.ci\0avocat.fr\0attorney\0" -"eco\0goupile.fr\0" -"anani.br\0" -"co.cl\0sagae.yamagata.jp\0" -"co.cm\0*.sendai.jp\0college\0" -"mil.hn\0sec.ps\0" -"development.run\0" -"co.cr\0nakama.fukuoka.jp\0from-wi.com\0noticeable.news\0" -"mil.id\0kijo.miyazaki.jp\0" -"\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"name\0" -"press.ma\0" -"co.cz\0" -"co.dk\0" -"uruma.okinawa.jp\0za.bz\0" -"savannahga.museum\0" -"mil.in\0" -"edu\0termez.su\0vps-host.net\0" -"mil.iq\0dtv\0" -"s3-website.ap-south-1.amazonaws.com\0" -"deporte.bo\0" -"*.bzz.dapps.earth\0" -"allfinanz\0" -"ciencia.bo\0" -"journalism.museum\0dnsup.net\0" -"minamata.kumamoto.jp\0is-a-socialist.com\0" -"mil.jo\0zapto.org\0" -"\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0" -"digital\0" -"vestv\xc3\xa5g\xc3\xb8y.no\0" -"association.museum\0" -"cloudns.pro\0" -"mil.kg\0" -"capital\0" -"aikawa.kanagawa.jp\0inf.ua\0" -"cc.nj.us\0" -"gloppen.no\0" -"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0mil.km\0dvr\0" -"hanamigawa.chiba.jp\0from-pa.com\0" -"student.aero\0" -"o.bg\0mil.kr\0jeju.kr\0" -"co.gg\0" -"jx.cn\0\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0" -"mil.kz\0" -"humanities.museum\0" -"co.gl\0" -"kusatsu.gunma.jp\0" -"promo\0" -"bauern.museum\0chiropractic.museum\0" -"weibo\0is-a-caterer.com\0" -"kamoenai.hokkaido.jp\0mil.lv\0" -"mil.mg\0" -"co.gy\0" -"fundacio.museum\0" -"shibecha.hokkaido.jp\0" -"beardu.no\0" -"florist\0is-slick.com\0" +"nanae.hokkaido.jp\0" +"pgfog.com\0" +"tel.tr\0" +"k12.fl.us\0" +"eastafrica.museum\0tec.ve\0alpha.bounty-full.com\0" +"blogspot.com.ar\0" +"asker.no\0tjeldsund.no\0" +"trentin-suedtirol.it\0karpacz.pl\0usercontent.jp\0" +"edeka\0blogspot.com.au\0" +"*.magentosite.cloud\0" +"ghost.io\0" +"m\xc3\xa5lselv.no\0" +"pomorze.pl\0" +"tas.gov.au\0zt.ua\0s3-website.ap-northeast-2.amazonaws.com\0" +"blogspot.com.br\0" +"\xe4\xb8\xaa\xe4\xba\xba.hk\0bo.telemark.no\0sund.no\0*.moonscale.io\0" +"freeboxos.com\0" +"blogspot.com.by\0" +"am.br\0" +"web.bo\0blogspot.com.co\0" "missoula.museum\0" -"lib.nh.us\0" -"co.id\0tgory.pl\0" -"co.hu\0" -"mil.mv\0" -"uwajima.ehime.jp\0mil.ng\0narvik.no\0" -"tkmaxx\0sells-it.net\0" -"sa.au\0mil.my\0mil.ni\0" -"\xe9\x95\xb7\xe9\x87\x8e.jp\0mil.mz\0" -"co.il\0" -"co.im\0opole.pl\0" -"co.in\0" -"mil.no\0" -"of.london\0" -"co.ir\0oyodo.nara.jp\0" -"7.bg\0" -"co.it\0onrender.com\0" -"co.je\0" -"sumy.ua\0" -"boavista.br\0mil.nz\0" -"sera.hiroshima.jp\0" -"targi.pl\0download\0" -"fujiyoshida.yamanashi.jp\0vaapste.no\0" -"glug.org.uk\0" -"co.jp\0football\0" -"aju.br\0" -"co.ke\0mil.pe\0" -"sa.cr\0fineart.museum\0sel.no\0theworkpc.com\0" -"ise.mie.jp\0iheya.okinawa.jp\0snoasa.no\0" -"aomori.aomori.jp\0mil.ph\0\xd1\x80\xd1\x84\0" -"shimogo.fukushima.jp\0" -"shiso.hyogo.jp\0" -"inashiki.ibaraki.jp\0" -"baths.museum\0mil.pl\0" -"sasaguri.fukuoka.jp\0" -"scotland.museum\0" -"mil.qa\0" -"co.kr\0" -"co.lc\0" -"accident-investigation.aero\0nt.edu.au\0" -"tushu\0" -"public.museum\0mil.py\0boutir.com\0qc.com\0" -"ca-central-1.elasticbeanstalk.com\0" -"cechire.com\0" -"ama.aichi.jp\0" -"doshi.yamanashi.jp\0cipriani\0" -"co.ma\0" -"airbus\0mine.nu\0" -"co.ls\0" -"co.me\0" -"co.mg\0" -"elverum.no\0" -"misato.akita.jp\0otoyo.kochi.jp\0corporation.museum\0historicalsociety.museum\0" -"emb.kw\0co.na\0s\xc3\xa1l\xc3\xa1t.no\0uk0.bigv.io\0" -"\xc3\xb8rland.no\0" -"f.se\0" -"co.mu\0mil.ru\0" -"vi.it\0co.mw\0mil.rw\0" -"mil.sh\0" -"co.ni\0exposed\0" -"co.mz\0" -"her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0navy\0" -"zj.cn\0ebino.miyazaki.jp\0co.nl\0" -"kolobrzeg.pl\0" -"izu.shizuoka.jp\0co.no\0" -"apple\0" -"kami.miyagi.jp\0" -"ooguy.com\0" -"mil.st\0" -"wang\0" -"!city.yokohama.jp\0" -"mil.sy\0" -"co.nz\0mil.tj\0" -"kaho.fukuoka.jp\0co.om\0mil.tm\0lib.ri.us\0panel.gg\0" -"mil.to\0" -"tiffany\0" -"sakai.osaka.jp\0" -"chosei.chiba.jp\0mil.tr\0" -"educational.museum\0" -"losangeles.museum\0" -"veg\xc3\xa5rshei.no\0h\xc3\xa4kkinen.fi\0" -"yamamoto.miyagi.jp\0" -"mil.tw\0" -"stjordalshalsen.no\0" -"iwakura.aichi.jp\0kusatsu.shiga.jp\0mil.tz\0" -"sp.leg.br\0co.pl\0" -"x.bg\0nyuzen.toyama.jp\0co.pn\0" -"natal.br\0" -"\xe6\xbe\xb3\xe9\x96\x80\0bofa\0" -"mil.vc\0" -"mil.ve\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0dattoweb.com\0" -"co.pw\0" -"sa.it\0" -"hekinan.aichi.jp\0mil.uy\0fan\0" -"funabashi.chiba.jp\0" -"kamijima.ehime.jp\0" -"from-sc.com\0" -"barsy.site\0" -"torino.it\0" -"tjome.no\0" -"us-east-1.amazonaws.com\0" -"forsand.no\0music\0" -"taiki.hokkaido.jp\0community-pro.de\0" -"krasnik.pl\0" -"hobby-site.com\0" -"egyptian.museum\0\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0" -"co.ro\0" -"jus.br\0" -"toyama.jp\0tsu.mie.jp\0shiftcrypto.dev\0" -"ikeda.gifu.jp\0co.rs\0k12.pr.us\0" -"myphotos.cc\0" -"nagasaki.jp\0" -"co.rw\0" -"yusui.kagoshima.jp\0" -"aparecida.br\0cupcake.is\0" -"shingo.aomori.jp\0bergen.no\0\xe5\xbe\xae\xe5\x8d\x9a\0" -"esq\0net.eu.org\0paas.datacenter.fi\0no-ip.ca\0" -"toyoura.hokkaido.jp\0nhlfan.net\0" -"uk.primetel.cloud\0" -"us-east-1.elasticbeanstalk.com\0" -"mock.pstmn.io\0" -"tottori.jp\0hofu.yamaguchi.jp\0bievat.no\0" -"co.st\0" -"hi.cn\0warabi.saitama.jp\0mil.ye\0" -"soja.okayama.jp\0co.th\0" -"user.srcf.net\0" -"presidio.museum\0co.sz\0co.tj\0smile\0" -"co.tm\0" -"gs.ol.no\0" -"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" -"muos\xc3\xa1t.no\0" -"hitra.no\0mil.za\0for-better.biz\0co.ua\0" -"ggee\0" -"flesberg.no\0co.tt\0" -"co.ug\0" -"co.tz\0" -"andoy.no\0co.uk\0lacaixa\0" -"iwafune.tochigi.jp\0mil.zm\0cloudns.org\0" -"stargard.pl\0eus\0" -"pb.ao\0" -"mer\xc3\xa5ker.no\0" -"greta.fr\0dyndns-office.com\0" -"bo.nordland.no\0co.us\0" -"forl\xc3\xac-cesena.it\0k12.nj.us\0" -"or.at\0rendalen.no\0co.ve\0calvinklein\0" -"social\0" -"mil.zw\0" -"cuneo.it\0" -"co.vi\0" -"or.bi\0westfalen.museum\0namdalseid.no\0co.uz\0" -"cyon.link\0" -"dyndns-pics.com\0" -"cc.sd.us\0" -"jp.eu.org\0" -"kameoka.kyoto.jp\0" -"kozow.com\0" -"balsan-s\xc3\xbc""dtirol.it\0" -"\xe6\xbe\xb3\xe9\x97\xa8\0" -"hirosaki.aomori.jp\0pub.sa\0" -"or.ci\0fitness\0" -"trentinoaadige.it\0matsubushi.saitama.jp\0rackmaze.com\0" -"vic.edu.au\0udi.br\0" -"lezajsk.pl\0" -"o.se\0" -"or.cr\0lom.it\0vr.it\0uchihara.ibaraki.jp\0" -"shangrila\0" -"luroy.no\0datsun\0ftpaccess.cc\0" -"myds.me\0" -"kh.ua\0analytics\0" -"mobile\0" -"lib.ga.us\0" -"for.one\0" -"casino\0" -"bond\0" -"now.sh\0" -"porsgrunn.no\0" -"globo\0" -"dd-dns.de\0" -"trentinos\xc3\xbc""d-tirol.it\0" -"fit\0" -"co.za\0" -"iris.arpa\0" -"lodingen.no\0dni.us\0" -"toyonaka.osaka.jp\0vi.us\0" -"ina.saitama.jp\0porsangu.no\0" -"book\0" -"coloradoplateau.museum\0sydney\0" -"co.zm\0" -"nakanoto.ishikawa.jp\0" -"fie.ee\0gs.hl.no\0is-a-cubicle-slave.com\0" -"muenster.museum\0" -"iamallama.com\0outsystemscloud.com\0" -"shopping\0barsy.shop\0" -"konsulat.gov.pl\0co.zw\0" -"tsuruga.fukui.jp\0" -"ddnss.org\0" -"tsuwano.shimane.jp\0" -"alaska.museum\0bukhara.su\0" -"lib.nv.us\0" -"credit\0" -"sakai.fukui.jp\0\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0" -"monza-brianza.it\0lom.no\0" -"schweiz.museum\0na4u.ru\0" -"koshigaya.saitama.jp\0" -"rana.no\0gentapps.com\0" -"fly\0" -"or.id\0" -"mitane.akita.jp\0" -"kitagata.saga.jp\0" -"my-vigor.de\0" -"tc.br\0histoire.museum\0ravpage.co.il\0" -"caa.aero\0" -"indianmarket.museum\0pdns.page\0" -"akune.kagoshima.jp\0" -"tome.miyagi.jp\0" -"or.it\0sakurai.nara.jp\0\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0" -"b\xc3\xa1hcavuotna.no\0aejrie.no\0" -"nsw.edu.au\0sandefjord.no\0" -"project.museum\0" -"tr\xc3\xa6na.no\0" -"imb.br\0aus.basketball\0" -"cx.ua\0" -"etajima.hiroshima.jp\0" -"or.jp\0" -"mcdir.me\0" -"sakado.saitama.jp\0" -"asmatart.museum\0" -"or.ke\0" -"from-ne.com\0" -"foo\0" -"ishinomaki.miyagi.jp\0" -"tachiarai.fukuoka.jp\0okawa.kochi.jp\0" -"is-uberleet.com\0" -"comcast\0" -"chikujo.fukuoka.jp\0or.kr\0fox\0it1.jenv-aruba.cloud\0" -"ny.us\0noop.app\0" -"rj.gov.br\0" -"bolzano-altoadige.it\0mansions.museum\0" -"tsubetsu.hokkaido.jp\0" -"tokyo.jp\0" -"childrens.museum\0saltdal.no\0webcam\0" -"ap-northeast-1.elasticbeanstalk.com\0" -"wildlife.museum\0" -"orx.biz\0" -"rnu.tn\0" -"hakui.ishikawa.jp\0" -"mashike.hokkaido.jp\0" -"gal\0" -"shimotsuke.tochigi.jp\0" -"gap\0" -"heritage.museum\0x.se\0bostik\0" -"koebenhavn.museum\0" -"or.na\0valer.hedmark.no\0" -"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0co.com\0" -"gay\0" -"or.mu\0" -"frl\0official.academy\0" -"\xc3\xa5l.no\0" -"oshima.tokyo.jp\0" -"tonami.toyama.jp\0" -"is-a-liberal.com\0" -"gallup\0" -"stalbans.museum\0fin.ci\0" -"iwaizumi.iwate.jp\0kainan.wakayama.jp\0" -"witd.gov.pl\0njs.jelastic.vps-host.net\0" -"ogose.saitama.jp\0cambridge.museum\0" -"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0mc.ax\0" -"servebbs.net\0" -"la.us\0" -"kherson.ua\0" -"chijiwa.nagasaki.jp\0" -"direct.quickconnect.to\0" -"nagi.okayama.jp\0" -"hadsel.no\0" -"office\0" -"gdn\0" -"fin.ec\0mishima.fukushima.jp\0nesseby.no\0framercanvas.com\0" -"gea\0" -"ftr\0xihuan\0" -"fujimi.nagano.jp\0" -"ss.it\0" -"fed.us\0" -"in-brb.de\0" +"benevento.it\0" +"judaica.museum\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0store\0xnbay.com\0" +"govt.nz\0" +"lib.pr.us\0" +"val-daosta.it\0" +"online.museum\0" +"that.win\0" +"leasing.aero\0tysvar.no\0cc.fl.us\0" +"sasebo.nagasaki.jp\0" +"australia.museum\0alibaba\0institute\0" +"web.co\0" +"trani-barletta-andria.it\0fukuroi.shizuoka.jp\0kurobe.toyama.jp\0total\0" "ringsaker.no\0" -"or.pw\0" -"fun\0" -"wallonie.museum\0" -"edgeapp.net\0" -"yabuki.fukushima.jp\0" -"bajddar.no\0" -"higashi.fukuoka.jp\0vestvagoy.no\0" -"art.museum\0" -"df.gov.br\0" -"florence.it\0miasa.nagano.jp\0" -"viking.museum\0cc.al.us\0" -"hinode.tokyo.jp\0" -"shikaoi.hokkaido.jp\0" -"hi.us\0" -"loginline.site\0serveminecraft.net\0" -"kakuda.miyagi.jp\0" -"quebec\0" -"webhop.biz\0cloudapp.net\0" -"hioki.kagoshima.jp\0is-an-engineer.com\0eu-4.evennode.com\0" -"wpmucdn.com\0" -"gallo\0" -"eng.pro\0" -"s\xc3\xb8r-fron.no\0" -"dyndns-remote.com\0" -"boston\0kosher\0" -"co.business\0" -"ina.nagano.jp\0eu-west-3.elasticbeanstalk.com\0" -"from-az.net\0" -"szczecin.pl\0leczna.pl\0" -"potager.org\0" -"ringerike.no\0or.th\0" -"barrel-of-knowledge.info\0" -"kaszuby.pl\0" -"\xed\x95\x9c\xea\xb5\xad\0map.fastly.net\0" -"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0chiyoda.gunma.jp\0misugi.mie.jp\0mcdir.ru\0" -"k12.ca.us\0" -"delaware.museum\0fyi\0" -"bsb.br\0or.ug\0es.ax\0" -"gemological.museum\0" -"ashiya.fukuoka.jp\0notogawa.shiga.jp\0or.tz\0" -"prudential\0" -"usgarden.museum\0yolasite.com\0" -"maizuru.kyoto.jp\0lib.vt.us\0" -"leasing.aero\0ayase.kanagawa.jp\0settlement.museum\0" -"or.us\0" -"fuchu.tokyo.jp\0cityeats\0" -"ar.it\0" -"shikatsu.aichi.jp\0" -"miyota.nagano.jp\0" -"fauske.no\0" -"mc.it\0alstahaug.no\0eu-3.evennode.com\0" -"matsudo.chiba.jp\0" -"oirase.aomori.jp\0furudono.fukushima.jp\0satosho.okayama.jp\0" -"kanagawa.jp\0" -"villas\0" -"yokoshibahikari.chiba.jp\0" -"gle\0" -"campinagrande.br\0london.museum\0" -"nord-aurdal.no\0vegarshei.no\0" -"bulsan-sudtirol.it\0" -"valle-d-aosta.it\0" -"nz.basketball\0" -"umaji.kochi.jp\0" -"matsusaka.mie.jp\0\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0" -"gulen.no\0" -"kanra.gunma.jp\0holtalen.no\0" -"selfip.net\0is.eu.org\0" -"naturhistorisches.museum\0" -"inami.wakayama.jp\0kvinesdal.no\0gmo\0is-an-actor.com\0" -"saitama.jp\0l\xc3\xa6rdal.no\0" -"q-a.eu.org\0" -"sa.gov.au\0" -"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0uwu.ai\0trycloudflare.com\0" -"m\xc3\xa5lselv.no\0wphostedmail.com\0" -"gmx\0" -"ashikaga.tochigi.jp\0" -"hara.nagano.jp\0kusu.oita.jp\0" -"kumakogen.ehime.jp\0kakogawa.hyogo.jp\0" -"v\xc3\xa1rgg\xc3\xa1t.no\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0" -"to.leg.br\0" -"warszawa.pl\0" -"hatsukaichi.hiroshima.jp\0" -"elburg.museum\0" -"\xe6\x97\xb6\xe5\xb0\x9a\0" -"yanaizu.fukushima.jp\0" -"eu-2.evennode.com\0" -"conf.au\0it.eu.org\0ddnslive.com\0" -"inzai.chiba.jp\0shika.ishikawa.jp\0" -"chintai\0herokussl.com\0" -"karate.museum\0" -"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0" -"it.ao\0goo\0hepforge.org\0" -"crew.aero\0gop\0*.owo.codes\0" -"localhost.daplie.me\0" -"\xe7\xae\x87\xe4\xba\xba.hk\0scholarships\0" -"got\0" -"otoineppu.hokkaido.jp\0" -"gov\0rauma.no\0apartments\0vladimir.su\0" -"bokn.no\0" -"palmas.br\0novara.it\0ghost.io\0serveftp.com\0" -"rr.gov.br\0" -"engine.aero\0games\0" +"nirasaki.yamanashi.jp\0cat.ax\0" +"marugame.kagawa.jp\0" +"rockart.museum\0" +"api.gov.uk\0" +"kinko.kagoshima.jp\0" +"web.do\0" +"uy.com\0" +"blogspot.com.es\0" +"yamada.iwate.jp\0ueda.nagano.jp\0" +"myshopify.com\0" +"donna.no\0" +"\xd1\x80\xd1\x84\0gmbh\0" +"station.museum\0" +"cloudns.club\0" +"mozilla-iot.org\0" +"is-very-sweet.org\0" +"fl\xc3\xa5.no\0beats\0" +"friuliv-giulia.it\0minowa.nagano.jp\0" +"insure\0" +"br\xc3\xb8nn\xc3\xb8ysund.no\0" +"tottori.tottori.jp\0" +"osoyro.no\0" +"yaese.okinawa.jp\0uk.oxa.cloud\0" +"uri.arpa\0tube\0" +"jeonbuk.kr\0" +"yamato.kanagawa.jp\0" +"bytom.pl\0" +"parliament.nz\0samsclub\0" +"engineer.aero\0hoyanger.no\0sandoy.no\0" +"yanagawa.fukuoka.jp\0\xe3\x82\xb3\xe3\x83\xa0\0" +"ca-central-1.elasticbeanstalk.com\0mediatech.by\0" +"cq.cn\0" +"nico\0" +"k12.ia.us\0sekd1.beebyteapp.io\0" +"*.sapporo.jp\0aki.kochi.jp\0mimata.miyazaki.jp\0" +"kitchen\0" +"novara.it\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0" +"web.gu\0" +"artdeco.museum\0" +"crotone.it\0rikubetsu.hokkaido.jp\0hirado.nagasaki.jp\0upow.gov.pl\0" +"muenster.museum\0" +"saltdal.no\0" +"tsukigata.hokkaido.jp\0kazimierz-dolny.pl\0" +"web.id\0" +"fan\0" +"trana.no\0" +"*.beget.app\0loginline.app\0" +"francaise.museum\0is-into-games.com\0" +"ad.jp\0susaki.kochi.jp\0kimino.wakayama.jp\0kinghost.net\0" +"googleapis.com\0" +"web.in\0" +"ogano.saitama.jp\0" +"plus\0" +"toyohashi.aichi.jp\0kurotaki.nara.jp\0nakamichi.yamanashi.jp\0eu.ax\0" +"taipei\0" +"r\xc3\xb8st.no\0" +"safe\0" +"wien\0" +"rj.gov.br\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0" +"av.it\0" +"omaha.museum\0" +"tokke.no\0tec.mi.us\0" +"avocat.pro\0juegos\0lego\0with.marketing\0" +"esq\0playstation-cloud.com\0" +"biei.hokkaido.jp\0" +"vipsinaapp.com\0" +"scientist.aero\0vestvagoy.no\0" +"bo.it\0buyshouses.net\0" +"pythonanywhere.com\0" +"barueri.br\0" +"services.aero\0" +"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0iitate.fukushima.jp\0gg.ax\0" +"hoteles\0is-a-soxfan.org\0" +"shimoji.okinawa.jp\0" +"richardli\0" +"web.lk\0nexus\0" +"kwp.gov.pl\0wuoz.gov.pl\0" +"giessen.museum\0outsystemscloud.com\0" +"ch.it\0chikuma.nagano.jp\0iki.nagasaki.jp\0" +"likescandy.com\0" +"walbrzych.pl\0blogspot.com.mt\0" +"blogspot.com.ng\0" +"eus\0" +"nuoro.it\0hirakata.osaka.jp\0" +"alessandria.it\0miyoshi.hiroshima.jp\0kishiwada.osaka.jp\0" "s3-ca-central-1.amazonaws.com\0" -"duck\0" -"trentino-stirol.it\0bryansk.su\0" -"fc.it\0suita.osaka.jp\0arakawa.saitama.jp\0gop.pk\0cafe\0myeffect.net\0" -"forgeblocks.com\0" -"midtre-gauldal.no\0crd.co\0" -"pt.it\0" -"kumejima.okinawa.jp\0kahoku.yamagata.jp\0" -"eastcoast.museum\0drayddns.com\0" -"kpmg\0" -"ind.br\0dyndns-work.com\0" -"kawai.iwate.jp\0" -"hzc.io\0" -"verbania.it\0dst.mi.us\0" -"chikuma.nagano.jp\0homelink.one\0" -"rs.gov.br\0sc.gov.br\0hbo\0" -"k12.ct.us\0" -"assn.lk\0jewish.museum\0vladimir.ru\0" -"es.kr\0netbank\0eu-1.evennode.com\0" -"kure.hiroshima.jp\0jolster.no\0siellak.no\0in.eu.org\0" -"tsuyama.okayama.jp\0komvux.se\0" -"asahi.toyama.jp\0" -"czeladz.pl\0" -"sirdal.no\0" -"cc.in.us\0" -"jerusalem.museum\0" -"diskstation.me\0" -"za.com\0rdv.to\0" -"fin.tn\0" -"c66.me\0" -"synology.me\0" -"toyotomi.hokkaido.jp\0griw.gov.pl\0" -"diskstation.eu\0" -"ebetsu.hokkaido.jp\0midatlantic.museum\0" -"saroma.hokkaido.jp\0kerrylogistics\0" -"hoylandet.no\0ostroda.pl\0" -"yamakita.kanagawa.jp\0" -"group.aero\0" -"k12.al.us\0" -"is-a-llama.com\0" -"beskidy.pl\0" -"lib.id.us\0" -"town\0" -"imdb\0" -"ar.us\0paas.massivegrid.com\0" -"otsuki.kochi.jp\0oyer.no\0" -"hakodate.hokkaido.jp\0" -"sobetsu.hokkaido.jp\0gift\0" -"trentinos-tirol.it\0saka.hiroshima.jp\0" -"*.nom.br\0ind.gt\0ishikawa.jp\0" -"mihama.wakayama.jp\0" -"museet.museum\0" -"call\0corsica\0" -"tananger.no\0stord.no\0parliament.nz\0" -"ascoli-piceno.it\0bitbridge.net\0" -"nflfan.org\0" -"afjord.no\0" -"masaki.ehime.jp\0" -"rn.gov.br\0toys\0" -"nagawa.nagano.jp\0" -"ind.in\0akagi.shimane.jp\0camp\0" -"fukudomi.saga.jp\0skierv\xc3\xa1.no\0" -"kl\xc3\xa6""bu.no\0" -"vinnica.ua\0lib.fl.us\0" -"minamiaiki.nagano.jp\0lubin.pl\0" -"nes.akershus.no\0" -"lazio.it\0shinjo.okayama.jp\0aaa.pro\0" -"vallee-aoste.it\0gangaviika.no\0" -"amusement.aero\0" -"s3-website-eu-west-1.amazonaws.com\0" -"hiv\0" -"cartoonart.museum\0" -"otaki.nagano.jp\0" -"cc.mo.us\0" -"ro.gov.br\0" -"kudoyama.wakayama.jp\0" -"d.bg\0" -"dnsupdater.de\0" -"r\xc3\xa1isa.no\0appspacehosted.com\0" -"koga.ibaraki.jp\0" -"\xe3\x82\xb3\xe3\x83\xa0\0" -"varese.it\0ind.kw\0bamble.no\0" -"uwu.nu\0" -"\xe5\x85\xb5\xe5\xba\xab.jp\0samsung\0" -"poivron.org\0" -"hkt\0" -"ena.gifu.jp\0" -"morioka.iwate.jp\0" -"friuli-ve-giulia.it\0" -"esp.br\0yonago.tottori.jp\0" -"sakaki.nagano.jp\0" -"kristiansund.no\0" -"vantaa.museum\0" -"\xc3\xa1k\xc5\x8boluokta.no\0" -"kagamino.okayama.jp\0" -"nanao.ishikawa.jp\0frosta.no\0" -"lib.me.us\0" -"omasvuotna.no\0" -"hasami.nagasaki.jp\0" -"ogimi.okinawa.jp\0" -"kongsvinger.no\0careers\0" -"care\0george\0s3-fips-us-gov-west-1.amazonaws.com\0" -"sciencecenter.museum\0" -"static-access.net\0" -"qa2.com\0" -"gallery\0" -"gokase.miyazaki.jp\0" -"pics\0" -"mysecuritycamera.com\0" -"shimamoto.osaka.jp\0" -"bananarepublic\0casa\0jele.io\0" -"bt.it\0cc.tx.us\0customer.enonic.io\0" -"cars\0rackmaze.net\0" -"case\0" -"bahcavuotna.no\0" -"cymru.museum\0cash\0filegear-au.me\0github.io\0" -"holt\xc3\xa5len.no\0" -"yamada.toyama.jp\0lviv.ua\0" -"primetel.cloud\0" -"dvag\0" -"services\0" -"luster.no\0" -"valleaosta.it\0naturbruksgymn.se\0" -"trentin-s\xc3\xbc""dtirol.it\0" -"tatar\0" -"ne.jp\0" -"kuwana.mie.jp\0" -"hoteles\0" -"varggat.no\0alpha-myqnapcloud.com\0" -"ne.ke\0valley.museum\0" -"air-surveillance.aero\0" -"higashiura.aichi.jp\0" -"bjark\xc3\xb8y.no\0" -"hot\0" -"trafficplex.cloud\0draydns.de\0" -"oharu.aichi.jp\0" -"how\0mytuleap.com\0" -"oceanographic.museum\0kmpsp.gov.pl\0immo\0conf.se\0" -"coupon\0" -"clinton.museum\0cruises\0" -"american.museum\0gmail\0" -"ne.kr\0" -"asakawa.fukushima.jp\0" -"harima.hyogo.jp\0artanddesign.museum\0kvafjord.no\0sand\xc3\xb8y.no\0" -"balsan-suedtirol.it\0philadelphia.museum\0" -"toyokawa.aichi.jp\0" -"osakasayama.osaka.jp\0my-firewall.org\0" -"sanjo.niigata.jp\0" -"forlicesena.it\0" -"naganohara.gunma.jp\0" -"rzgw.gov.pl\0" -"volda.no\0" -"hiphop\0ibm\0" -"\xe6\xbb\x8b\xe8\xb3\x80.jp\0gs.va.no\0volkswagen\0" -"realtor\0" -"ruovat.no\0" -"de.cool\0" -"iwaki.fukushima.jp\0" -"land\0" -"nishiaizu.fukushima.jp\0ice\0" -"yao.osaka.jp\0" -"bmd.br\0meland.no\0" -"perso.ht\0" -"lebork.pl\0" -"se.net\0ru.net\0" -"nesoddtangen.no\0" -"matsue.shimane.jp\0" -"lib.pr.us\0viajes\0" -"shiojiri.nagano.jp\0suwa.nagano.jp\0hapmir.no\0wlocl.pl\0" -"kutchan.hokkaido.jp\0" -"shibata.niigata.jp\0" -"ind.tn\0" -"icu\0" -"now-dns.top\0" -"spb.ru\0" -"niigata.jp\0yamagata.yamagata.jp\0cc.nh.us\0" -"arakawa.tokyo.jp\0" -"hachioji.tokyo.jp\0vpndns.net\0" -"nishihara.kumamoto.jp\0" -"lahppi.no\0filegear-ie.me\0" -"coffee\0" -"m.bg\0" -"ge.it\0*.nodebalancer.linode.com\0" -"monzabrianza.it\0" -"spb.su\0" -"inami.toyama.jp\0shirahama.wakayama.jp\0" -"fresenius\0" -"c.cdn77.org\0" -"donostia.museum\0" -"ne.pw\0" -"eti.br\0" -"*.stgstage.dev\0" -"from-in.com\0" -"oshino.yamanashi.jp\0fitjar.no\0" -"genting\0s3-eu-west-1.amazonaws.com\0" -"rmit\0" -"chanel\0" -"hanggliding.aero\0" -"badaddja.no\0" -"ozu.kumamoto.jp\0ifm\0" -"se.gov.br\0" -"desa.id\0lib.nj.us\0" -"ambulance.aero\0ogi.saga.jp\0" -"botany.museum\0" -"ulm.museum\0fl.us\0deals\0olayan\0onza.mythic-beasts.com\0" -"sar.it\0" -"fnwk.site\0" -"servegame.com\0" -"aosta.it\0f\xc3\xb8rde.no\0" -"\xe4\xb8\xad\xe4\xbf\xa1\0" -"kwp.gov.pl\0servebbs.org\0blogsite.xyz\0" -"5.bg\0dvrdns.org\0" -"cc.va.us\0" -"komoro.nagano.jp\0" -"biev\xc3\xa1t.no\0ping\0" -"noticias.bo\0wada.nagano.jp\0j.layershift.co.uk\0" -"isehara.kanagawa.jp\0assassination.museum\0assisi.museum\0" -"publ.pt\0pink\0" -"cesena-forl\xc3\xac.it\0mantova.it\0" -"togakushi.nagano.jp\0family.museum\0" -"kadoma.osaka.jp\0" -"krym.ua\0" -"yawatahama.ehime.jp\0gyokuto.kumamoto.jp\0*.azurecontainer.io\0" -"info\0" -"uki.kumamoto.jp\0" -"bas.it\0minamisanriku.miyagi.jp\0" -"\xe4\xb8\x96\xe7\x95\x8c\0" -"og.ao\0brumunddal.no\0ne.ug\0" -"kred\0" -"ne.tz\0" -"nakagyo.kyoto.jp\0" -"toho.fukuoka.jp\0conf.lv\0" -"obanazawa.yamagata.jp\0" -"kamikoani.akita.jp\0plaza.museum\0lowicz.pl\0ne.us\0" -"baltimore.museum\0" -"servepics.com\0" -"shichinohe.aomori.jp\0dyndns-blog.com\0" -"cc.ri.us\0" -"amakusa.kumamoto.jp\0weir\0" -"national.museum\0" -"takanezawa.tochigi.jp\0" -"hino.tottori.jp\0cherkasy.ua\0wnext.app\0" -"chita.aichi.jp\0" -"minamimaki.nagano.jp\0" -"gjesdal.no\0" -"nagasaki.nagasaki.jp\0ibara.okayama.jp\0" -"saikai.nagasaki.jp\0" -"khmelnitskiy.ua\0firestone\0" -"d.se\0" -"platterp.us\0" -"ba.gov.br\0" -"hikone.shiga.jp\0sa.gov.pl\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" -"tas.gov.au\0nagiso.nagano.jp\0" -"fujisawa.kanagawa.jp\0reserve-online.com\0" -"flowers\0" -"ask\xc3\xb8y.no\0" -"napoli.it\0" -"yoshimi.saitama.jp\0broadcast.museum\0feedback\0" -"yamagata.nagano.jp\0cloudsite.builders\0" -"cbre\0" -"s3-us-east-2.amazonaws.com\0" -"tomioka.gunma.jp\0" -"sciencehistory.museum\0" -"mihara.hiroshima.jp\0is-leet.com\0" -"inc\0" -"wajiki.tokushima.jp\0" -"dev.static.land\0" -"space\0" -"niteroi.br\0setouchi.okayama.jp\0cooking\0ing\0" -"ngrok.io\0" -"ink\0" -"v.bg\0" -"arendal.no\0" -"ro.im\0mein-iserv.de\0tcp4.me\0" -"nissedal.no\0" -"nogata.fukuoka.jp\0takehara.hiroshima.jp\0" -"kafjord.no\0" -"int\0" -"ro.it\0e12.ve\0from-wa.com\0" -"pt.eu.org\0" -"control.aero\0discovery.museum\0ssl.origin.cdn77-secure.org\0" -"news\0" -"klepp.no\0" -"gosen.niigata.jp\0" -"freetls.fastly.net\0" -"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" -"ybo.review\0" -"ap-southeast-2.elasticbeanstalk.com\0" -"it1.eur.aruba.jenv-aruba.cloud\0" -"\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0" -"kiryu.gunma.jp\0" -"next\0hk.org\0" -"ohkura.yamagata.jp\0lib.ms.us\0lib.nc.us\0" -"nirasaki.yamanashi.jp\0hareid.no\0l-o-g-i-n.de\0" -"eu.platform.sh\0" -"vision\0" -"frana.no\0" -"daito.osaka.jp\0selfip.org\0forumz.info\0" -"ryokami.saitama.jp\0" -"gildeskal.no\0paroch.k12.ma.us\0" -"schwarz\0" -"dscloud.me\0" -"myftp.biz\0" -"toda.saitama.jp\0ichiba.tokushima.jp\0pfizer\0" -"drud.io\0" -"modena.it\0og.it\0aogaki.hyogo.jp\0" -"chungbuk.kr\0" -"sh.cn\0" -"charter.aero\0" -"fastly-terrarium.com\0" -"\xe6\xa0\x83\xe6\x9c\xa8.jp\0" -"higashimurayama.tokyo.jp\0" -"jcb\0" -"sigdal.no\0" -"r\xc3\xa6lingen.no\0localzone.xyz\0" -"emergency.aero\0" -"krodsherad.no\0" -"sondre-land.no\0wegrow.pl\0" -"nakayama.yamagata.jp\0" -"sanofi\0" -"dynns.com\0" +"\xe7\xbd\x91\xe7\xab\x99\0" +"web.nf\0" +"gs.ol.no\0bremanger.no\0nordkapp.no\0lib.wa.us\0" +"fujieda.shizuoka.jp\0" +"web.ni\0" +"medecin.fr\0" +"campidano-medio.it\0hikawa.shimane.jp\0" +"writesthisblog.com\0" +"taxi.br\0theater\0" +"k12.nj.us\0" +"cz.it\0" +"nike\0" +"freeboxos.fr\0" +"ino.kochi.jp\0" +"5.bg\0no.eu.org\0" +"matsubushi.saitama.jp\0" +"hi.cn\0" "uchinada.ishikawa.jp\0" -"ist\0" -"tamatsukuri.ibaraki.jp\0" -"am.gov.br\0" -"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" -"scrapper-site.net\0" -"time.no\0" -"fuchu.hiroshima.jp\0\xc3\xa5lg\xc3\xa5rd.no\0family\0here-for-more.info\0" -"kouzushima.tokyo.jp\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" -"aerodrome.aero\0" -"higashichichibu.saitama.jp\0" -"parliament.cy\0zama.kanagawa.jp\0rj.leg.br\0" -"saijo.ehime.jp\0lcube-server.de\0" -"gs.aa.no\0" -"itv\0" -"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0" -"yoshikawa.saitama.jp\0natuurwetenschappen.museum\0nebraska.museum\0" -"m.se\0" -"aeroport.fr\0iijima.nagano.jp\0jcloud-ver-jpc.ik-server.com\0*.cloud.metacentrum.cz\0" -"incheon.kr\0tokyo\0\xe5\xae\xb6\xe9\x9b\xbb\0" -"marylhurst.museum\0perso.sn\0" -"katowice.pl\0" -"\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0" -"higashikagawa.kagawa.jp\0is-a-bookkeeper.com\0" -"nohost.me\0" -"hatogaya.saitama.jp\0linz.museum\0" -"jan-mayen.no\0" -"tsugaru.aomori.jp\0" -"vall\xc3\xa9""e-aoste.it\0" -"from-tx.com\0" -"perso.tn\0" -"fst.br\0" -"odo.br\0" -"sicilia.it\0ariake.saga.jp\0\xe8\x87\xba\xe7\x81\xa3\0" -"csx.cc\0" -"fujioka.gunma.jp\0telekommunikation.museum\0" -"grandrapids.museum\0" -"konin.pl\0" -"kamikitayama.nara.jp\0" -"taketomi.okinawa.jp\0" -"shichikashuku.miyagi.jp\0" -"capebreton.museum\0" -"securitytactics.com\0" -"satte.saitama.jp\0jdevcloud.com\0" -"dscloud.biz\0" -"cranbrook.museum\0balestrand.no\0snasa.no\0" -"omachi.saga.jp\0jio\0" -"tbits.me\0" -"loten.no\0fedorapeople.org\0" -"tran\xc3\xb8y.no\0church\0" -"aquila.it\0" -"ap.gov.br\0lib.oh.us\0" -"plants.museum\0" -"showa.fukushima.jp\0shintomi.miyazaki.jp\0df.leg.br\0" -"wiki.bo\0arts.co\0wakasa.tottori.jp\0" -"ookuwa.nagano.jp\0" -"wiki.br\0" -"leitungsen.de\0" -"azumino.nagano.jp\0suwalki.pl\0" -"curitiba.br\0" -"georgia.museum\0" -"zoological.museum\0" -"cieszyn.pl\0mycd.eu\0" -"hita.oita.jp\0" -"fujishiro.ibaraki.jp\0minami.kyoto.jp\0" -"medizinhistorisches.museum\0" -"iiyama.nagano.jp\0" -"ap.gov.pl\0" -"lab.ms\0" -"ikeda.hokkaido.jp\0cv.ua\0" -"matsuura.nagasaki.jp\0jll\0" -"aostavalley.it\0norddal.no\0" -"emr.it\0nationalheritage.museum\0" -"kita.osaka.jp\0*.cns.joyent.com\0" -"m\xc3\xa1latvuopmi.no\0" -"omiya.saitama.jp\0" -"oksnes.no\0" -"nishikatsura.yamanashi.jp\0" -"jmp\0" -"fuel.aero\0" -"lib.va.us\0" -"xen.prgmr.com\0" -"community\0" -"jnj\0drud.us\0" -"ag.it\0" -"yokaichiba.chiba.jp\0" -"genova.it\0" -"katano.osaka.jp\0drive\0" -"rns.tn\0" -"jc.neen.it\0" -"localhistory.museum\0" -"asn.au\0hisayama.fukuoka.jp\0" -"internet-dns.de\0north-kazakhstan.su\0" -"shirataka.yamagata.jp\0" -"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0yuzawa.niigata.jp\0" -"toba.mie.jp\0hirogawa.wakayama.jp\0" -"dinosaur.museum\0" -"british.museum\0jot\0" -"neko.am\0" -"s3.eu-central-1.amazonaws.com\0*.dapps.earth\0" -"otsuki.yamanashi.jp\0berlin.museum\0pomorskie.pl\0" -"joy\0" -"miyako.fukuoka.jp\0ninomiya.kanagawa.jp\0lebesby.no\0" -"dyr\xc3\xb8y.no\0" -"sakae.nagano.jp\0touch.museum\0lublin.pl\0" -"nagato.yamaguchi.jp\0" -"firewall-gateway.de\0" -"tonosho.kagawa.jp\0grue.no\0" -"firewall-gateway.com\0" -"nanbu.yamanashi.jp\0hdfcbank\0" -"v.ua\0" -"kiyosato.hokkaido.jp\0" -"tuscany.it\0mugi.tokushima.jp\0tromsa.no\0" -"nanporo.hokkaido.jp\0showa.yamanashi.jp\0" -"shimoichi.nara.jp\0okinawa.okinawa.jp\0school.na\0" -"lel.br\0" +"taifun-dns.de\0" +"j.scaleforce.com.cy\0" +"blogspot.com.tr\0" +"barsy.info\0" +"yamaguchi.jp\0zgorzelec.pl\0" +"wiki\0" +"maintenance.aero\0vegarshei.no\0" +"minoh.osaka.jp\0" +"koebenhavn.museum\0sale\0" +"it.ao\0web.pk\0mlbfan.org\0" +"yahiko.niigata.jp\0" +"indianmarket.museum\0from-nm.com\0" +"auction\0" +"badaddja.no\0tonsberg.no\0" +"veneto.it\0" +"baseball.museum\0ap-south-1.elasticbeanstalk.com\0" +"*.nom.br\0" +"vestre-toten.no\0" +"zama.kanagawa.jp\0" +"cc.nj.us\0" +"komono.mie.jp\0fit\0" +"ski.museum\0barsy.me\0" +"cloud-fr1.unispace.io\0" +"fe.it\0" +"moareke.no\0vaga.no\0" +"yamanashi.jp\0" +"is-with-theband.com\0" +"miami\0" +"df.gov.br\0" +"fuoisku.no\0" +"doshi.yamanashi.jp\0" +"automotive.museum\0" +"nogata.fukuoka.jp\0mail.pl\0schmidt\0" +"state.museum\0wine\0" +"juedisches.museum\0" +"hitra.no\0" +"nishio.aichi.jp\0" +"hitachi\0" +"med.pro\0" +"daisen.akita.jp\0barclaycard\0" +"vercel.app\0" +"mock.pstmn.io\0" +"sanda.hyogo.jp\0higashimatsushima.miyagi.jp\0" +"family\0" +"b.bg\0ullensaker.no\0tele.amune.org\0" +"\xe7\xbd\x91\xe5\x9d\x80\0" +"flanders.museum\0from-sc.com\0" +"web.tj\0" +"\xc3\xb8ystre-slidre.no\0" +"celtic.museum\0pubol.museum\0" +"fly\0" +"b.br\0web.tr\0" +"kv\xc3\xa6""fjord.no\0" +"tamamura.gunma.jp\0aarp\0" +"mortgage\0" +"cern\0" +"k.bg\0nz.eu.org\0" +"blogspot.com.uy\0" +"shiftedit.io\0" "linkyard.cloud\0" -"imabari.ehime.jp\0fhs.no\0" -"minamiawaji.hyogo.jp\0" -"commune.am\0" -"hashima.gifu.jp\0toyako.hokkaido.jp\0uscountryestate.museum\0tourism.tn\0" -"mochizuki.nagano.jp\0" -"ta.it\0trade\0" -"sugito.saitama.jp\0" +"caracal.mythic-beasts.com\0" +"av.tr\0" +"tattoo\0" +"s3-website.us-east-2.amazonaws.com\0" +"jessheim.no\0" +"schoenbrunn.museum\0web.ve\0" +"t.bg\0gs.st.no\0" +"hida.gifu.jp\0kuokgroup\0bloger.id\0" +"notteroy.no\0ch.tc\0" +"polkowice.pl\0sarl\0" +"namdalseid.no\0" +"saikai.nagasaki.jp\0" +"gs.tm.no\0foo\0barsy.ro\0" +"hiratsuka.kanagawa.jp\0lowicz.pl\0*.in.futurecms.at\0" +"ac.leg.br\0instantcloud.cn\0" +"m\xc3\xa5s\xc3\xb8y.no\0" +"kyowa.akita.jp\0fujioka.gunma.jp\0nakayama.yamagata.jp\0" +"moscow.museum\0" +"ullensvang.no\0" +"ina.ibaraki.jp\0fox\0" +"sa.gov.au\0from-wa.com\0" +"\xe7\xbd\x91\xe7\xb5\xa1.hk\0" +"isesaki.gunma.jp\0" +"cc.ri.us\0" +"tsuyama.okayama.jp\0" +"mitsubishi\0ddnsfree.com\0yali.mythic-beasts.com\0" +"gliding.aero\0" +"\xe6\x9d\xb1\xe4\xba\xac.jp\0ashiya.hyogo.jp\0" +"al.eu.org\0" +"gal\0edgeapp.net\0" +"java\0" +"yahoo\0" +"tatsuno.nagano.jp\0gap\0" +"chintai\0postman-echo.com\0" +"okinawa.jp\0a.ssl.fastly.net\0" +"nl.ca\0srht.site\0" +"groks-this.info\0" +"matsumoto.kagoshima.jp\0kawakami.nara.jp\0yandex\0" +"web.za\0gay\0" +"barsy.uk\0" +"frl\0" +"nl.ci\0" +"emb.kw\0" +"mantova.it\0kitahata.saga.jp\0earth\0" +"save\0" +"nu.ca\0nrw.museum\0" +"rr.gov.br\0" +"mihama.chiba.jp\0" "stadt.museum\0" -"iwama.ibaraki.jp\0" -"gs.st.no\0is-a-anarchist.com\0" -"school.nz\0" -"nordre-land.no\0\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0appspaceusercontent.com\0a.ssl.fastly.net\0" -"chungnam.kr\0" -"aremark.no\0" -"takarazuka.hyogo.jp\0gdynia.pl\0" -"takahata.yamagata.jp\0voss.no\0" -"mo-siemens.io\0" -"kamisu.ibaraki.jp\0theater.museum\0" -"dyn.cosidns.de\0" -"sopot.pl\0" -"xfinity\0from-pr.com\0" -"trentino-aadige.it\0" -"sula.no\0" -"nextdirect\0cloud66.zone\0" -"arts.ve\0rr.leg.br\0" -"trana.no\0uy.com\0" -"tmp.br\0hakata.fukuoka.jp\0" -"psc.br\0" -"pi.it\0" -"matsuda.kanagawa.jp\0" -"tj.cn\0oslo.no\0" -"fra1-de.cloudjiffy.net\0" -"venice.it\0" -"kfh\0" -"latrobe\0" -"lima-city.de\0" -"sorocaba.br\0balashov.su\0" -"anthropology.museum\0impertrixcdn.com\0rs.leg.br\0sc.leg.br\0" -"windows\0" -"aprendemas.cl\0" -"lib.ky.us\0is-into-cars.com\0" -"vestby.no\0pymnt.uk\0" -"fuji.shizuoka.jp\0" -"naples.it\0" -"kamikawa.hyogo.jp\0" -"vibovalentia.it\0" -"oy.lc\0" -"kagami.kochi.jp\0kuroiso.tochigi.jp\0" -"rankoshi.hokkaido.jp\0yuasa.wakayama.jp\0" -"algard.no\0dielddanuorri.no\0" -"communication.museum\0" -"oldnavy\0" -"ap.it\0*.sapporo.jp\0" -"podhale.pl\0miami\0" -"otago.museum\0" -"kaita.hiroshima.jp\0lima-city.at\0" -"bradesco\0" -"gifu.gifu.jp\0" -"toscana.it\0omaha.museum\0" -"vikna.no\0" -"garden.museum\0geelvinck.museum\0nittedal.no\0" -"kitanakagusuku.okinawa.jp\0kia\0" -"evenes.no\0" -"s3.dualstack.ap-northeast-2.amazonaws.com\0" -"oceanographique.museum\0" -"arts.ro\0" -"randaberg.no\0kim\0" -"ac\0" -"ad\0tenri.nara.jp\0lima-city.ch\0" -"ae\0bryne.no\0" -"af\0" -"ag\0\xc3\xa5s.no\0" +"j.layershift.co.uk\0" +"marumori.miyagi.jp\0ostroleka.pl\0lubartow.pl\0" +"saintlouis.museum\0" +"elblag.pl\0" +"on.ca\0" +"iyo.ehime.jp\0bungoono.oita.jp\0" +"barsy.co.uk\0" +"oamishirasato.chiba.jp\0" +"money\0" +"gdn\0" +"\xc3\xb8rsta.no\0" +"casacam.net\0" +"gea\0jdevcloud.com\0" +"ftr\0jcloud.kz\0" +"sogne.no\0shopping\0volvo\0" +"laspezia.it\0akabira.hokkaido.jp\0goto.nagasaki.jp\0" +"stream\0" +"rs.gov.br\0sc.gov.br\0" +"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0" +"saxo\0" +"pp.az\0fun\0" +"kragero.no\0" +"cosenza.it\0hokuryu.hokkaido.jp\0" +"globo\0" +"karelia.su\0" +"radoy.no\0" +"zarow.pl\0" +"naturalhistorymuseum.museum\0" +"buzz\0" +"kani.gifu.jp\0nishiizu.shizuoka.jp\0" +"war.museum\0able\0" +"mincom.tn\0" +"\xc3\xa5mot.no\0kongsberg.no\0" +"trentinsud-tirol.it\0ukiha.fukuoka.jp\0dnsking.ch\0" +"githubusercontent.com\0" +"shimabara.nagasaki.jp\0goldpoint\0" +"jamison.museum\0from-de.com\0" +"odo.br\0" +"opencraft.hosting\0" +"naoshima.kagawa.jp\0" +"imari.saga.jp\0de.cool\0" +"society.museum\0" +"embroidery.museum\0*.dev.adobeaemcloud.com\0" +"salud.bo\0k12.wi.us\0" +"ms.it\0wnext.app\0" +"nesoddtangen.no\0" +"shirakawa.gifu.jp\0" +"holt\xc3\xa5len.no\0" +"konyvelo.hu\0oregontrail.museum\0kharkiv.ua\0adygeya.su\0" +"cc.wa.us\0" +"valle-daosta.it\0hachirogata.akita.jp\0tomisato.chiba.jp\0rifu.miyagi.jp\0schokokeks.net\0" +"reise\0" +"fukaya.saitama.jp\0yonezawa.yamagata.jp\0" +"fyi\0" +"vagan.no\0" +"mielno.pl\0" +"botanicalgarden.museum\0" +"\xe5\xa4\xa7\xe9\x98\xaa.jp\0" +"saves-the-whales.com\0" +"mayfirst.info\0" +"tsumagoi.gunma.jp\0" +"mangyshlak.su\0" +"cri.br\0ms.kr\0" +"hi.us\0co.network\0" +"cremona.it\0nu.it\0" +"city.hu\0" +"varese.it\0" +"toride.ibaraki.jp\0" +"sd.cn\0" +"kommune.no\0" +"yurihonjo.akita.jp\0mitsuke.niigata.jp\0hasuda.saitama.jp\0noho.st\0" +"rn.gov.br\0" +"musashino.tokyo.jp\0" +"theatre\0" +"notogawa.shiga.jp\0" +"endofinternet.org\0" +"cdn.prod.atlassian-dev.net\0" +"ap-southeast-1.elasticbeanstalk.com\0adygeya.ru\0" +"jan-mayen.no\0vossevangen.no\0" +"mobara.chiba.jp\0kartuzy.pl\0" +"cranbrook.museum\0rivne.ua\0cruise\0gle\0" +"pg.it\0ora.gunma.jp\0grajewo.pl\0" +"rackmaze.com\0" +"meiwa.gunma.jp\0misaki.okayama.jp\0international\0" +"historicalsociety.museum\0" +"computer\0" +"shiroi.chiba.jp\0kiso.nagano.jp\0" +"ro.gov.br\0" +"dynns.com\0" +"troandin.no\0" +"macerata.it\0" +"qld.edu.au\0b.se\0nohost.me\0" +"gwangju.kr\0" +"meldal.no\0gmo\0tours\0" +"\xe8\x81\x94\xe9\x80\x9a\0" +"nl.no\0" +"alto-adige.it\0trapani.it\0handa.aichi.jp\0" +"*.awdev.ca\0" +"gmx\0" +"audible\0nog.community\0" +"lib.ak.us\0" +"ogawa.nagano.jp\0aga.niigata.jp\0madrid\0" +"k.se\0reliance\0" +"khplay.nl\0" +"\xec\x82\xbc\xec\x84\xb1\0" +"lima-city.rocks\0" +"isshiki.aichi.jp\0expert\0lgbt\0pictet\0" +"def.br\0" +"sorfold.no\0barsy.bg\0" +"u.channelsdvr.net\0" +"yura.wakayama.jp\0" +"t.se\0demo.jelastic.com\0" +"goo\0" +"gop\0sandvikcoromant\0now.sh\0" +"firestone\0barsy.ca\0dreamhosters.com\0spdns.eu\0" +"cloudns.pro\0boldlygoingnowhere.org\0" +"got\0" +"gov\0" +"finn\xc3\xb8y.no\0spydeberg.no\0rentals\0" +"nishigo.fukushima.jp\0\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0" +"001www.com\0" +"iserv.dev\0" +"col.ng\0" +"pub.sa\0" +"honjyo.akita.jp\0chitose.hokkaido.jp\0fuchu.toyama.jp\0" +"ru.com\0" +"barsy.de\0" +"tomi.nagano.jp\0kunigami.okinawa.jp\0" +"okinawa\0is-a-landscaper.com\0" +"iglesias-carbonia.it\0tokyo.jp\0\xe6\x84\x9b\xe7\x9f\xa5.jp\0iwakura.aichi.jp\0komatsushima.tokushima.jp\0" +"mt.eu.org\0" +"andria-barletta-trani.it\0suita.osaka.jp\0nyuzen.toyama.jp\0" +"al.leg.br\0" +"oslo.no\0g.vbrplsbx.io\0" +"michigan.museum\0" +"haugesund.no\0ma.us\0" +"otaki.chiba.jp\0to.gt\0" +"rocher\0" +"kashiwa.chiba.jp\0" +"fjell.no\0giehtavuoatna.no\0hbo\0" +"\xd0\xba\xd0\xbe\xd0\xbc\0flap.id\0" +"srv.br\0" +"servegame.org\0" +"naka.hiroshima.jp\0niyodogawa.kochi.jp\0fujikawa.yamanashi.jp\0" +"sport.hu\0barsy.eu\0" +"nc.tr\0" +"audio\0" +"sv.it\0szczytno.pl\0" +"westfalen.museum\0hlx.live\0" +"evje-og-hornnes.no\0stokke.no\0" +"minamioguni.kumamoto.jp\0" +"civilisation.museum\0" +"h\xc3\xa1pmir.no\0vadso.no\0ms.us\0nc.us\0" +"to.it\0otama.fukushima.jp\0kamiizumi.saitama.jp\0" +"yoga\0no.com\0" +"lib.de.us\0" +"synology-diskstation.de\0" +"ragusa.it\0" +"nakagusuku.okinawa.jp\0pohl\0" +"togliatti.su\0" +"vic.au\0" +"sande.more-og-romsdal.no\0divtasvuodna.no\0" +"haboro.hokkaido.jp\0hachioji.tokyo.jp\0" +"kunneppu.hokkaido.jp\0" +"spdns.de\0" +"mytis.ru\0fastvps.site\0" +"va.it\0" +"pp.se\0pp.ru\0" +"brindisi.it\0sakae.nagano.jp\0" +"cri.nz\0barsy.in\0" +"barsy.io\0" +"kitashiobara.fukushima.jp\0kure.hiroshima.jp\0" +"in-brb.de\0" +"brother\0" +"myfirewall.org\0" +"panama.museum\0" +"to.md\0" +"chernihiv.ua\0is-slick.com\0" +"gold\0bar2.net\0" +"golf\0bss.design\0" +"journalist.aero\0" +"volkenkunde.museum\0istmein.de\0" +"cloud.fedoraproject.org\0" +"iwaki.fukushima.jp\0sunagawa.hokkaido.jp\0omachi.saga.jp\0shimotsuke.tochigi.jp\0wzmiuw.gov.pl\0" +"s3-fips-us-gov-west-1.amazonaws.com\0pp.ua\0" +"vs.it\0" +"motobu.okinawa.jp\0" +"christiansburg.museum\0" +"sakura.chiba.jp\0higashi.okinawa.jp\0" +"nokia\0" +"*.lcl.dev\0" +"friuliveneziagiulia.it\0trentinoa-adige.it\0*.bzz.dapps.earth\0" +"british.museum\0nalchik.ru\0" +"se.gov.br\0" +"vuelos\0webhop.info\0" +"averoy.no\0" +"motegi.tochigi.jp\0" +"shopware.store\0" +"redstone\0" +"for-the.biz\0" +"author.aero\0" +"now-dns.net\0" +"nalchik.su\0" +"hiv\0" +"cleverapps.io\0" +"sanuki.kagawa.jp\0kamikitayama.nara.jp\0" +"dattolocal.com\0" +"isa-geek.org\0" +"sdn.gov.pl\0" +"qsl.br\0" +"etne.no\0goog\0" +"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0rebun.hokkaido.jp\0tamatsukuri.ibaraki.jp\0tono.iwate.jp\0yasaka.nagano.jp\0hu.net\0" +"va.no\0" +"shiojiri.nagano.jp\0" +"rugby\0" +"syncloud.it\0" +"lelux.site\0" +"fot.br\0" +"hagebostad.no\0cloudns.info\0" +"adac\0frogans\0my.eu.org\0nyan.to\0" +"soeda.fukuoka.jp\0shintomi.miyazaki.jp\0rzgw.gov.pl\0" +"logoip.de\0" +"yamanashi.yamanashi.jp\0hkt\0" +"herokussl.com\0" +"on-web.fr\0" +"nagi.okayama.jp\0adobeaemcloud.net\0" +"chernivtsi.ua\0marine.ru\0" +"gb.net\0" +"skierv\xc3\xa1.no\0" +"kosuge.yamanashi.jp\0scot\0" +"pizza\0" +"bib.br\0" +"singles\0" +"chat\0market\0" +"sm.ua\0" +"sd.us\0" +"kusatsu.gunma.jp\0asago.hyogo.jp\0kawaguchi.saitama.jp\0dontexist.net\0" +"org.ac\0molde.no\0" +"prudential\0" +"org.ae\0" +"org.af\0" +"org.ag\0black\0" +"fukushima.jp\0" +"org.ai\0itau\0" +"org.al\0shimamoto.osaka.jp\0" +"org.am\0amsterdam.museum\0zhitomir.ua\0" +"ibaraki.jp\0oyamazaki.kyoto.jp\0" +"org.ba\0" +"org.ar\0org.bb\0users.scale.virtualcloud.com.br\0" +"overhalla.no\0" +"org.au\0americana.museum\0" +"rep.br\0" +"gallo\0" +"org.bh\0joso.ibaraki.jp\0sa.gov.pl\0" +"org.bi\0tienda\0" +"org.az\0" +"microlight.aero\0" +"kihoku.ehime.jp\0tsubetsu.hokkaido.jp\0" +"org.bm\0" +"org.bn\0ericsson\0porn\0" +"org.bo\0reg.dk\0" +"goshiki.hyogo.jp\0tsuchiura.ibaraki.jp\0bedzin.pl\0a.prod.fastly.net\0leczna.pl\0" +"americanart.museum\0" +"org.br\0" +"org.bs\0cloudns.org\0" +"org.bt\0" +"intl.tn\0" +"org.bw\0" +"hitachiota.ibaraki.jp\0hanamaki.iwate.jp\0machida.tokyo.jp\0uzs.gov.pl\0" +"org.ci\0s3.amazonaws.com\0" +"org.bz\0" +"hot\0" +"org.cn\0" +"org.co\0how\0" +"makinohara.shizuoka.jp\0" +"kobayashi.miyazaki.jp\0post\0" +"org.cu\0" +"org.cv\0" +"org.cw\0freeddns.us\0" +"obu.aichi.jp\0naklo.pl\0" +"org.cy\0" +"ba.gov.br\0" +"\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0" +"uppo.gov.pl\0sanok.pl\0microsoft\0" +"org.dm\0\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0athleta\0securitytactics.com\0" +"org.do\0tx.us\0" +"org.ec\0" +"org.ee\0judygarland.museum\0" +"vercel.dev\0" +"org.eg\0\xc4\x8d\xc3\xa1hcesuolo.no\0nl.eu.org\0" +"org.dz\0" +"uz.ua\0" +"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0" +"va.us\0" +"idf.il\0godo.gifu.jp\0pgafan.net\0" +"salvadordali.museum\0" +"org.es\0" +"org.et\0esan.hokkaido.jp\0""16-b.it\0" +"ibm\0firewall-gateway.de\0" +"krokstadelva.no\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" +"org.fj\0" +"parachuting.aero\0noticias.bo\0" +"org.fm\0ice\0" +"hobol.no\0" +"is-an-entertainer.com\0" +"rsvp\0" +"org.ge\0" +"org.gg\0cc.ar.us\0" +"org.gh\0kamaishi.iwate.jp\0" +"org.gi\0" +"qoto.io\0" +"org.gl\0" +"icu\0space-to-rent.com\0" +"org.gn\0" +"lyngen.no\0norddal.no\0" +"org.gp\0" +"org.gr\0" +"bindal.no\0lib.me.us\0" +"org.gt\0" +"org.gu\0luxembourg.museum\0memorial.museum\0" +"org.gy\0" +"org.hk\0" +"shiso.hyogo.jp\0togakushi.nagano.jp\0" +"org.hn\0" +"okoppe.hokkaido.jp\0" +"cyon.site\0" +"lib.nj.us\0sucks\0" +"org.ht\0padua.it\0mazowsze.pl\0" +"org.hu\0natura\0" +"rio.br\0" +"toyoura.hokkaido.jp\0oyama.tochigi.jp\0" +"org.il\0" +"org.im\0trustee.museum\0" +"org.in\0" +"samukawa.kanagawa.jp\0" +"org.iq\0" +"org.ir\0" +"org.is\0lib.ms.us\0lib.nc.us\0cust.prod.thingdust.io\0" +"org.je\0ifm\0" +"in.london\0" +"abkhazia.su\0" +"\xe7\xa7\x8b\xe7\x94\xb0.jp\0kasama.ibaraki.jp\0" +"org.jo\0vaksdal.no\0" +"trentinos\xc3\xbc""dtirol.it\0sells-it.net\0" +"lib.oh.us\0" +"takahama.aichi.jp\0yamashina.kyoto.jp\0rep.kp\0auto.pl\0" +"org.kg\0ng.eu.org\0" +"tsuiki.fukuoka.jp\0" +"org.ki\0s3.dualstack.eu-west-3.amazonaws.com\0isa-geek.com\0" +"univ.sn\0" +"games\0" +"org.km\0montreal.museum\0" +"belem.br\0org.kn\0" +"esashi.hokkaido.jp\0org.kp\0reserve-online.net\0" +"org.la\0filegear-de.me\0" +"org.lb\0" +"org.lc\0kautokeino.no\0porsangu.no\0" +"koge.tottori.jp\0" +"is-a-designer.com\0" +"org.kw\0zappos\0camdvr.org\0" +"higashiyodogawa.osaka.jp\0" +"org.ky\0denmark.museum\0" +"am.gov.br\0org.kz\0bel.tr\0immobilien\0" +"org.lk\0" +"chigasaki.kanagawa.jp\0sklep.pl\0" +"gen.mi.us\0" +"org.ma\0elvendrell.museum\0neko.am\0" +"org.lr\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0" +"homebuilt.aero\0org.ls\0latino\0" +"furudono.fukushima.jp\0" +"org.me\0mine.nu\0" +"org.lv\0" +"org.mg\0" +"sekikawa.niigata.jp\0" +"ab.ca\0org.ly\0s3.eu-central-1.amazonaws.com\0" +"org.mk\0rennebu.no\0trogstad.no\0\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0" +"org.ml\0" +"coastaldefence.museum\0minnesota.museum\0furniture\0" +"org.mn\0sp.leg.br\0" +"org.mo\0" +"takatori.nara.jp\0" +"org.na\0wpenginepowered.com\0" +"org.ms\0v\xc3\xa5g\xc3\xa5.no\0" +"uto.kumamoto.jp\0org.mt\0" +"org.mu\0" +"org.mv\0" +"express.aero\0org.mw\0org.ng\0balestrand.no\0" +"tempioolbia.it\0org.mx\0in.net\0cloudfunctions.net\0*.webpaas.ovh.net\0" +"org.my\0org.ni\0from-ca.com\0" +"org.mz\0" +"academy.museum\0plaza.museum\0" +"\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0" +"stjordalshalsen.no\0hosp.uk\0" +"co.technology\0" +"chambagri.fr\0org.nr\0" +"fuel.aero\0ris\xc3\xb8r.no\0" +"amber.museum\0" +"valled-aosta.it\0" +"brussel.museum\0s3-website-ap-southeast-1.amazonaws.com\0" +"org.nz\0" +"\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0" +"komagane.nagano.jp\0nagahama.shiga.jp\0barsy.support\0" +"org.om\0parti.se\0" +"gen.in\0" +"podhale.pl\0" +"org.pa\0" +"vestby.no\0" +"tarumizu.kagoshima.jp\0" +"org.pe\0" +"org.pf\0" +"\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0" +"org.ph\0gmail\0" +"bajddar.no\0org.pk\0" +"sarufutsu.hokkaido.jp\0wada.nagano.jp\0org.pl\0" +"co.ae\0" +"mus.br\0org.pn\0" +"software.aero\0co.ag\0" +"kids.museum\0village.museum\0org.qa\0" +"org.pr\0e4.cz\0" +"org.ps\0" +"fvg.it\0org.pt\0" +"co.am\0" +"repair.men\0" +"co.ao\0\xe7\xbb\x84\xe7\xbb\x87.hk\0" +"kouyama.kagoshima.jp\0shima.mie.jp\0murakami.niigata.jp\0download\0" +"org.py\0" +"co.bb\0" +"stor-elvdal.no\0k12.gu.us\0inc\0" +"co.at\0" +"ing\0" +"\xd0\xbc\xd0\xba\xd0\xb4\0" +"co.bi\0" +"ink\0" +"barcelona\0" +"co.bn\0" +"cc.gu.us\0" +"seat\0" +"co.ca\0is-a-anarchist.com\0" +"ap.gov.br\0" +"int\0" +"veterinaire.km\0" +"co.bw\0org.ro\0radio\0" +"tomari.hokkaido.jp\0suzuka.mie.jp\0" +"co.ci\0org.sa\0balena-devices.com\0barsy.site\0" +"org.sb\0" +"org.rs\0org.sc\0" +"co.cl\0tabuse.yamaguchi.jp\0org.sd\0" +"co.cm\0org.se\0org.ru\0" +"org.rw\0org.sg\0" +"org.sh\0" +"koeln.museum\0" +"co.cr\0\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0" +"independent-commission.uk\0" +"nichinan.miyazaki.jp\0koto.tokyo.jp\0olkusz.pl\0org.sl\0" +"foundation.museum\0bib.ve\0" +"org.sn\0" +"org.so\0" +"zoological.museum\0schule\0" +"co.cz\0" +"show.aero\0r\xc3\xa1hkker\xc3\xa1vju.no\0org.ss\0co.dk\0" +"ap.gov.pl\0org.st\0lidl\0" +"lotte\0georgia.su\0" +"org.sv\0" +"webhop.org\0gen.ng\0" +"org.sy\0statefarm\0" +"org.sz\0org.tj\0" +"skjerv\xc3\xb8y.no\0" +"kitagawa.kochi.jp\0" +"org.tm\0brasilia.me\0" +"org.tn\0" +"muosat.no\0s\xc3\xb8ndre-land.no\0org.to\0\xe0\xba\xa5\xe0\xba\xb2\xe0\xba\xa7\0lotto\0" +"ebetsu.hokkaido.jp\0*.dapps.earth\0" +"pilots.museum\0org.ua\0hisamitsu\0us-east-1.amazonaws.com\0siiites.com\0" +"org.tr\0" +"sennan.osaka.jp\0org.tt\0jeep\0" +"square7.de\0" +"cargo.aero\0h\xc3\xa1""bmer.no\0org.tw\0org.ug\0bingo\0" +"uki.kumamoto.jp\0meiwa.mie.jp\0watch\0wroc.pl\0" +"gen.nz\0" +"levanger.no\0org.uk\0" +"keisen.fukuoka.jp\0katowice.pl\0" +"life\0from-wi.com\0" +"granvin.no\0seek\0" +"ponpes.id\0yuza.yamagata.jp\0es.ax\0" +"ushuaia.museum\0" +"veterinaire.fr\0" +"org.vc\0" +"hokkaido.jp\0soni.nara.jp\0" +"org.ve\0" +"chonan.chiba.jp\0rackmaze.net\0" +"org.uy\0org.vi\0\xd0\xbc\xd0\xbe\xd0\xbd\0" +"leg.br\0org.uz\0jcb\0" +"aurland.no\0" +"at.it\0" +"org.vn\0" +"co.gg\0video\0" +"sakae.chiba.jp\0travel.pl\0\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" +"lon.wafaicloud.com\0" +"co.gl\0" +"org.vu\0" +"shimamaki.hokkaido.jp\0" +"gangaviika.no\0" +"ist\0" +"avocat.fr\0" +"ryuoh.shiga.jp\0kainan.tokushima.jp\0psp.gov.pl\0" +"co.gy\0" +"org.ws\0paas.beebyte.io\0" +"trieste.it\0square7.ch\0" +"sch.ae\0alstom\0" +"siellak.no\0" +"co.id\0laz.it\0chikugo.fukuoka.jp\0usui.fukuoka.jp\0wroclaw.pl\0" +"co.hu\0obninsk.su\0" +"daegu.kr\0itv\0" +"yachiyo.ibaraki.jp\0" +"hair\0" +"co.il\0wodzislaw.pl\0" +"co.im\0org.ye\0in-butter.de\0" +"co.in\0ruhr\0" +"from-ks.com\0" +"co.ir\0" +"\xe7\xb5\x84\xe7\xb9\x94.hk\0" +"co.it\0at.md\0" +"a\xc3\xa9roport.ci\0co.je\0" +"fbxos.fr\0" +"\xc3\xa1laheadju.no\0" +"*.bd\0milano.it\0mashiki.kumamoto.jp\0kasaoka.okayama.jp\0nishinoshima.shimane.jp\0" +"org.za\0idnblogger.com\0" +"org.yt\0" +"co.jp\0minato.osaka.jp\0\xe7\xbd\x91\xe7\xbb\x9c\0" +"s3.teckids.org\0" +"ouda.nara.jp\0" +"co.ke\0org.zm\0like\0" +"mielec.pl\0" +"musica.ar\0gen.tr\0" +"3.bg\0" +"iamallama.com\0" +"*.ck\0org.zw\0" +"kaszuby.pl\0travel.tt\0" +"co.kr\0nat.tn\0" +"co.lc\0markets\0" +"filatelia.museum\0" +"musica.bo\0alaheadju.no\0" +"kuroishi.aomori.jp\0taishin.fukushima.jp\0higashihiroshima.hiroshima.jp\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0" +"canada.museum\0omega\0" +"cc.mo.us\0dyndns.info\0" +"aizubange.fukushima.jp\0community-pro.net\0" +"co.ma\0s3.dualstack.ap-south-1.amazonaws.com\0" +"co.ls\0" +"odawara.kanagawa.jp\0" +"co.me\0" +"co.mg\0minisite.ms\0" +"mitaka.tokyo.jp\0" +"secure\0from-pa.com\0" +"cnpy.gdn\0" +"freebox-os.com\0" +"amot.no\0hurdal.no\0cc.nh.us\0jio\0limo\0groks-the.info\0" +"kasuya.fukuoka.jp\0shingu.hyogo.jp\0tomiya.miyagi.jp\0myspreadshop.net\0" +"co.na\0myravendb.com\0" +"mo-i-rana.no\0k12.ny.us\0farmers\0" +"fc.it\0rome.it\0" +"co.mu\0" +"*.er\0" +"co.mw\0" +"yaotsu.gifu.jp\0suginami.tokyo.jp\0search\0" +"nt.edu.au\0co.ni\0ap-northeast-1.elasticbeanstalk.com\0" +"co.mz\0" +"link\0" +"kasumigaura.ibaraki.jp\0chanel\0church\0co.nl\0" +"encyclopedic.museum\0" +"*.stgstage.dev\0" +"*.fk\0co.no\0fh-muenster.io\0" +"\xe4\xb8\x89\xe9\x87\x8d.jp\0yakumo.hokkaido.jp\0barsy.shop\0gotdns.ch\0" +"on-aptible.com\0" +"seljord.no\0user.party.eus\0" +"trentino-s-tirol.it\0utazu.kagawa.jp\0" +"arte.bo\0sn\xc3\xa5""ase.no\0" +"tenri.nara.jp\0gamo.shiga.jp\0" +"co.nz\0" +"kraanghke.no\0" +"settsu.osaka.jp\0" +"co.om\0" +"mosvik.no\0" +"lazio.it\0shirahama.wakayama.jp\0" +"es.kr\0" +"balsan-suedtirol.it\0ge.it\0mochizuki.nagano.jp\0toyosato.shiga.jp\0" +"mallorca.museum\0bd.se\0" +"is-a-celticsfan.org\0" +"niimi.okayama.jp\0" +"surrey.museum\0" +"ebina.kanagawa.jp\0jll\0co.pl\0" +"co.pn\0" +"sch.id\0" +"su.paba.se\0" +"environment.museum\0" +"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"hjelmeland.no\0co.pw\0" +"hashima.gifu.jp\0" +"urn.arpa\0" +"aero\0i.bg\0" +"sch.ir\0" +"asahi.mie.jp\0jmp\0" +"histoire.museum\0" +"selje.no\0ak.us\0" +"now-dns.org\0" +"isa-geek.net\0" +"lease\0" +"jnj\0" +"r.bg\0sch.jo\0" +"izumi.osaka.jp\0" +"exchange\0" +"agr.br\0" +"aeroclub.aero\0co.ro\0" +"*.jm\0study\0" +"co.rs\0ann-arbor.mi.us\0cust.testing.thingdust.io\0" +"agency\0" +"co.rw\0at.vg\0" +"citi\0zara\0" +"*.kh\0" +"pharmacy.museum\0" +"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0soundcast.me\0sinaapp.com\0" +"fashion\0" +"co.st\0jot\0" +"l\xc3\xa4ns.museum\0" +"sch.lk\0" +"lucca.it\0kitakami.iwate.jp\0co.th\0cloudfront.net\0" +"creation.museum\0city\0joy\0dray-dns.de\0" +"co.sz\0co.tj\0" +"enscaled.sg\0" +"kota.aichi.jp\0" +"sweden.museum\0co.tm\0" +"klabu.no\0" +"biratori.hokkaido.jp\0" +"eero-stage.online\0co.ua\0" +"co.tt\0" +"sch.ly\0" +"co.ug\0" +"ama.shimane.jp\0" +"co.tz\0" +"co.uk\0haus\0dontexist.org\0" +"oirm.gov.pl\0" +"dnsupdater.de\0" +"cricket\0" +"*.mm\0cx.ua\0" +"tsk.tr\0" +"sch.ng\0co.us\0" +"takino.hyogo.jp\0" +"co.ve\0live\0from-vt.com\0" +"emr.it\0" +"co.vi\0" +"co.uz\0" +"gs.vf.no\0" +"atsugi.kanagawa.jp\0kitakata.miyazaki.jp\0sado.niigata.jp\0" +"ns.ca\0" +"nome.cv\0" +"hirono.fukushima.jp\0miharu.fukushima.jp\0manno.kagawa.jp\0*.np\0" +"casadelamoneda.museum\0" +"farm.museum\0" +"foodnetwork\0" +"yamato.kumamoto.jp\0firewall-gateway.net\0" +"firebaseapp.com\0barsyonline.com\0" +"fuefuki.yamanashi.jp\0" +"l\xc3\xa1hppi.no\0" +"kopervik.no\0*.pg\0" +"office-on-the.net\0" +"sch.qa\0" +"vpndns.net\0" +"pe.ca\0railroad.museum\0s3.dualstack.sa-east-1.amazonaws.com\0" +"gop.pk\0k12.tn.us\0" +"railway.museum\0" +"frontier\0usr.cloud.muni.cz\0" +"politica.bo\0" +"nanporo.hokkaido.jp\0takaishi.osaka.jp\0" +"co.za\0" +"clinic\0" +"lo.it\0niigata.niigata.jp\0" +"sexy\0" +"jur.pro\0" +"asahi.toyama.jp\0wskr.gov.pl\0kfh\0" +"jele.club\0" +"sel.no\0" +"sch.sa\0kiev.ua\0co.zm\0" +"is-into-anime.com\0" +"fl.us\0" +"co.zw\0" +"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0kagamiishi.fukushima.jp\0ohkura.yamagata.jp\0" +"sch.so\0" +"dazaifu.fukuoka.jp\0" +"estate\0" +"orx.biz\0" +"sec.ps\0sch.ss\0*.on-k3s.io\0" +"9guacu.br\0" +"na.it\0" +"mill.museum\0" +"to.leg.br\0" +"choyo.kumamoto.jp\0" +"ivanovo.su\0" +"agakhan\0" +"\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0" +"jls-sto3.elastx.net\0""2ix.at\0" +"pvt.ge\0oxford.museum\0" +"slz.br\0" +"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0meraker.no\0" +"cloudycluster.net\0" +"erotica.hu\0kia\0" +"productions\0lolipop.io\0" +"shinshinotsu.hokkaido.jp\0" +"philips\0" +"dupont\0" +"i.ng\0kl\xc3\xa6""bu.no\0" +"kiyokawa.kanagawa.jp\0" +"kim\0" +"app.os.stg.fedoraproject.org\0" +"taito.tokyo.jp\0""2ix.ch\0" +"whaling.museum\0" +"k12.wy.us\0" +"bus.museum\0design.museum\0" +"sakado.saitama.jp\0" +"api.stdlib.com\0""2ix.de\0" +"lpages.co\0" +"puglia.it\0jp.net\0bitbridge.net\0" +"sk.ca\0" +"osakikamijima.hiroshima.jp\0uozu.toyama.jp\0" +"nagoya\0from-ms.com\0from-nc.com\0applinzi.com\0" +"berlev\xc3\xa5g.no\0" +"tanabe.kyoto.jp\0dlugoleka.pl\0" +"blogdns.com\0" +"deno.dev\0" +"takasago.hyogo.jp\0i.ph\0prod\0run.app\0" +"prof\0" +"cagliari.it\0sumoto.kumamoto.jp\0" +"dallas.museum\0" +"algard.no\0f\xc3\xb8rde.no\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0" +"pe.it\0" +"group.aero\0" +"kitaura.miyazaki.jp\0" +"bruxelles.museum\0posts-and-telecommunications.museum\0fldrv.com\0" +"trentino-s\xc3\xbc""dtirol.it\0tamaki.mie.jp\0" +"\xd1\x81\xd0\xb0\xd0\xbc\xd0\xb0\xd1\x80\xd0\xb0.\xd1\x80\xd1\x83\xd1\x81\0" +"workers.dev\0" +"eaton.mi.us\0" +"minami.fukuoka.jp\0kita.kyoto.jp\0soc.srcf.net\0" +"antiques.museum\0" +"tv.bb\0" +"pn.it\0" +"western.museum\0" +"mizumaki.fukuoka.jp\0wakkanai.hokkaido.jp\0" +"r\xc3\xb8yrvik.no\0clothing\0" +"mediatech.dev\0" +"tv.bo\0swiss\0" +"*.nagoya.jp\0mishima.fukushima.jp\0cieszyn.pl\0" +"topology.museum\0rag-cloud.hosteur.com\0" +"tv.br\0pe.kr\0" +"workinggroup.aero\0" +"mircloud.host\0" +"yotsukaido.chiba.jp\0aid.pl\0" +"tm.cy\0i.se\0sch.zm\0" +"yoro.gifu.jp\0honbetsu.hokkaido.jp\0" +"aquarelle\0is-a-photographer.com\0" +"lesja.no\0webthings.io\0" +"km.ua\0" +"lanbib.se\0\xe4\xb8\xad\xe5\x9b\xbd\0deloitte\0" +"go.dyndns.org\0" +"pistoia.it\0hirata.fukushima.jp\0" +"mansion.museum\0r.se\0" +"tm.dz\0" +"alwaysdata.net\0" +"ol.no\0tysnes.no\0solutions\0utwente.io\0" +"*.kobe.jp\0sue.fukuoka.jp\0moka.tochigi.jp\0" +"kv.ua\0realty\0" +"en-root.fr\0" +"\xe4\xb8\xad\xe5\x9c\x8b\0" +"ri.it\0aichi.jp\0\xe6\x84\x9b\xe5\xaa\x9b.jp\0fuji.shizuoka.jp\0mikawa.yamagata.jp\0" +"wa.au\0" +"ac\0belau.pw\0reviews\0" +"ad\0" +"ae\0" +"af\0co.education\0" +"ag\0" +"saotome.st\0" "ai\0" -"asn.lv\0americanfamily\0" -"al\0akkeshi.hokkaido.jp\0konan.shiga.jp\0" -"am\0hotel.tz\0mmafan.biz\0" -"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0ashoro.hokkaido.jp\0" -"ao\0" -"katsushika.tokyo.jp\0" +"kpn\0" +"h\xc3\xa5.no\0" +"al\0tokai.ibaraki.jp\0" +"am\0software\0" +"dev.br\0vet.br\0tm.fr\0" +"ao\0bjark\xc3\xb8y.no\0osteroy.no\0" "aq\0ba\0" -"ar\0bb\0" -"as\0fbx-os.fr\0" -"at\0" -"au\0be\0date.fukushima.jp\0is-a-conservative.com\0" +"ar\0bb\0\xd8\xa7\xd9\x84\xd8\xa8\xd8\xad\xd8\xb1\xd9\x8a\xd9\x86\0" +"as\0giske.no\0" +"at\0sumoto.hyogo.jp\0" +"au\0be\0" "bf\0" -"aw\0bg\0eisenbahn.museum\0" -"ax\0bh\0" -"bi\0artgallery.museum\0k12.vi.us\0" +"aw\0bg\0birkenes.no\0" +"ax\0bh\0twmail.net\0" +"bi\0suzuki\0" "az\0bj\0" +"organic\0" +"cesenaforli.it\0seto.aichi.jp\0numata.hokkaido.jp\0gobo.wakayama.jp\0umig.gov.pl\0" "bm\0" "bn\0" "bo\0" -"ca\0wi.us\0" +"yoita.niigata.jp\0krd\0lat\0" +"ca\0" "br\0" -"bs\0cc\0eniwa.hokkaido.jp\0" -"bt\0cd\0" +"bs\0cc\0law\0" +"bt\0cd\0kumano.hiroshima.jp\0" "bv\0cf\0" -"bw\0cg\0netflix\0room\0" +"bw\0cg\0b\xc3\xa6rum.no\0" "ch\0" -"by\0ci\0\xc3\xb8rsta.no\0" -"bz\0kira.aichi.jp\0aurskog-h\xc3\xb8land.no\0" -"cl\0play\0read-books.org\0" -"cm\0state.museum\0monash\0" -"cn\0gleeze.com\0fastvps.site\0" +"by\0ci\0nationalfirearms.museum\0" +"bz\0" +"cl\0\xe5\xbe\xb3\xe5\xb3\xb6.jp\0tochigi.tochigi.jp\0service.gov.scot\0" +"cm\0publishproxy.com\0" +"saobernardo.br\0cn\0" "co\0" -"cr\0bari.it\0" -"clock.museum\0" -"gs.tm.no\0" -"cu\0de\0nesodden.no\0\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0" -"cv\0geek.nz\0rn.leg.br\0" -"cw\0arts.nf\0flynnhosting.net\0" -"cx\0towada.aomori.jp\0" -"cy\0ubank\0" -"cz\0dj\0leirvik.no\0" +"hra.health\0" +"tm.hu\0" +"cr\0" +"bomlo.no\0" +"nishi.fukuoka.jp\0clubmed\0" +"cu\0de\0" +"cv\0" +"cw\0" +"cx\0vapor.cloud\0" +"cy\0" +"cz\0dj\0" "dk\0" -"higashiyama.kyoto.jp\0" -"dm\0baidar.no\0" -"copenhagen.museum\0hosp.uk\0" -"do\0hikimi.shimane.jp\0" -"onjuku.chiba.jp\0chino.nagano.jp\0" -"cbg.ru\0" -"ec\0" -"skanland.no\0" -"ee\0cc.as.us\0*.moonscale.io\0" -"zoology.museum\0" -"eg\0" -"kawanabe.kagoshima.jp\0computerhistory.museum\0nfshost.com\0" -"chitose.hokkaido.jp\0" +"ferrara.it\0" +"dm\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x80\xd1\x83\xd1\x81\0" +"do\0lierne.no\0" +"aosta-valley.it\0" +"ec\0budejju.no\0passagens\0\xd0\xbe\xd1\x80\xd0\xb3\0" +"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0miyama.fukuoka.jp\0sakuho.nagano.jp\0" +"ee\0qc.com\0kilatiron.com\0" +"eg\0malvik.no\0" +"namegawa.saitama.jp\0webhop.net\0" +"tv.im\0bukhara.su\0" "dz\0" -"ouda.nara.jp\0schokoladen.museum\0" -"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0" -"cc.md.us\0" -"tourism.pl\0" -"auto.pl\0" -"ozora.hokkaido.jp\0" -"es\0otsuka\0" -"et\0" -"eu\0" -"r\xc3\xb8ros.no\0ro.leg.br\0" -"inuyama.aichi.jp\0gon.pk\0" -"mydatto.com\0" -"fi\0komaki.aichi.jp\0" -"fj\0fet.no\0" -"fm\0crown\0" -"fo\0" -"pr.it\0" -"ga\0nexus\0" -"fr\0gb\0" -"semboku.akita.jp\0" -"gd\0" -"ge\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0members.linode.com\0" +"tananger.no\0bygland.no\0sortland.no\0" +"\xe5\xb9\xbf\xe4\xb8\x9c\0jele.host\0" +"suisse.museum\0" +"nj.us\0lds\0" +"tv.it\0" +"apple\0" +"es\0" +"et\0mito.ibaraki.jp\0swidnik.pl\0" +"eu\0finance\0" +"katagami.akita.jp\0yakumo.shimane.jp\0" +"fi\0tm.km\0*.devcdnaccesso.com\0" +"fj\0" +"sauda.no\0" +"fm\0utazas.hu\0" +"fo\0mer\xc3\xa5ker.no\0smola.no\0" +"hirara.okinawa.jp\0ath.cx\0" +"ga\0" +"fr\0geometre-expert.fr\0gb\0" +"tv.kg\0" +"gd\0adult.ht\0" +"ge\0pyatigorsk.ru\0" "gf\0" -"gg\0vaksdal.no\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0" -"gh\0" -"gi\0narashino.chiba.jp\0" -"silk.museum\0" -"hadano.kanagawa.jp\0" +"groundhandling.aero\0gg\0" +"gh\0friuli-v-giulia.it\0" +"gi\0*.cns.joyent.com\0" +"yn.cn\0" +"\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0" "gl\0" -"gm\0tsurugi.ishikawa.jp\0" +"gm\0" "gn\0" -"pvt.ge\0gp\0" -"gq\0" +"tm.mc\0fantasyleague.cc\0" +"gp\0kuleuven.cloud\0" +"gq\0is-uberleet.com\0" "gr\0" -"gs\0pharmaciens.km\0kpn\0" +"gs\0tm.mg\0vestre-slidre.no\0" "gt\0" "gu\0" -"nationalfirearms.museum\0" -"gw\0dattorelay.com\0" -"gy\0" -"kitchen\0" -"hk\0k12.ny.us\0" -"hm\0red.sv\0" -"hn\0!city.sendai.jp\0shikokuchuo.ehime.jp\0hotel.lk\0" -"cc.il.us\0" -"filegear-sg.me\0" -"recht.pro\0uk.com\0" +"gw\0" +"gy\0health.museum\0" +"locker\0" +"hk\0st.no\0" +"carbonia-iglesias.it\0yanaizu.fukushima.jp\0kushimoto.wakayama.jp\0nome.pt\0voorloper.cloud\0" +"hm\0" +"hn\0" +"ballooning.aero\0" +"kikonai.hokkaido.jp\0wakuya.miyagi.jp\0" "hr\0" -"amscompute.com\0" -"tur.ar\0ht\0id\0" -"hu\0ie\0" -"juniper\0" -"bi.it\0nyc.museum\0" -"krd\0lat\0git-pages.rit.edu\0" -"ap-northeast-3.elasticbeanstalk.com\0" -"il\0law\0\xd0\xba\xd0\xbe\xd0\xbc\0" -"fj.cn\0im\0" -"in\0edogawa.tokyo.jp\0" -"io\0gmbh\0pythonanywhere.com\0" -"iq\0\xc3\xa5lesund.no\0" +"ht\0id\0\xd8\xb9\xd8\xb1\xd8\xa8\0" +"hu\0ie\0ismaili\0azerbaijan.su\0" +"tysv\xc3\xa6r.no\0vikna.no\0cloudsite.builders\0" +"beauty\0" +"tm.no\0skodje.no\0" +"il\0" +"im\0tv.na\0" +"ce.gov.br\0in\0" +"io\0oppdal.no\0dst.mi.us\0" +"iq\0" "ir\0" "is\0" -"tur.br\0it\0" -"je\0" -"nativeamerican.museum\0" -"yasu.shiga.jp\0" -"potenza.it\0ono.fukushima.jp\0" -"gotdns.org\0" -"jeonnam.kr\0oregontrail.museum\0" -"jo\0" +"it\0" +"je\0sciencecenter.museum\0" +"cpa.pro\0" +"ohtawara.tochigi.jp\0" +"usantiques.museum\0avianca\0" +"campinagrande.br\0*.telebit.xyz\0" +"dunlop\0" +"kozow.com\0" +"jo\0bmoattachments.org\0" "jp\0" -"\xe6\x84\x9b\xe5\xaa\x9b.jp\0travel\0" -"fukuyama.hiroshima.jp\0sdscloud.pl\0" -"olsztyn.pl\0" -"umb.it\0taipei\0" +"demo.datadetect.com\0" +"lib.ga.us\0" +"nantan.kyoto.jp\0turek.pl\0buyshop.jp\0" "ke\0" -"kg\0" -"barsy.club\0""32-b.it\0" -"ki\0" -"noboribetsu.hokkaido.jp\0syncloud.it\0" -"trentins\xc3\xbc""d-tirol.it\0" -"geo.br\0minamifurano.hokkaido.jp\0km\0" +"kg\0\xe4\xbf\xa1\xe6\x81\xaf\0" +"tm.pl\0" +"ki\0theworkpc.com\0" +"yoshino.nara.jp\0murayama.yamagata.jp\0" +"km\0" "kn\0" +"nord-fron.no\0" "kp\0" -"\xe7\xbe\xa4\xe9\xa6\xac.jp\0la\0madrid\0staging.onred.one\0" +"la\0" "kr\0lb\0" -"kunigami.okinawa.jp\0lc\0" -"ma.us\0" -"tromso.no\0mydobiss.com\0" -"cci.fr\0tra.kp\0kw\0textile.museum\0" -"kiso.nagano.jp\0lds\0" -"ky\0li\0build\0" -"des.br\0kz\0gaivuotna.no\0novecore.site\0" +"lc\0vm.bytemark.co.uk\0" +"firm.ht\0desa.id\0mitsue.nara.jp\0" +"kw\0sarpsborg.no\0" +"higashimurayama.tokyo.jp\0" +"ky\0li\0" +"the.br\0kz\0" "lk\0" -"temasek\0" -"\xe9\x9d\x99\xe5\xb2\xa1.jp\0preservation.museum\0" -"ma\0" +"inashiki.ibaraki.jp\0" +"sb.ua\0dyndns-home.com\0forgot.her.name\0" +"firm.in\0" +"ri.us\0llc\0uk0.bigv.io\0" +"urbino-pesaro.it\0" +"ma\0s3-eu-west-1.amazonaws.com\0" "lr\0" -"ls\0mc\0r\xc3\xa1hkker\xc3\xa1vju.no\0" -"lt\0md\0" -"lu\0me\0podlasie.pl\0homesecuritypc.com\0" +"ls\0mc\0heroy.nordland.no\0events\0" +"lt\0md\0alp1.ae.flow.ch\0" +"lu\0me\0" "lv\0" -"kawajima.saitama.jp\0mg\0dallas.museum\0" -"hotel.hu\0mh\0" -"ly\0naturalhistory.museum\0" -"ts.it\0plc.ly\0mk\0" -"ml\0" +"mg\0bauhaus\0" +"mibu.tochigi.jp\0mh\0" +"ly\0" +"mk\0tm.ro\0" +"kamogawa.chiba.jp\0ml\0llp\0" "mn\0" -"mo\0" -"mp\0" -"gliding.aero\0taishi.hyogo.jp\0mq\0na\0" -"mr\0" -"minobu.yamanashi.jp\0ms\0anthro.museum\0nc\0augustow.pl\0" -"mt\0hashbang.sh\0" -"mu\0ne\0gs.oslo.no\0" +"mo\0aejrie.no\0service.gov.uk\0" +"matsushige.tokushima.jp\0mp\0" +"mq\0na\0tm.se\0" +"mr\0monster\0" +"ms\0nc\0lib.id.us\0" +"kosai.shizuoka.jp\0mt\0" +"mu\0ne\0" "mv\0nf\0" -"mw\0ng\0\xe8\xb4\xad\xe7\x89\xa9\0" -"barreau.bj\0mx\0sklep.pl\0" +"mw\0ng\0" +"mx\0" "my\0ni\0" -"kiyokawa.kanagawa.jp\0mz\0b\xc3\xa1jddar.no\0" -"nl\0" -"mibu.tochigi.jp\0partners\0" -"opensocial.site\0" -"no\0" +"mz\0" +"chikuzen.fukuoka.jp\0nl\0co.krd\0" +"ws.na\0" +"firm.co\0no\0" +"higashiyoshino.nara.jp\0itoigawa.niigata.jp\0tv.sd\0" +"dyndns-at-home.com\0" "nr\0" -"ami.ibaraki.jp\0" +"raffleentry.org.uk\0" +"tanagura.fukushima.jp\0" "nu\0" -"\xc3\xb8rskog.no\0" -"travel.pl\0" +"wedding\0" +"kita.tokyo.jp\0fashionstore.jp\0" +"priv.hu\0" "nz\0" -"scienceandindustry.museum\0" -"hachinohe.aomori.jp\0om\0" -"western.museum\0" -"pa\0" -"b.bg\0money\0" -"pe\0*.vps.myjino.ru\0" -"kurogi.fukuoka.jp\0pf\0" -"s3-website-ap-southeast-2.amazonaws.com\0" -"vgs.no\0gs.fm.no\0ph\0redumbrella\0static.observableusercontent.com\0" -"shimoda.shizuoka.jp\0uzs.gov.pl\0vodka\0" -"cheltenham.museum\0pk\0foundation\0" +"firm.dk\0" +"setouchi.okayama.jp\0" +"historichouses.museum\0om\0jelastic.team\0" +"shaw\0is-found.org\0" +"izu.shizuoka.jp\0" +"pa\0bryansk.su\0" +"hol.no\0base.ec\0" +"pe\0fhv.se\0servepics.com\0" +"pf\0" +"d\xc3\xb8nna.no\0" +"rieti.it\0ph\0lol\0" +"skedsmokorset.no\0pk\0work\0" "pl\0" -"b.br\0taki.mie.jp\0pm\0" -"\xe9\xab\x98\xe7\x9f\xa5.jp\0pn\0" -"rybnik.pl\0" -"qa\0" -"pr\0kilatiron.com\0" -"ps\0selfip.biz\0" +"pm\0" +"pn\0tv.tr\0" +"forl\xc3\xac""cesena.it\0senseering.net\0" +"qa\0teaches-yoga.com\0" +"pr\0" +"ps\0" "pt\0" -"vercelli.it\0sue.fukuoka.jp\0ikeda.osaka.jp\0" -"kin.okinawa.jp\0pw\0" +"tv.tz\0" +"pw\0" +"nakanoto.ishikawa.jp\0nishiawakura.okayama.jp\0lpl\0" "py\0" -"kawanishi.nara.jp\0" -"sodegaura.chiba.jp\0" -"edu.ac\0sdn.gov.pl\0android\0" -"agro.bo\0surrey.museum\0" -"edu.af\0" -"noda.chiba.jp\0" -"re\0" -"se.leg.br\0" -"yachiyo.ibaraki.jp\0hu.com\0" -"edu.al\0pioneer\0" -"genoa.it\0" -"nico\0" -"gc.ca\0" -"edu.ba\0agrar.hu\0" -"edu.ar\0edu.bb\0" -"sologne.museum\0ro\0pr.us\0" -"*.bd\0nagatoro.saitama.jp\0" -"edu.au\0sa\0" -"yashio.saitama.jp\0sb\0aarp\0" -"rs\0sc\0golffan.us\0" -"edu.bh\0br.it\0cb.it\0mutsuzawa.chiba.jp\0sd\0\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0" -"edu.bi\0ru\0se\0" -"edu.az\0" -"rw\0sg\0cloudapps.digital\0" -"katsuura.chiba.jp\0sh\0llc\0" -"edu.bm\0gs.bu.no\0si\0" -"edu.bn\0sj\0" -"edu.bo\0sk\0" -"sl\0barefoot\0" -"ms.it\0sm\0" -"edu.br\0sn\0" -"edu.bs\0so\0" -"edu.bt\0j\xc3\xb8rpeland.no\0" -"travel.tt\0" +"certification.aero\0davvesiida.no\0watches\0" +"yawatahama.ehime.jp\0fukumitsu.toyama.jp\0" +"monzaebrianza.it\0treviso.it\0" +"mining.museum\0re\0" +"hdfc\0" +"shijonawate.osaka.jp\0" +"kunstunddesign.museum\0uslivinghistory.museum\0dnsfor.me\0" +"man\0" +"venezia.it\0ishikawa.jp\0yokosuka.kanagawa.jp\0nowaruda.pl\0map\0" +"mba\0" +"ro\0" +"fukushima.fukushima.jp\0" +"sa\0" +"sb\0" +"rs\0sc\0lib.ky.us\0" +"sd\0" +"ru\0se\0" +"rw\0sg\0" +"sh\0" +"larsson.museum\0town.museum\0si\0forgot.his.name\0sells-for-less.com\0ybo.trade\0" +"sj\0" +"sk\0k12.ar.us\0motorcycles\0" +"minokamo.gifu.jp\0uw.gov.pl\0sl\0" +"sm\0" +"sn\0" +"idv.hk\0so\0" +"tamba.hyogo.jp\0iida.nagano.jp\0" +"s3-website.eu-west-3.amazonaws.com\0filegear-gb.me\0" "sr\0" "ss\0tc\0" -"st\0td\0lego\0" -"edu.ci\0su\0llp\0adobeaemcloud.com\0" -"edu.bz\0sv\0tf\0" -"*.ck\0tg\0" -"sx\0th\0" +"niigata.jp\0st\0td\0" +"uscountryestate.museum\0su\0orange\0dagestan.ru\0" +"sv\0tf\0" +"tg\0to.work\0" +"anamizu.ishikawa.jp\0satsumasendai.kagoshima.jp\0sx\0th\0priv.at\0" "sy\0" -"edu.cn\0sz\0tj\0" -"edu.co\0tk\0servebbs.com\0" -"tl\0" -"malatvuopmi.no\0tm\0weather\0" -"ichikawamisato.yamanashi.jp\0tvedestrand.no\0tn\0" -"to\0s3-us-gov-west-1.amazonaws.com\0" -"trentin-suedtirol.it\0ina.ibaraki.jp\0" -"edu.cu\0iyo.ehime.jp\0ua\0blogspot.co.at\0" -"tr\0wanggou\0" -"edu.cw\0onojo.fukuoka.jp\0simple-url.com\0" -"sakae.chiba.jp\0tt\0" +"sz\0tj\0" +"rauma.no\0tk\0" +"toyotomi.hokkaido.jp\0sayama.osaka.jp\0tl\0" +"brandywinevalley.museum\0tm\0tm.za\0na4u.ru\0" +"tn\0" +"bahccavuotna.no\0to\0wa.us\0" +"kodaira.tokyo.jp\0ltd\0" +"palace.museum\0ua\0" +"tr\0" +"rindal.no\0" +"tt\0" +"ddr.museum\0dagestan.su\0" "tv\0" -"tw\0ug\0cern\0" -"inatsuki.fukuoka.jp\0" -"edu.dm\0" +"tr\xc3\xb8gstad.no\0tw\0ug\0" +"jobs.tt\0" +"extraspace\0" "tz\0" -"edu.do\0ms.kr\0uk\0" -"yachiyo.chiba.jp\0iida.nagano.jp\0" -"plc.uk\0farmers\0" -"ibaraki.ibaraki.jp\0" -"edu.ec\0honjo.saitama.jp\0" -"edu.ee\0va\0" -"edu.eg\0us\0vc\0" +"trysil.no\0uk\0" +"nakamura.kochi.jp\0hayakawa.yamanashi.jp\0" +"reservd.testing.thingdust.io\0" +"med\0" +"sumy.ua\0va\0*.elb.amazonaws.com\0dev.vu\0" +"us\0vc\0bluebite.io\0" "ve\0" -"nl.ca\0edu.dz\0" "vg\0" -"dnsking.ch\0" -"urn.arpa\0namegawa.saitama.jp\0uy\0vi\0" -"uz\0" -"gjerstad.no\0" -"pl.eu.org\0navoi.su\0" -"*.er\0vn\0intuit\0nl.ci\0" -"edu.es\0google\0" -"edu.et\0fermo.it\0bato.tochigi.jp\0game-host.org\0" -"lol\0" -"govt.nz\0br.com\0" -"vu\0s3.dualstack.ap-south-1.amazonaws.com\0" -"daejeon.kr\0wf\0plus\0" -"*.fk\0anan.tokushima.jp\0investments\0" -"edu.fm\0systems\0" -"nagareyama.chiba.jp\0" -"shiiba.miyazaki.jp\0afamilycompany\0" -"ba.leg.br\0" -"edu.gd\0samegawa.fukushima.jp\0psp.gov.pl\0" -"edu.ge\0salzburg.museum\0lpl\0" +"uy\0vi\0shia\0jpn.com\0dynalias.com\0" +"uz\0men\0" +"lon-2.paas.massivegrid.net\0" +"dyndns-web.com\0vologda.su\0framercanvas.com\0" +"vn\0" +"jolster.no\0" +"stavern.no\0lib.ne.us\0" +"konskowola.pl\0" +"vu\0" +"wf\0" +"kudoyama.wakayama.jp\0tozawa.yamagata.jp\0management\0" +"myhome-server.de\0" +"grong.no\0" +"tokuyama.yamaguchi.jp\0" +"*.stg.dev\0" +"endoftheinternet.org\0stage.nodeart.io\0" "ws\0" -"edu.gh\0" -"edu.gi\0" -"tube\0" -"royrvik.no\0" -"edu.gl\0" +"birdart.museum\0staging.onred.one\0" +"cc.ct.us\0" +"is-a-llama.com\0kurgan.su\0" +"rsc.cdn77.org\0" +"opoczno.pl\0" +"demo.datacenter.fi\0" +"okuizumo.shimane.jp\0" +"s3.dualstack.eu-west-1.amazonaws.com\0" +"krellian.net\0" +"firm.ve\0ye\0country\0" +"usa.museum\0s3-website-us-west-1.amazonaws.com\0dyndns-blog.com\0" +"veg\xc3\xa5rshei.no\0" +"ecn.br\0" +"deporte.bo\0" +"miyoshi.aichi.jp\0" +"lilly\0" +"maceio.br\0" +"lillesand.no\0casino\0" +"legnica.pl\0yt\0" +"kirovograd.ua\0" +"kaho.fukuoka.jp\0mil\0" +"biella.it\0" +"zp.ua\0zm\0" +"deals\0lanxess\0" +"minamata.kumamoto.jp\0basketball\0mit\0" +"gs.hl.no\0vefsn.no\0lib.pa.us\0" +"gonohe.aomori.jp\0kaizuka.osaka.jp\0" +"point2this.com\0" +"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0zw\0tunk.org\0" +"fujimino.saitama.jp\0ichiba.tokushima.jp\0" +"meeres.museum\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0" +"shizuoka.jp\0" +"dedyn.io\0" +"kitadaito.okinawa.jp\0" +"ooguy.com\0" +"tecnologia.bo\0verran.no\0" +"aso.kumamoto.jp\0" +"fr\xc3\xa6na.no\0" +"vallee-aoste.it\0naka.ibaraki.jp\0" +"delmenhorst.museum\0\xd5\xb0\xd5\xa1\xd5\xb5\0east-kazakhstan.su\0glitch.me\0hidora.com\0" +"toshiba\0iki.fi\0iopsys.se\0" +"mlb\0" +"shimokitayama.nara.jp\0zamami.okinawa.jp\0sport\0" +"archaeological.museum\0planetarium.museum\0\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"at-band-camp.net\0" +"cc.ga.us\0" +"ueno.gunma.jp\0shop\0" +"nedre-eiker.no\0catering\0" +"myoko.niigata.jp\0mattel\0" +"mma\0from-nh.com\0" +"go.gov.br\0" +"firm.ro\0mls\0show\0" +"fireweb.app\0" +"\xe9\xa6\x99\xe5\xb7\x9d.jp\0tokai.aichi.jp\0" +"inf.br\0" +"\xc3\xb8ksnes.no\0tr.eu.org\0pointto.us\0" +"honai.ehime.jp\0ravpage.co.il\0" +"politie\0" +"snaase.no\0" +"vps-host.net\0" +"rj.leg.br\0" +"karasjok.no\0" +"kanoya.kagoshima.jp\0miyake.nara.jp\0kppsp.gov.pl\0" +"us-east-2.elasticbeanstalk.com\0" +"inf.cu\0" +"bsb.br\0" +"b\xc3\xa1jddar.no\0karasjohka.no\0" +"kochi.kochi.jp\0" +"bir.ru\0" +"minakami.gunma.jp\0sayama.saitama.jp\0" +"moe\0" +"somna.no\0" +"florist\0" +"moi\0s3.dualstack.eu-central-1.amazonaws.com\0" +"yachimata.chiba.jp\0minami-alps.yamanashi.jp\0shoparena.pl\0" +"mom\0" +"idv.tw\0" +"emilia-romagna.it\0valleaosta.it\0hakusan.ishikawa.jp\0gda.pl\0" +"midatlantic.museum\0" +"club\0" +"askim.no\0" +"konan.aichi.jp\0sdscloud.pl\0" +"mov\0" +"joyo.kyoto.jp\0elementor.cloud\0eastus2.azurestaticapps.net\0" +"school.na\0" +"firm.nf\0" +"bievat.no\0consulting\0firm.ng\0" +"tsushima.aichi.jp\0kasuga.fukuoka.jp\0" +"neat-url.com\0" +"tos.it\0" +"fentiger.mythic-beasts.com\0" +"nab\0" +"*.azurecontainer.io\0" +"drammen.no\0hdfcbank\0" +"tsurugashima.saitama.jp\0" +"seaport.museum\0" +"cc.in.us\0" +"auspost\0" +"nba\0localhost.daplie.me\0" +"school.nz\0" +"kaita.hiroshima.jp\0" +"\xe6\x9b\xb8\xe7\xb1\x8d\0tcp4.me\0" +"\xe7\xbd\x91\xe5\xba\x97\0" +"shichikashuku.miyagi.jp\0nakijin.okinawa.jp\0saitama.saitama.jp\0" +"fage\0" +"s3.cn-north-1.amazonaws.com.cn\0" +"guge\0" +"ar.it\0hikone.shiga.jp\0" +"stjohn.museum\0sakura\0" +"futbol\0msd\0" +"ivgu.no\0vestnes.no\0lib.tn.us\0altervista.org\0" +"komoro.nagano.jp\0" +"lur\xc3\xb8y.no\0" +"journalism.museum\0" +"b\xc3\xb8.nordland.no\0" +"barletta-trani-andria.it\0shimizu.hokkaido.jp\0" +"aarborte.no\0dvrdns.org\0" +"kainan.wakayama.jp\0dnsup.net\0" +"bargains\0" +"fj.cn\0" +"niiza.saitama.jp\0" +"gc.ca\0drive\0is-a-republican.com\0appspot.com\0" +"mtn\0" +"bt.it\0shiga.jp\0ikeda.gifu.jp\0wake.okayama.jp\0hino.tottori.jp\0fail\0" +"cloudcontrolapp.com\0" +"mtr\0" +"\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0nec\0mymailer.com.tw\0" +"itayanagi.aomori.jp\0" +"twmail.org\0" +"eu-west-1.elasticbeanstalk.com\0" +"df.leg.br\0" +"skjervoy.no\0" +"net\0priv.pl\0" +"cuisinella\0*.tst.site\0" +"new\0" +"shirosato.ibaraki.jp\0" +"trentinoalto-adige.it\0yashiro.hyogo.jp\0nfl\0eastasia.azurestaticapps.net\0" +"news.hu\0" +"um.gov.pl\0" +"gallery\0dontexist.com\0" +"brescia.it\0moriyama.shiga.jp\0klodzko.pl\0" +"1.bg\0" +"trentino-a-adige.it\0" +"jele.site\0" +"he.cn\0" +"bearalv\xc3\xa1hki.no\0cc.md.us\0" +"k12.nm.us\0ngo\0" +"mino.gifu.jp\0" +"dyn.ddnss.de\0" +"inf.mk\0aseral.no\0s\xc3\xb8rfold.no\0" +"\xd1\x80\xd1\x83\xd1\x81\0" +"priv.no\0" +"help\0" +"hn.cn\0" +"nhk\0" +"sera.hiroshima.jp\0miyada.nagano.jp\0" +"opensocial.site\0" +"contractors\0" +"shimofusa.chiba.jp\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0bookonline.app\0" +"silk\0" +"belluno.it\0noda.iwate.jp\0" +"shiroishi.saga.jp\0" +"*.vultrobjects.com\0" +"kv\xc3\xa6nangen.no\0fans\0" +"fujisato.akita.jp\0swatch\0edgecompute.app\0" +"naturalhistory.museum\0" +"moriguchi.osaka.jp\0" +"priv.me\0sina\0" +"iveland.no\0emerck\0" +"us.gov.pl\0" +"emp.br\0" +"yukuhashi.fukuoka.jp\0" +"ciencia.bo\0" +"yahaba.iwate.jp\0taiwa.miyagi.jp\0" +"cc.oh.us\0" +"tsubame.niigata.jp\0" +"kawanishi.yamagata.jp\0" +"beeldengeluid.museum\0" +"askoy.no\0" +"ap-northeast-3.elasticbeanstalk.com\0" +"asaka.saitama.jp\0from-ny.net\0" +"cc.pa.us\0" +"reggioemilia.it\0hakuba.nagano.jp\0" +"history.museum\0" +"oya.to\0" +"\xe7\x86\x8a\xe6\x9c\xac.jp\0" +"paderborn.museum\0" +"psc.br\0" +"g.bg\0" +"gitapp.si\0" +"neues.museum\0here\0" +"pvt.k12.ma.us\0" +"bibai.hokkaido.jp\0" +"farm\0" +"\xc3\xa1k\xc5\x8boluokta.no\0" +"massa-carrara.it\0" +"jelastic.dogado.eu\0" +"rr.leg.br\0" +"p.bg\0" +"toyama.jp\0tendo.yamagata.jp\0" +"crew.aero\0" +"takahama.fukui.jp\0mihama.mie.jp\0koto.shiga.jp\0shimonoseki.yamaguchi.jp\0" +"guru\0" +"ar.us\0" +"kui.hiroshima.jp\0nakano.nagano.jp\0" +"university.museum\0" +"y.bg\0n\xc3\xb8tter\xc3\xb8y.no\0loginline.io\0" +"fast\0""32-b.it\0" +"inf.ua\0" +"uk.eu.org\0" +"kasuga.hyogo.jp\0jgora.pl\0user.aseinet.ne.jp\0" +"agro.bo\0" +"toyako.hokkaido.jp\0" +"basel.museum\0linde\0" +"rs.leg.br\0sc.leg.br\0" +"gs.tr.no\0now\0zero\0" +"yoshikawa.saitama.jp\0" +"wa.gov.au\0from-ri.com\0" +"readmyblog.org\0" +"imizu.toyama.jp\0" +"medicina.bo\0ovre-eiker.no\0" +"kibichuo.okayama.jp\0" +"site\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0" +"londrina.br\0\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0" +"hughes\0" +"horokanai.hokkaido.jp\0" +"mo.cn\0" +"b.ssl.fastly.net\0" +"cv.ua\0" +"wolomin.pl\0" +"nra\0reserve-online.com\0" +"barsy.club\0" +"hino.tokyo.jp\0square7.net\0" +"vlaanderen.museum\0" +"s\xc3\xa1lat.no\0" +"latina.it\0" +"abo.pa\0obi\0" +"\xe7\xb5\x84\xe7\xbb\x87.hk\0marker.no\0" +"\xe5\xb2\xa9\xe6\x89\x8b.jp\0ostroda.pl\0" +"lancia\0" +"matsusaka.mie.jp\0" +"agrar.hu\0dnsiskinky.com\0myshopblocks.com\0" +"sokndal.no\0nrw\0from.marketing\0" +"myspreadshop.com.au\0" +"arakawa.saitama.jp\0" +"nishikata.tochigi.jp\0" +"s\xc3\xb8rreisa.no\0" +"zentsuji.kagawa.jp\0" +"\xd1\x81\xd1\x80\xd0\xb1\0" +"vall\xc3\xa9""edaoste.it\0yuki.ibaraki.jp\0" +"essex.museum\0" +"hikimi.shimane.jp\0" +"log.br\0" +"gon.pk\0fedorainfracloud.org\0app.os.fedoraproject.org\0" +"fujimi.nagano.jp\0" +"utsira.no\0" +"ntt\0" +"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0author\0" +"blogsite.xyz\0" +"\xe4\xba\xac\xe9\x83\xbd.jp\0oketo.hokkaido.jp\0" +"style\0" +"tksat.bo\0" +"kashima.ibaraki.jp\0" +"etc.br\0" +"omuta.fukuoka.jp\0" +"plc.co.im\0" +"rn.leg.br\0shiftcrypto.dev\0" +"homesecuritymac.com\0dd-dns.de\0" +"g\xc3\xa1\xc5\x8bgaviika.no\0" +"sicilia.it\0" +"coz.br\0cn-north-1.eb.amazonaws.com.cn\0" +"sling\0" +"kawagoe.mie.jp\0" +"golffan.us\0" +"osaki.miyagi.jp\0" +"omihachiman.shiga.jp\0" +"movie\0xfinity\0s3.us-east-2.amazonaws.com\0" +"nore-og-uvdal.no\0cc.ut.us\0\xe5\x9c\xa8\xe7\xba\xbf\0" +"localhistory.museum\0newhampshire.museum\0" +"grainger\0verisign\0" +"umb.it\0mo.it\0owani.aomori.jp\0cookingchannel\0" +"cable-modem.org\0" +"serveftp.net\0" +"transport.museum\0" +"ro.leg.br\0" +"evenassi.no\0" +"pug.it\0takamori.kumamoto.jp\0" +"off.ai\0appspaceusercontent.com\0tuleap-partners.com\0" +"arakawa.tokyo.jp\0kudamatsu.yamaguchi.jp\0" +"skype\0" +"mel\xc3\xb8y.no\0" +"jorpeland.no\0bamble.no\0r\xc3\xa1isa.no\0nyc\0travelers\0" +"arita.saga.jp\0hotmail\0" +"from-al.com\0" +"tickets.io\0" +"hanyu.saitama.jp\0" +"\xe5\xa8\xb1\xe4\xb9\x90\0" +"erni\0hlx3.page\0" +"mat.br\0curv.dev\0" +"gu.us\0bradesco\0" +"iijima.nagano.jp\0" +"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0" +"kasahara.gifu.jp\0kanzaki.saga.jp\0sopot.pl\0" +"omasvuotna.no\0associates\0" +"bergamo.it\0" +"vps.mcdir.ru\0" +"rennesoy.no\0" +"shonai.fukuoka.jp\0sharp\0" +"from-dc.com\0grozny.su\0" +"chtr.k12.ma.us\0" +"cologne\0dyn-berlin.de\0" +"eun.eg\0mosjoen.no\0" +"edu.eu.org\0" +"minamiechizen.fukui.jp\0kanna.gunma.jp\0" +"pages.dev\0" +"tingvoll.no\0" +"pc.it\0gsm.pl\0" +"paris\0" +"egyptian.museum\0shopitsite.com\0" +"ohira.miyagi.jp\0" +"schokoladen.museum\0" +"mx.na\0from-ar.com\0" +"shiraoi.hokkaido.jp\0kyotango.kyoto.jp\0urawa.saitama.jp\0legal\0" +"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0" +"maniwa.okayama.jp\0" +"eastcoast.museum\0" +"brumunddal.no\0repl.co\0" +"archaeology.museum\0ownprovider.com\0" +"\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" +"xbox\0" +"depot.museum\0" +"loan\0sener\0" +"matta-varjjat.no\0ilovecollege.info\0" +"pu.it\0ogata.akita.jp\0hanamigawa.chiba.jp\0" +"discovery.museum\0grozny.ru\0" +"soc.dz\0\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"loabat.no\0" +"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0" +"television.museum\0g.se\0one\0dnsdojo.com\0" +"\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0chirurgiens-dentistes-en-france.fr\0" +"ong\0" +"higashikurume.tokyo.jp\0kwpsp.gov.pl\0" +"app.br\0" +"naamesjevuemie.no\0" +"onl\0" +"in-vpn.de\0" +"schwarz\0" +"hotels\0upli.io\0" +"ikeda.osaka.jp\0bydgoszcz.pl\0" +"storj.farm\0" +"volda.no\0" +"nagano.nagano.jp\0yamatotakada.nara.jp\0" +"p.se\0lebtimnetz.de\0nyaa.am\0" +"mutual.ar\0" +"ekloges.cy\0" +"akdn\0jpmorgan\0" +"tr\xc3\xa6na.no\0taobao\0" +"ooo\0yachts\0" +"rg.it\0yoichi.hokkaido.jp\0iiyama.nagano.jp\0" +"tires\0definima.io\0" +"tokoname.aichi.jp\0higashitsuno.kochi.jp\0shinjo.yamagata.jp\0" +"research.museum\0y.se\0" +"andoy.no\0pymnt.uk\0" +"bostik\0recipes\0" +"det.br\0" +"lavagis.no\0" +"matsuda.kanagawa.jp\0" +"catholic.edu.au\0google\0" +"lib.ar.us\0" +"trentin-sued-tirol.it\0vall\xc3\xa9""e-d-aoste.it\0ny-1.paas.massivegrid.net\0" +"baltimore.museum\0" +"custom.metacentrum.cz\0" +"bolivia.bo\0co.events\0" +"tachikawa.tokyo.jp\0" +"kagoshima.jp\0" +"lv.ua\0realestate\0" +"civilaviation.aero\0" +"si.it\0" +"u2-local.xnbay.com\0" +"artanddesign.museum\0forsale\0vladimir.su\0" +"indigena.bo\0org\0" +"higashinaruse.akita.jp\0pc.pl\0" +"mesaverde.museum\0newspaper.museum\0pay\0mydatto.com\0" +"art.br\0" +"khmelnytskyi.ua\0scrysec.com\0" +"vennesla.no\0viking\0" +"sr.it\0" +"atlanta.museum\0" +"hashikami.aomori.jp\0loft\0" +"asso.fr\0" +"app.gp\0" +"tychy.pl\0" +"store.nf\0" +"mo.us\0" +"mydobiss.com\0" +"natural.bo\0" +"asso.gp\0kumakogen.ehime.jp\0koryo.nara.jp\0" +"se.leg.br\0" +"art.do\0" +"tt.im\0" +"xj.cn\0crown\0" +"translate.goog\0" +"nh.us\0" +"ud.it\0memset.net\0" +"syno-ds.de\0" +"art.dz\0\xe4\xbc\x81\xe4\xb8\x9a\0" +"soc.lk\0agdenes.no\0" +"yonaguni.okinawa.jp\0ott\0" +"vladimir.ru\0" +"asso.ht\0uji.kyoto.jp\0" +"ato.br\0" +"himeji.hyogo.jp\0agro.pl\0" +"discover\0" +"no-ip.info\0" +"mashike.hokkaido.jp\0wielun.pl\0" +"community\0bplaced.de\0" +"from.hr\0" +"twmail.cc\0" +"watari.miyagi.jp\0konin.pl\0pet\0" +"is-a-libertarian.com\0" +"ovh\0" +"skin\0" +"abbott\0" +"asso.bj\0boston\0" +"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" +"suedtirol.it\0" +"badajoz.museum\0glas.museum\0" +"profesional.bo\0lib.fl.us\0parts\0" +"wallonie.museum\0property\0" +"media.aero\0production.aero\0vindafjord.no\0" +"laquila.it\0" +"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0party\0" +"teo.br\0" +"homeoffice.gov.uk\0" +"yamagata.jp\0tako.chiba.jp\0" +"asso.ci\0pl.ua\0" +"salangen.no\0" +"kamitsue.oita.jp\0" +"timekeeping.museum\0" +"engine.aero\0" +"phd\0" +"philadelphia.museum\0s3.dualstack.us-east-1.amazonaws.com\0" +"championship.aero\0cahcesuolo.no\0photos\0" +"art.ht\0minamiuonuma.niigata.jp\0gehirn.ne.jp\0" +"kristiansund.no\0gotdns.org\0" +"anan.tokushima.jp\0democrat\0" +"pages.it.hs-heilbronn.de\0" +"pid\0" +"marburg.museum\0" +"inazawa.aichi.jp\0oshino.yamanashi.jp\0\xe5\x98\x89\xe9\x87\x8c\0" +"schools.nsw.edu.au\0cloudcontrolled.com\0" +"poker\0" +"afjord.no\0verdal.no\0" +"fukui.jp\0okuma.fukushima.jp\0tirol\0" +"s3-us-west-1.amazonaws.com\0murmansk.su\0stackhero-network.com\0" +"asso.dz\0pin\0nyc.mn\0" +"cya.gg\0" +"mediocampidano.it\0fukuyama.hiroshima.jp\0" +"elementor.cool\0" +"brand.se\0" +"koori.fukushima.jp\0ninomiya.kanagawa.jp\0ic.gov.pl\0cool\0" +"coop\0" +"newmexico.museum\0meteorapp.com\0" +"miniserver.com\0bounty-full.com\0novecore.site\0" +"ringerike.no\0" +"\xe9\x9d\x92\xe6\xa3\xae.jp\0" +"vf.no\0" +"comunica\xc3\xa7\xc3\xb5""es.museum\0store.ve\0" +"gamvik.no\0kvafjord.no\0" +"savona.it\0" +"scotland.museum\0est-le-patron.com\0" +"ba.leg.br\0" +"sigdal.no\0works\0" +"misaki.osaka.jp\0world\0" +"newjersey.museum\0" +"voagat.no\0panasonic\0" +"tohnosho.chiba.jp\0saito.miyazaki.jp\0" +"school.za\0s3-eu-west-3.amazonaws.com\0betainabox.com\0" +"shirako.chiba.jp\0" +"wanggou\0s3.dualstack.ap-southeast-1.amazonaws.com\0" +"supplies\0" +"crimea.ua\0" +"url.tw\0" +"matsumae.hokkaido.jp\0" +"app.lmpm.com\0" +"rec.br\0" +"trentino-sud-tirol.it\0pescara.it\0" +"ltd.co.im\0" +"onojo.fukuoka.jp\0futaba.fukushima.jp\0" +"onga.fukuoka.jp\0" +"contemporaryart.museum\0\xe6\x94\xbf\xe5\x8a\xa1\0" +"rec.co\0pnc\0is-saved.org\0" +"wajima.ishikawa.jp\0" +"otsuki.kochi.jp\0nakaniikawa.toyama.jp\0uni5.net\0" +"cadaques.museum\0surgery\0eu.com\0" +"samegawa.fukushima.jp\0tochio.niigata.jp\0\xd1\x83\xd0\xba\xd1\x80\0" +"higashikawa.hokkaido.jp\0nozawaonsen.nagano.jp\0" +"onfabrica.com\0" +"iris.arpa\0" +"fla.no\0" +"glass.museum\0" +"ravendb.run\0" +"aaa.pro\0" +"chiyoda.tokyo.jp\0art.pl\0" +"store.ro\0" +"misato.wakayama.jp\0" +"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0kyoto\0" +"tempio-olbia.it\0" +"clinton.museum\0" +"hgtv\0" +"exchange.aero\0" +"phone\0merseine.nu\0" +"berg.no\0" +"balsan-sudtirol.it\0\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0" +"mypi.co\0" +"store.st\0" +"gunma.jp\0toho.fukuoka.jp\0yuzawa.niigata.jp\0" +"love\0" +"\xc3\xa1lt\xc3\xa1.no\0" +"*.webhare.dev\0" +"seranishi.hiroshima.jp\0koka.shiga.jp\0lublin.pl\0" +"us.com\0" +"torsken.no\0pro\0selfip.info\0" +"taira.toyama.jp\0" +"s3.eu-west-2.amazonaws.com\0s3-website.eu-central-1.amazonaws.com\0\xd1\x81\xd0\xbe\xd1\x87\xd0\xb8.\xd1\x80\xd1\x83\xd1\x81\0" +"rocks\0" +"jogasz.hu\0usgarden.museum\0pru\0s3-website.eu-west-2.amazonaws.com\0" +"art.sn\0" +"kirkenes.no\0" +"komvux.se\0infiniti\0" +"s\xc3\xb8r-odal.no\0" +"gosen.niigata.jp\0" +"bentley\0" +"kvanangen.no\0" +"kumejima.okinawa.jp\0" +"am.leg.br\0" +"lib.mi.us\0" +"rel.ht\0" +"interactive.museum\0home-webserver.de\0temp-dns.com\0" +"avellino.it\0shakotan.hokkaido.jp\0\xeb\x8b\xb7\xec\xbb\xb4\0*.firenet.ch\0" +"kamiamakusa.kumamoto.jp\0konan.shiga.jp\0" +"hlx.page\0" +"es.gov.br\0pub\0" +"\xe8\xb0\xb7\xe6\xad\x8c\0" +"airtel\0" +"oldnavy\0giize.com\0" +"fauske.no\0k12.ca.us\0lugs.org.uk\0" +"mitane.akita.jp\0" +"\xe9\xa3\x9f\xe5\x93\x81\0" +"maison\0" +"skydiving.aero\0" +"iwafune.tochigi.jp\0" +"fineart.museum\0media\0est-mon-blogueur.com\0" +"nsw.edu.au\0" +"asso.re\0tbits.me\0" +"k12.ct.us\0" +"berlin.museum\0" +"katsuragi.nara.jp\0" +"exeter.museum\0" +"pwc\0" +"botany.museum\0is-a-doctor.com\0" +"higashi.fukushima.jp\0setagaya.tokyo.jp\0build\0" +"photo\0" +"tanohata.iwate.jp\0" +"from-mo.com\0" +"notodden.no\0" +"kashiwara.osaka.jp\0" +"is-an-accountant.com\0" +"barsyonline.co.uk\0" +"ally\0s3.dualstack.eu-west-2.amazonaws.com\0synology-ds.de\0" +"forli-cesena.it\0map.fastly.net\0" +"building.museum\0" +"rec.nf\0" +"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0harstad.no\0" +"milan.it\0saga.jp\0kawai.nara.jp\0de.trendhosting.cloud\0" +"charter.aero\0" +"mol.it\0" +"steinkjer.no\0" +"atl.jelastic.vps-host.net\0" +"kep.tr\0" +"kitanakagusuku.okinawa.jp\0" +"square.museum\0" +"deatnu.no\0" +"ap.leg.br\0" +"tomakomai.hokkaido.jp\0kizu.kyoto.jp\0hamamatsu.shizuoka.jp\0" +"usculture.museum\0" +"asso.nc\0" +"from-co.net\0" +"ryukyu\0" +"modena.it\0ikoma.nara.jp\0" +"funabashi.chiba.jp\0nishiarita.saga.jp\0" +"yamazoe.nara.jp\0" +"imb.br\0" +"yokawa.hyogo.jp\0" +"mihama.wakayama.jp\0" +"s3-website-ap-southeast-2.amazonaws.com\0" +"higashichichibu.saitama.jp\0rel.pl\0babia-gora.pl\0" +"filegear-au.me\0" +"naples.it\0asahi.chiba.jp\0" +"guernsey.museum\0and.mom\0" +"schaeffler\0" +"vega.no\0serveftp.org\0" +"catanzaro.it\0" +"vercelli.it\0kamikawa.hokkaido.jp\0" +"vic.edu.au\0drayddns.com\0gotpantheon.com\0" +"rodeo\0" +"tado.mie.jp\0" +"rec.ro\0" +"vibovalentia.it\0sodegaura.chiba.jp\0itakura.gunma.jp\0" +"exhibition.museum\0shangrila\0" +"ind.br\0" +"stargard.pl\0" +"clock.museum\0ryd.wafaicloud.com\0" +"terni.it\0kiryu.gunma.jp\0inami.toyama.jp\0website.yandexcloud.net\0" +"cymru.museum\0" +"gaular.no\0" +"noda.chiba.jp\0ikusaka.nagano.jp\0" +"\xd0\xbc\xd1\x81\xd0\xba.\xd1\x80\xd1\x83\xd1\x81\0" +"flickr\0" +"kaisei.kanagawa.jp\0ric.jelastic.vps-host.net\0" "k12.il.us\0" -"edu.gn\0" -"tank.museum\0" -"edu.gp\0" -"airtraffic.aero\0s3.us-east-2.amazonaws.com\0" -"edu.gr\0" -"edu.gt\0zhytomyr.ua\0" -"edu.gu\0" -"man\0mel.cloudlets.com.au\0" -"edu.gy\0gateway.museum\0ye\0map\0vlaanderen\0" -"mba\0quest\0" -"edu.hk\0" -"nozawaonsen.nagano.jp\0miyake.nara.jp\0" -"edu.hn\0" -"kiho.mie.jp\0architecture.museum\0" -"donetsk.ua\0" -"int.ar\0k.bg\0granvin.no\0" -"safe\0" -"edu.ht\0dyndns-at-work.com\0" -"nike\0" -"comunica\xc3\xa7\xc3\xb5""es.museum\0yt\0" -"tselinograd.su\0" -"int.az\0" -"kasaoka.okayama.jp\0" -"saitama.saitama.jp\0" -"edu.in\0" -"int.bo\0bizen.okayama.jp\0" -"s3-sa-east-1.amazonaws.com\0" -"edu.iq\0zm\0" -"hockey\0" -"edu.is\0from-fl.com\0hopto.org\0" -"edu.it\0" -"int.ci\0surgery\0" -"bhz.br\0" -"zw\0" -"*.jm\0ltd\0" -"int.co\0edu.jo\0" -"chiryu.aichi.jp\0" -"ce.gov.br\0konyvelo.hu\0" +"koshimizu.hokkaido.jp\0mydissent.net\0" +"eu-central-1.elasticbeanstalk.com\0dyndns-at-work.com\0ditchyourip.com\0" +"huissier-justice.fr\0" +"flowers\0" +"miyama.mie.jp\0bip.sh\0" +"per.la\0is-a-bulls-fan.com\0" +"virgin\0" +"lib.sd.us\0" +"hirokawa.fukuoka.jp\0" +"traniandriabarletta.it\0\xe5\xae\xae\xe5\xb4\x8e.jp\0" +"store.bb\0" +"union.aero\0" +"kijo.miyazaki.jp\0" +"riik.ee\0asso.km\0us-west-2.elasticbeanstalk.com\0" +"verm\xc3\xb6gensberater\0" +"tlon.network\0" +"ohira.tochigi.jp\0" +"dubai\0lipsy\0" +"narashino.chiba.jp\0" +"rec.ve\0" +"heguri.nara.jp\0" +"salzburg.museum\0cymru\0" +"*.stolos.io\0" +"\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0" +"h\xc3\xb8ylandet.no\0" +"bandai.fukushima.jp\0amex\0" +"furniture.museum\0" +"per.nf\0" +"asso.mc\0cc.il.us\0" +"perugia.it\0" +"udi.br\0" +"selbu.no\0" +"ag.it\0*.sendai.jp\0" +"county.museum\0dyn-ip24.de\0pagexl.com\0" +"torino.it\0tamano.okayama.jp\0przeworsk.pl\0weatherchannel\0" +"children.museum\0wbq.me\0" +"skierva.no\0store.dk\0" +"kamakura.kanagawa.jp\0kiyama.saga.jp\0gliwice.pl\0" +"figueres.museum\0" +"ind.gt\0higashiyama.kyoto.jp\0" +"stavanger.no\0official.ec\0" +"ap.it\0" +"enna.it\0" +"s3-website.ap-south-1.amazonaws.com\0" +"valle-d-aosta.it\0" +"phoenix.museum\0gentlentapis.com\0" +"lel.br\0cci.fr\0" +"fosnes.no\0" +"bi.it\0oumu.hokkaido.jp\0boleslawiec.pl\0" +"*.yokohama.jp\0" +"illustration.museum\0*.customer-oci.com\0" +"ind.in\0" +"educator.aero\0lib.vi.us\0bloomberg\0" +"kozaki.chiba.jp\0nahari.kochi.jp\0ranzan.saitama.jp\0" +"minamitane.kagoshima.jp\0" +"sa.edu.au\0myjino.ru\0" +"br.it\0cb.it\0shizukuishi.iwate.jp\0" +"circus.museum\0" +"red\0" +"ciscofreak.com\0" +"maif\0" +"k12.la.us\0" +"naumburg.museum\0adobeaemcloud.com\0" +"ren\0" +"dyr\xc3\xb8y.no\0" +"kawara.fukuoka.jp\0" +"thingdustdata.com\0" +"\xe5\x95\x86\xe5\x9f\x8e\0" +"gs.of.no\0" +"\xc3\xa5seral.no\0per.sg\0cc.ky.us\0" +"shiranuka.hokkaido.jp\0" +"ind.kw\0nannestad.no\0k12.md.us\0knightpoint.systems\0" +"ct.it\0saka.hiroshima.jp\0" +"miners.museum\0" +"\xe9\xa6\x99\xe6\xb8\xaf\0" +"hachinohe.aomori.jp\0anan.nagano.jp\0diadem.cloud\0" +"fortmissoula.museum\0" +"gs.cn\0" +"lund.no\0" +"tatebayashi.gunma.jp\0hita.oita.jp\0kaminokawa.tochigi.jp\0se.net\0ru.net\0" +"ro.eu.org\0" +"valleeaoste.it\0tokashiki.okinawa.jp\0" +"eu-west-3.elasticbeanstalk.com\0" +"kalisz.pl\0" +"stockholm.museum\0" +"8.bg\0ufcfan.org\0" +"forex\0" +"hl.cn\0" +"tana.no\0" +"kitagata.gifu.jp\0omg.lol\0" +"historyofscience.museum\0naval.museum\0" +"k12.mn.us\0" +"katashina.gunma.jp\0ohda.shimane.jp\0" +"*.0emm.com\0" +"2038.io\0" +"kiyosu.aichi.jp\0noboribetsu.hokkaido.jp\0ichikawamisato.yamanashi.jp\0sko.gov.pl\0" +"landes.museum\0msk.ru\0" +"ynh.fr\0" +"is-very-nice.org\0" +"gifu.gifu.jp\0geisei.kochi.jp\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0" +"cc.mt.us\0cc.nd.us\0boxfuse.io\0" +"nishikawa.yamagata.jp\0" +"folldal.no\0" +"roma.it\0asahikawa.hokkaido.jp\0ril\0" +"sydney.museum\0" +"manaus.br\0" +"rio\0" +"rip\0" +"edgestack.me\0msk.su\0" +"training\0" +"miyazaki.jp\0nara.nara.jp\0" +"cc.nm.us\0" +"miyazaki.miyazaki.jp\0" +"incheon.kr\0" +"trentino-suedtirol.it\0" +"*.cloudera.site\0" +"kumiyama.kyoto.jp\0" +"vana\0townnews-staging.com\0" +"trentinosudtirol.it\0bozen-sudtirol.it\0" +"cc.nv.us\0" +"sar.it\0kurume.fukuoka.jp\0" +"onza.mythic-beasts.com\0" +"si.eu.org\0" +"lib.ee\0imageandsound.museum\0zhytomyr.ua\0" +"eng.br\0" +"orskog.no\0koobin.events\0" +"does-it.net\0" +"collection.museum\0myactivedirectory.com\0" +"equipment.aero\0gs.rl.no\0copro.uk\0" +"support\0" +"shinyoshitomi.fukuoka.jp\0shimizu.shizuoka.jp\0*.on-rancher.cloud\0" +"education\0" +"\xe9\x95\xb7\xe5\xb4\x8e.jp\0ainan.ehime.jp\0chuo.yamanashi.jp\0" +"oharu.aichi.jp\0" +"e.bg\0rissa.no\0" +"gojome.akita.jp\0gniezno.pl\0" +"ip6.arpa\0nfshost.com\0" +"hareid.no\0" +"hashimoto.wakayama.jp\0" +"studio\0mypets.ws\0" +"nishiaizu.fukushima.jp\0" +"cbg.ru\0" +"arts.co\0" +"honjo.saitama.jp\0shibuya.tokyo.jp\0" +"n.bg\0" +"kuromatsunai.hokkaido.jp\0kiyose.tokyo.jp\0nysa.pl\0\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0" +"kharkov.ua\0est-a-la-maison.com\0" +"rollag.no\0" +"\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0" +"pacific.museum\0" +"certmgr.org\0" +"meinforum.net\0" +"data\0" +"ind.tn\0" +"w.bg\0" +"date\0" +"flight.aero\0fr\xc3\xb8ya.no\0glug.org.uk\0" +"nagai.yamagata.jp\0" +"cisco\0sk.eu.org\0" +"kisosaki.mie.jp\0kadena.okinawa.jp\0" +"agriculture.museum\0" +"lecco.it\0" +"md.ci\0" +"sncf\0" +"bananarepublic\0independent-inquiry.uk\0" +"video.hu\0from-hi.com\0" +"omura.nagasaki.jp\0" +"ethnology.museum\0ck.ua\0" +"press.aero\0" +"muroran.hokkaido.jp\0" +"science-fiction.museum\0" +"my-firewall.org\0" +"komaki.aichi.jp\0kumagaya.saitama.jp\0" +"ma.gov.br\0" +"clerk.app\0" +"nf.ca\0energy\0" +"annaka.gunma.jp\0" +"bale.museum\0servehumour.com\0" +"kinder\0" +"lapy.pl\0sap\0" +"wafflecell.com\0" +"sas\0" +"ishikari.hokkaido.jp\0" +"chattanooga.museum\0sbi\0" +"trainer.aero\0ct.us\0" +"iglesiascarbonia.it\0" +"gol.no\0" +"sca\0\xe9\xa4\x90\xe5\x8e\x85\0" +"scb\0" +"sbs\0\xe5\x81\xa5\xe5\xba\xb7\0" +"hanno.saitama.jp\0haibara.shizuoka.jp\0" +"hl.no\0ee.eu.org\0" +"kumatori.osaka.jp\0warmia.pl\0" +"hemne.no\0ru.eu.org\0se.eu.org\0" +"urayasu.chiba.jp\0takata.fukuoka.jp\0" +"fh.se\0" +"supabase.in\0" +"jp.kg\0" +"tama.tokyo.jp\0" +"roma.museum\0traeumtgerade.de\0" +"uda.nara.jp\0" +"diskstation.me\0" +"nx.cn\0" +"tjome.no\0" +"shibukawa.gunma.jp\0" +"in.na\0mcpe.me\0" +"kr.it\0shell\0" +"oz.au\0" +"ebino.miyazaki.jp\0" +"in.ni\0" +"b\xc3\xb8mlo.no\0\xe6\x96\xb0\xe9\x97\xbb\0" +"yatomi.aichi.jp\0nishihara.kumamoto.jp\0izumisano.osaka.jp\0" +"alabama.museum\0diskstation.eu\0" +"yoshimi.saitama.jp\0" +"flekkefjord.no\0c.cdn77.org\0wellbeingzone.co.uk\0" +"jp.md\0" +"cambridge.museum\0gorge.museum\0" +"run\0" +"kepno.pl\0" +"natuurwetenschappen.museum\0sevastopol.ua\0" +"ses\0" +"boutir.com\0" +"namsskogan.no\0sew\0" +"oguni.kumamoto.jp\0sex\0" +"qc.ca\0" +"k12.ut.us\0" +"lt.it\0" +"asaminami.hiroshima.jp\0kamikawa.hyogo.jp\0misato.miyagi.jp\0toyama.toyama.jp\0" +"technology.museum\0dnsalias.com\0" +"sfr\0" +"\xc3\xa5snes.no\0" +"rwe\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0" +"yame.fukuoka.jp\0cloudjiffy.net\0" +"forum\0" +"ga.us\0" +"losangeles.museum\0sanofi\0" +"ntr.br\0" +"nes.akershus.no\0" +"kindle\0" +"sld.do\0shw.io\0" +"\xe6\xbb\x8b\xe8\xb3\x80.jp\0" +"arts.ve\0customer.mythic-beasts.com\0" +"nonoichi.ishikawa.jp\0keliweb.cloud\0" +"kawaba.gunma.jp\0" +"freiburg.museum\0" +"*.backyards.banzaicloud.io\0" +"wakasa.fukui.jp\0date.fukushima.jp\0" +"doomdns.com\0" +"direct\0" +"odesa.ua\0sa-east-1.elasticbeanstalk.com\0*.triton.zone\0" +"cc.vt.us\0apartments\0" +"jed.wafaicloud.com\0" +"os.hedmark.no\0in.rs\0noticeable.news\0" +"no.it\0\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0iwamizawa.hokkaido.jp\0nomi.ishikawa.jp\0takaoka.toyama.jp\0" +"cloudns.asia\0is-a-caterer.com\0" +"supabase.co\0" +"garden.museum\0community-pro.de\0" +"friuli-vegiulia.it\0" +"in-addr.arpa\0app.render.com\0" +"\xe5\xa4\xa7\xe6\x8b\xbf\0" +"arai.shizuoka.jp\0moonscale.net\0" +"communications.museum\0" +"in.th\0" +"geekgalaxy.com\0" +"\xe5\x8f\xb0\xe6\xb9\xbe\0" +"tranby.no\0joburg\0" +"cc.wv.us\0" +"in.ua\0ski\0" +"pa.it\0moriyoshi.akita.jp\0" +"akrehamn.no\0" +"abashiri.hokkaido.jp\0gotemba.shizuoka.jp\0ecommerce-shop.pl\0" +"is-a-conservative.com\0" +"laakesvuemie.no\0panel.gg\0" +"sukagawa.fukushima.jp\0ostrowiec.pl\0" +"can.museum\0praxi\0" +"honefoss.no\0" +"!city.sendai.jp\0" +"naturalsciences.museum\0preservation.museum\0sky\0" +"in.us\0" +"koshigaya.saitama.jp\0" +"r\xc3\xa6lingen.no\0arts.ro\0" +"shichinohe.aomori.jp\0yaizu.shizuoka.jp\0" +"halloffame.museum\0no-ip.ca\0" +"kosher\0" +"iruma.saitama.jp\0" +"aukra.no\0" +"tosu.saga.jp\0" +"m\xc4\x81ori.nz\0" +"takatsuki.osaka.jp\0yasugi.shimane.jp\0" +"e.se\0yombo.me\0" +"tagawa.fukuoka.jp\0" +"toyoake.aichi.jp\0" +"southwest.museum\0" +"sandnes.no\0arvo.network\0" +"jobs\0" +"yamato.fukushima.jp\0" +"n.se\0lifeinsurance\0yolasite.com\0" +"health.nz\0" +"olsztyn.pl\0trust\0" +"fam.pk\0fedorapeople.org\0" +"kr.ua\0" +"dvrcam.info\0" +"re.it\0" +"cleaning\0" +"togane.chiba.jp\0naruto.tokushima.jp\0stalowa-wola.pl\0memorial\0" +"bristol.museum\0military.museum\0w.se\0spa\0" +"medio-campidano.it\0seiro.niigata.jp\0" +"arts.nf\0" +"seirou.niigata.jp\0" +"sciencehistory.museum\0soy\0from-oh.com\0in-dsl.de\0" +"mar.it\0rn.it\0" +"fujisawa.iwate.jp\0himeshima.oita.jp\0ryokami.saitama.jp\0" +"za.com\0" +"tab\0" +"is-very-bad.org\0" +"piedmont.it\0musashimurayama.tokyo.jp\0" +"khakassia.su\0" +"industries\0" +"tsuno.miyazaki.jp\0dev.static.land\0" +"press.museum\0lt.ua\0" +"re.kr\0maori.nz\0" +"lardal.no\0marketing\0" +"kamikoani.akita.jp\0seihi.nagasaki.jp\0kouhoku.saga.jp\0czest.pl\0" +"tcm.museum\0degree\0is-a-blogger.com\0" +"numata.gunma.jp\0inagawa.hyogo.jp\0" +"schweiz.museum\0" +"patria.bo\0halsa.no\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0" +"minamifurano.hokkaido.jp\0sakyo.kyoto.jp\0tax\0" +"sherbrooke.museum\0" +"md.us\0" +"sp.it\0srl\0" +"\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0" +"v\xc3\xa5ler.\xc3\xb8stfold.no\0" +"saroma.hokkaido.jp\0higashiosaka.osaka.jp\0" +"culture.museum\0dnshome.de\0u2.xnbay.com\0" +"review\0" +"itano.tokushima.jp\0podzone.net\0jele.cloud\0" +"sld.pa\0" +"sweetpepper.org\0" +"ito.shizuoka.jp\0" +"tci\0" +"warabi.saitama.jp\0" +"*.hosting.myjino.ru\0" +"ce.leg.br\0" +"stc\0" +"amami.kagoshima.jp\0" +"skedsmo.no\0songdalen.no\0" +"tsukui.kanagawa.jp\0es-1.axarnet.cloud\0" +"uk.com\0" +"alstahaug.no\0gjerstad.no\0tdk\0" +"tr.it\0hatoyama.saitama.jp\0" +"reklam.hu\0" +"amazon\0weber\0" +"citic\0" +"kafjord.no\0cn.eu.org\0" +"hakui.ishikawa.jp\0tel\0" +"moma.museum\0aetna\0fujitsu\0" +"trentinsued-tirol.it\0ritto.shiga.jp\0" +"sohu\0" +"starostwo.gov.pl\0" +"xz.cn\0health.vn\0playstation\0" +"fujisawa.kanagawa.jp\0" +"g\xc3\xa1ls\xc3\xa1.no\0v\xc3\xa5gan.no\0oh.us\0" +"nogi.tochigi.jp\0" +"dr\xc3\xb8""bak.no\0uk.kg\0" +"tree.museum\0authgear-staging.com\0" +"*.compute.amazonaws.com.cn\0" +"horten.no\0" +"fukuoka.jp\0" +"medizinhistorisches.museum\0" +"pa.us\0dclk\0" +"nara.jp\0" +"ushistory.museum\0dynvpn.de\0" +"comsec\0cruises\0tuxfamily.org\0" +"futtsu.chiba.jp\0zao.miyagi.jp\0" +"pramerica\0" +"thd\0" +"authgearapps.com\0" +"leirvik.no\0galsa.no\0" +"sakurai.nara.jp\0" +"ipiranga\0" +"vix.br\0" +"bjerkreim.no\0sandvik\0" +"vv.it\0komae.tokyo.jp\0gmina.pl\0" +"h\xc3\xa1mm\xc3\xa1rfeasta.no\0" +"guam.gu\0" +"yokaichiba.chiba.jp\0" +"annefrank.museum\0" +"tr.no\0" +"padova.it\0" +"pioneer\0" +"andebu.no\0frei.no\0lerdal.no\0" +"tosa.kochi.jp\0" +"santoandre.br\0" +"nakatombetsu.hokkaido.jp\0kamisato.saitama.jp\0" +"ddnsgeek.com\0" +"better-than.tv\0" +"gran.no\0" +"pesarourbino.it\0vibo-valentia.it\0shinichi.hiroshima.jp\0" +"otaki.nagano.jp\0uonuma.niigata.jp\0" +"zaporizhzhia.ua\0" +"\xe3\x82\xa2\xe3\x83\x9e\xe3\x82\xbe\xe3\x83\xb3\0" +"achi.nagano.jp\0kunisaki.oita.jp\0sos.pl\0" +"science.museum\0" +"\xc3\xa5rdal.no\0song\0" +"byen.site\0" +"sogndal.no\0cy.eu.org\0couchpotatofries.org\0" +"nanao.ishikawa.jp\0wajiki.tokushima.jp\0tjx\0" +"catering.aero\0" +"sasayama.hyogo.jp\0" +"jfk.museum\0" +"calvinklein\0" +"iwama.ibaraki.jp\0" +"versailles.museum\0sony\0" +"szkola.pl\0" +"finnoy.no\0editorx.io\0" +"choshi.chiba.jp\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0cdn-edges.net\0" +"partners\0" +"komforb.se\0" +"shoo.okayama.jp\0" +"music.museum\0\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0" +"mg.gov.br\0" +"council.aero\0stathelle.no\0baidar.no\0cz.eu.org\0" +"travelchannel\0" +"ingatlan.hu\0" +"www.ro\0" +"yorii.saitama.jp\0" +"missile.museum\0" +"lib.ia.us\0" +"marche.it\0\xe7\xa6\x8f\xe5\xb3\xb6.jp\0" +"nordreisa.no\0sondre-land.no\0" +"baidu\0" +"sor-odal.no\0" +"kyoto.jp\0" +"hole.no\0" +"kawanabe.kagoshima.jp\0arao.kumamoto.jp\0" +"dyndns1.de\0h\xc3\xa4kkinen.fi\0" +"nikon\0" +"vegas\0" +"dk.eu.org\0" +"bulsan-s\xc3\xbc""dtirol.it\0chita.aichi.jp\0it1.eur.aruba.jenv-aruba.cloud\0" +"click\0" +"eniwa.hokkaido.jp\0kawatana.nagasaki.jp\0" +"stuttgart.museum\0" +"malopolska.pl\0top\0" +"blackfriday\0ltda\0" +"rahkkeravju.no\0\xe7\x82\xb9\xe7\x9c\x8b\0" +"corvette.museum\0" +"nes.buskerud.no\0k12.al.us\0" +"usa.oita.jp\0*.hosting.ovh.net\0" +"from-ok.com\0familyds.com\0" +"servequake.com\0" +"servers.run\0" +"jcloud-ver-jpc.ik-server.com\0" +"aure.no\0" +"kitahiroshima.hokkaido.jp\0" +"unzen.nagasaki.jp\0karasuyama.tochigi.jp\0" +"apigee.io\0" +"oristano.it\0wakayama.wakayama.jp\0" +"oceanographique.museum\0amscompute.com\0serveftp.com\0" +"revista.bo\0" +"higashiizumo.shimane.jp\0" +"fitness\0" +"ut.us\0" +"myds.me\0" +"isla.pr\0" +"v\xc3\xa5ler.hedmark.no\0" +"odate.akita.jp\0yashio.saitama.jp\0atm.pl\0" +"cc.al.us\0ubs\0" +"shobara.hiroshima.jp\0chuo.osaka.jp\0" +"trv\0" +"de.eu.org\0" +"karuizawa.nagano.jp\0" +"temasek\0" +"frosinone.it\0" +"yonago.tottori.jp\0" +"alta.no\0" +"mobi.gp\0kamishihoro.hokkaido.jp\0kamisunagawa.hokkaido.jp\0" +"jambyl.su\0" +"bmd.br\0" +"brussels\0" +"trentino-alto-adige.it\0jc.neen.it\0zakopane.pl\0" +"gallery.museum\0" +"shikama.miyagi.jp\0" +"sanfrancisco.museum\0" +"capetown\0" +"uruma.okinawa.jp\0" +"knx-server.net\0jls-sto2.elastx.net\0" +"gyeonggi.kr\0nowtv\0" +"alesund.no\0*.usercontent.goog\0" +"kagamino.okayama.jp\0" +"monticello.museum\0tui\0" +"res.in\0" +"cooperativa.bo\0" +"mizunami.gifu.jp\0hatsukaichi.hiroshima.jp\0aus.basketball\0" +"baghdad.museum\0" +"dsmynas.org\0" +"urown.cloud\0" +"jewelry.museum\0mckinsey\0issmarterthanyou.com\0" +"selfip.net\0" +"maserati\0" +"creditunion\0" +"gausdal.no\0sula.no\0" +"intuit\0" +"gs.fm.no\0lib.mn.us\0" +"tjmaxx\0" +"tvs\0" +"privatizehealthinsurance.net\0" +"clinique\0s3-website-sa-east-1.amazonaws.com\0" +"\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0cloudns.biz\0" +"kawakita.ishikawa.jp\0" "chesapeakebay.museum\0" -"tochio.niigata.jp\0" -"dnsalias.net\0" -"blogspot.co.id\0" -"modalen.no\0" -"edu.kg\0" -"*.kh\0meraker.no\0aetna\0yamaxun\0" -"edu.ki\0fedorainfracloud.org\0" -"able\0flights\0" -"virtueeldomein.nl\0hra.health\0" -"edu.km\0med\0blogspot.co.il\0" -"edu.kn\0" -"nuoro.it\0" -"isernia.it\0edu.kp\0masfjorden.no\0" -"edu.la\0mosvik.no\0" +"volyn.ua\0" +"go.leg.br\0" +"happou.akita.jp\0ichikawa.chiba.jp\0ouchi.saga.jp\0" +"hadsel.no\0" +"hyundai\0" +"koshu.yamanashi.jp\0" +"wpmucdn.com\0" +"academia.bo\0" +"yakage.okayama.jp\0jelenia-gora.pl\0" +"andasuolo.no\0bnpparibas\0" +"kurate.fukuoka.jp\0ota.tokyo.jp\0eu.platform.sh\0" +"\xe5\x8f\xb0\xe7\x81\xa3\0" +"barcelona.museum\0" +"green\0" +"edu.ac\0sorreisa.no\0" +"trentinsuedtirol.it\0isahaya.nagasaki.jp\0" +"edu.af\0" +"basicserver.io\0" +"edu.al\0togo.aichi.jp\0kounosu.saitama.jp\0beskidy.pl\0" +"george\0s3-eu-central-1.amazonaws.com\0reservd.com\0" +"leka.no\0valle.no\0" +"kosaka.akita.jp\0udono.mie.jp\0mamurogawa.yamagata.jp\0" +"edu.ba\0mad.museum\0eurodir.ru\0" +"edu.ar\0edu.bb\0" +"dynamic-dns.info\0" +"akishima.tokyo.jp\0" +"edu.au\0unusualperson.com\0prequalifyme.today\0" +"sor-fron.no\0" +"edu.bh\0ina.nagano.jp\0poznan.pl\0" +"edu.bi\0" +"edu.az\0" +"coop.ht\0football\0" +"edu.bm\0england.museum\0internet-dns.de\0" +"edu.bn\0" +"edu.bo\0homes\0ca.eu.org\0" +"limited\0" +"contemporary.museum\0dattorelay.com\0" +"edu.br\0" +"edu.bs\0" +"edu.bt\0niihama.ehime.jp\0telebit.app\0" +"geology.museum\0washingtondc.museum\0camera\0" +"senasa.ar\0kiwi.nz\0" +"tateshina.nagano.jp\0hokuto.yamanashi.jp\0" +"edu.ci\0community.museum\0" +"coop.ar\0edu.bz\0" +"mytuleap.com\0*.platformsh.site\0xs4all.space\0" +"edu.cn\0" +"res.aero\0edu.co\0" +"convent.museum\0settlement.museum\0" +"deal\0" +"edu.cu\0" +"curitiba.br\0edu.cv\0" +"edu.cw\0v\xc3\xa5gs\xc3\xb8y.no\0hzc.io\0" +"spot\0" +"bharti\0" +"coop.br\0" +"calabria.it\0midori.gunma.jp\0" +"edu.dm\0" +"edu.do\0blogsite.org\0" +"tohma.hokkaido.jp\0ujiie.tochigi.jp\0fiat\0" +"*.oci.customer-oci.com\0barsy.menu\0" +"edu.ec\0" +"clickrising.net\0" +"edu.ee\0jerusalem.museum\0silk.museum\0chernovtsy.ua\0karaganda.su\0servep2p.com\0" +"edu.eg\0os\xc3\xb8yro.no\0" +"ishinomaki.miyagi.jp\0agano.niigata.jp\0" +"shacknet.nu\0" +"int.ar\0edu.dz\0" +"amusement.aero\0\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0" +"kashihara.nara.jp\0olecko.pl\0" +"baby\0" +"allfinanz\0" +"ibestad.no\0" +"friulivgiulia.it\0" +"mansions.museum\0" +"int.az\0\xe9\x9b\x86\xe5\x9b\xa2\0" +"edu.es\0rendalen.no\0virtualserver.io\0" +"edu.et\0ikeda.hokkaido.jp\0" +"space.museum\0chase\0" +"int.bo\0jprs\0uno\0" +"takanezawa.tochigi.jp\0kaminoyama.yamagata.jp\0" +"\xd9\x82\xd8\xb7\xd8\xb1\0" +"gets-it.net\0" +"edu.fm\0is-a-student.com\0" +"stjordal.no\0podzone.org\0" +"tokushima.tokushima.jp\0theshop.jp\0" +"int.ci\0tank.museum\0" +"jeonnam.kr\0" +"boats\0" +"edu.gd\0bulsan-sudtirol.it\0ninohe.iwate.jp\0uol\0" +"edu.ge\0" +"modelling.aero\0int.co\0br\xc3\xb8nn\xc3\xb8y.no\0" +"edu.gh\0seki.gifu.jp\0" +"edu.gi\0resistance.museum\0" +"ed.ao\0cc.ia.us\0fido\0genting\0" +"edu.gl\0yusuhara.kochi.jp\0" +"int.cv\0edu.gn\0" +"edu.gp\0kusu.oita.jp\0otsu.shiga.jp\0" +"pharmaciens.km\0" +"edu.gr\0" +"edu.gt\0" +"edu.gu\0is-a-green.com\0" +"mircloud.us\0" +"edu.gy\0" +"edu.hk\0unj\xc3\xa1rga.no\0ups\0" +"castres.museum\0" +"edu.hn\0" +"cd.eu.org\0" +"edu.ht\0takashima.shiga.jp\0" +"ed.ci\0\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0" +"2000.hu\0from-ia.com\0" +"trentinos\xc3\xbc""d-tirol.it\0nasu.tochigi.jp\0meet\0" +"ed.cr\0edu.in\0" +"vanylven.no\0" +"an.it\0" +"edu.iq\0" +"edu.is\0dni.us\0" +"edu.it\0" +"soundandvision.museum\0" +"condos\0" +"kanie.aichi.jp\0jetzt\0eating-organic.net\0" +"mulhouse.museum\0svizzera.museum\0" +"engerdal.no\0club.tw\0" +"kamijima.ehime.jp\0niikappu.hokkaido.jp\0zagan.pl\0" +"tur.ar\0" +"edu.jo\0" +"cal.it\0bg.it\0inzai.chiba.jp\0" +"monmouth.museum\0" +"domains\0" +"edu.kg\0gs.mr.no\0" +"toyo.kochi.jp\0kitaaiki.nagano.jp\0bieszczady.pl\0" +"edu.ki\0from-sd.com\0" +"uchinomi.kagawa.jp\0takazaki.miyazaki.jp\0" +"edu.km\0" +"tur.br\0edu.kn\0" +"bronnoysund.no\0" +"edu.kp\0pup.gov.pl\0" +"edu.la\0" "edu.lb\0" -"3.bg\0edu.lc\0" -"\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0" -"\xe7\xa6\x8f\xe4\xba\x95.jp\0cdn-edges.net\0servehttp.com\0" -"bugatti\0" -"edu.kw\0men\0gets-it.net\0" -"bounty-full.com\0" -"edu.ky\0cust.dev.thingdust.io\0" -"edu.kz\0s3-us-west-2.amazonaws.com\0" -"edu.lk\0abo.pa\0" -"poniatowa.pl\0" -"design.museum\0" -"indianapolis.museum\0asker.no\0" -"seika.kyoto.jp\0and.museum\0" +"edu.lc\0lug.org.uk\0" +"edu.kw\0n\xc3\xa6r\xc3\xb8y.no\0" +"andriabarlettatrani.it\0" +"edu.ky\0watch-and-clock.museum\0" +"edu.kz\0" +"edu.lk\0bod\xc3\xb8.no\0" +"cloudapps.digital\0" +"kasserver.com\0" +"ikano\0" +"agrigento.it\0ci.it\0yazu.tottori.jp\0thruhere.net\0" +"woltlab-demo.com\0" "edu.lr\0" -"edu.ls\0\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"sa.edu.au\0" -"niiza.saitama.jp\0edu.me\0" +"edu.ls\0alfaromeo\0devices.resinstaging.io\0" +"obama.fukui.jp\0shopselect.net\0" +"edu.me\0" "edu.lv\0" -"nishiawakura.okayama.jp\0edu.mg\0buzz\0" -"edu.ly\0" -"kashihara.nara.jp\0wien\0selfip.com\0" -"edu.mk\0nesset.no\0" -"edu.ml\0co.network\0" -"*.mm\0" -"edu.mn\0tatamotors\0" -"edu.mo\0nc.tr\0" -"tree.museum\0" -"edu.ms\0is-a-financialadvisor.com\0" -"edu.mt\0oystre-slidre.no\0" +"edu.mg\0gs.nt.no\0lib.wi.us\0hermes\0" +"omigawa.chiba.jp\0" +"edu.ly\0ashgabad.su\0mircloud.ru\0" +"int.is\0edu.mk\0webredirect.org\0" +"\xe5\xba\x83\xe5\xb3\xb6.jp\0morioka.iwate.jp\0edu.ml\0vet\0" +"edu.mn\0" +"edu.mo\0kvam.no\0lab.ms\0" +"cr.it\0" +"yamaxun\0" +"edu.ms\0" +"vallee-d-aoste.it\0edu.mt\0" "edu.mv\0" -"numata.hokkaido.jp\0edu.mw\0edu.ng\0" -"hakone.kanagawa.jp\0edu.mx\0" -"shoo.okayama.jp\0suginami.tokyo.jp\0edu.my\0edu.ni\0" -"edu.mz\0" -"trainer.aero\0" -"is-into-games.com\0" -"catania.it\0arboretum.museum\0" -"slz.br\0" -"*.np\0ms.us\0nc.us\0" +"edu.mw\0edu.ng\0s\xc3\xb8gne.no\0independent-panel.uk\0" +"minamiboso.chiba.jp\0miyazu.kyoto.jp\0itabashi.tokyo.jp\0edu.mx\0" +"hawaii.museum\0edu.my\0edu.ni\0" +"ha.cn\0edu.mz\0salon\0" +"royrvik.no\0" +"otake.hiroshima.jp\0" +"k12.ma.us\0" "edu.nr\0" -"java\0sale\0am.leg.br\0iobb.net\0" -"uk.reclaim.cloud\0" -"nu.ca\0mypi.co\0" -"s3-eu-west-3.amazonaws.com\0ddns.me\0" -"yamanakako.yamanashi.jp\0" -"engineer.aero\0" -"video.hu\0edu.om\0" -"tools\0" +"matera.it\0minamidaito.okinawa.jp\0kofu.yamanashi.jp\0dell\0" +"6.bg\0risor.no\0" +"carraramassa.it\0genova.it\0minamiaiki.nagano.jp\0hoplix.shop\0" +"int.la\0film\0pleskns.com\0" +"gz.cn\0" +"cc.mi.us\0" +"edu.om\0myfast.space\0itcouldbewor.se\0" +"skiptvet.no\0k12.mt.us\0" +"monza.it\0sakegawa.yamagata.jp\0" "edu.pa\0" -"gyeonggi.kr\0" -"b.se\0" -"mil\0edu.pe\0" -"kitahiroshima.hokkaido.jp\0edu.pf\0" -"piemonte.it\0ve.it\0*.pg\0" -"edu.ph\0" -"salud.bo\0\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0" -"namie.fukushima.jp\0edu.pk\0" -"ip6.arpa\0\xe7\xb6\xb2\xe7\xbb\x9c.hk\0edu.pl\0jpn.com\0workisboring.com\0" -"mit\0" -"edu.pn\0" -"iwatsuki.saitama.jp\0" -"historichouses.museum\0" -"edu.qa\0tattoo\0" -"edu.pr\0pages.wiardweb.com\0" -"int.is\0tono.iwate.jp\0edu.ps\0" -"mizuho.tokyo.jp\0edu.pt\0" -"kuzumaki.iwate.jp\0mutual\0" -"nl.no\0" -"takashima.shiga.jp\0edu.py\0" -"shizuoka.shizuoka.jp\0agency\0" -"yokohama\0" -"support\0lpusercontent.com\0" -"sabae.fukui.jp\0" -"komatsu\0" -"kuleuven.cloud\0" -"aarborte.no\0" -"tec.br\0setagaya.tokyo.jp\0celtic.museum\0" -"trentinosudtirol.it\0bellevue.museum\0" -"trentino-a-adige.it\0mlb\0" -"pueblo.bo\0" -"aridagawa.wakayama.jp\0" -"t.bg\0shirakawa.fukushima.jp\0" -"int.la\0edu.sa\0" +"int.lk\0" +"fujishiro.ibaraki.jp\0kawanishi.nara.jp\0toyono.osaka.jp\0unazuki.toyama.jp\0mydatto.net\0ybo.faith\0" +"edu.pe\0" +"edu.pf\0" +"edu.ph\0band\0" +"bergen.no\0edu.pk\0" +"ed.jp\0edu.pl\0" +"honda\0meme\0my-gateway.de\0" +"fortal.br\0nic.in\0edu.pn\0engineer\0" +"k12.ok.us\0bank\0talk\0vig\0" +"mobi.tt\0" +"edu.qa\0" +"edu.pr\0tourism.tn\0" +"edu.ps\0graphics\0" +"edu.pt\0" +"mobi.tz\0vin\0" +"vip\0barsy.net\0mypsx.net\0" +"edu.py\0" +"claims\0" +"lucania.it\0\xe9\xb3\xa5\xe5\x8f\x96.jp\0" +"int.mv\0anquan\0" +"int.mw\0" +"jls-sto1.elastx.net\0" +"eisenbahn.museum\0int.ni\0webcam\0" +"yusui.kagoshima.jp\0ent.platform.sh\0" +"abbvie\0" +"pmn.it\0is.gov.pl\0" +"mo-siemens.io\0" +"plc.ly\0menu\0" +"sondrio.it\0framer.app\0" +"edu.sa\0ddns5.com\0" "edu.sb\0" "edu.rs\0edu.sc\0" -"edu.sd\0arkhangelsk.su\0" -"wiki\0edu.ru\0cistron.nl\0" -"cnpy.gdn\0for-the.biz\0" -"toyama.toyama.jp\0stange.no\0edu.sg\0" -"rm.it\0emerck\0" -"\xe9\x80\x9a\xe8\xb2\xa9\0" -"mma\0" -"iizuna.nagano.jp\0int.lk\0" -"edu.sl\0mls\0" -"azurestaticapps.net\0" -"edu.sn\0" -"edu.so\0*.dev.adobeaemcloud.com\0" -"edu.ss\0" -"sannohe.aomori.jp\0edu.st\0t3l3p0rt.net\0" -"school.za\0" -"edu.sv\0" -"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0!city.kitakyushu.jp\0\xd0\xbc\xd0\xba\xd0\xb4\0" -"edu.sy\0" -"edu.tj\0" -"nieruchomosci.pl\0" -"moareke.no\0" -"edu.tm\0" -"nomi.ishikawa.jp\0nagaokakyo.kyoto.jp\0nishihara.okinawa.jp\0lib.ne.us\0\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0" -"edu.to\0hisamitsu\0" -"hurdal.no\0" -"edu.ua\0" -"edu.tr\0" -"ap.leg.br\0" -"posts-and-telecommunications.museum\0edu.tt\0" -"iruma.saitama.jp\0" -"int.mv\0" -"int.mw\0edu.tw\0" -"fr\xc3\xb8ya.no\0" -"int.ni\0" -"oumu.hokkaido.jp\0sarl\0" -"urown.cloud\0" -"moe\0" -"fashion\0loginline.dev\0" -"ct.it\0saga.jp\0my-router.de\0" -"wine\0for-our.info\0" -"ranzan.saitama.jp\0moi\0" -"edu.vc\0crafting.xyz\0" -"he.cn\0edu.ve\0" -"kirkenes.no\0mom\0lebtimnetz.de\0" -"industries\0s3.dualstack.us-east-1.amazonaws.com\0" -"servegame.org\0" -"nu.it\0elvendrell.museum\0edu.uy\0" -"sakaiminato.tottori.jp\0" -"pmn.it\0edu.vn\0" -"market\0mov\0williamhill\0" -"ck.ua\0col.ng\0" -"kunneppu.hokkaido.jp\0okuizumo.shimane.jp\0agro.pl\0uw.gov.pl\0" -"ama.shimane.jp\0edu.vu\0" -"iwanuma.miyagi.jp\0" -"skydiving.aero\0karatsu.saga.jp\0blogspot.com.cy\0" -"k12.as.us\0nab\0" -"blogspot.co.uk\0" -"nic.in\0" -"yufu.oita.jp\0" -"abbott\0" -"edu.ws\0" -"int.pt\0" -"blogspot.com.ee\0" -"cisco\0" -"blogspot.com.eg\0" -"nba\0lima.zone\0" -"seranishi.hiroshima.jp\0institute\0" -"cymru\0" -"taiki.mie.jp\0" -"\xd0\xbc\xd0\xbe\xd0\xbd\0" -"on.ca\0blogspot.com.ar\0" -"save\0" -"edu.ye\0blogspot.com.au\0repl.co\0" -"etisalat\0" -"enebakk.no\0bss.design\0" -"storebase.store\0" -"isahaya.nagasaki.jp\0" -"skjerv\xc3\xb8y.no\0msd\0" -"agr.br\0" -"k.se\0" -"edu.za\0\xe7\xbd\x91\xe7\xab\x99\0" -"blogspot.com.br\0" -"emp.br\0soundcast.me\0" -"illustration.museum\0int.ru\0" -"pug.it\0umi.fukuoka.jp\0" -"blogspot.com.by\0" -"lavangen.no\0" -"kumiyama.kyoto.jp\0" -"edu.zm\0lplfinancial\0" -"landes.museum\0blogspot.com.co\0" -"roros.no\0" -"uozu.toyama.jp\0maserati\0" -"mtn\0" -"kawaguchi.saitama.jp\0oppeg\xc3\xa5rd.no\0" -"int.tj\0" -"mtr\0" -"nec\0weatherchannel\0sells-for-less.com\0" -"camera\0saxo\0" -"olbia-tempio.it\0" -"salangen.no\0" -"net.ac\0bentley\0" -"lotte\0no.eu.org\0" -"net.ae\0cc.oh.us\0" -"educator.aero\0net.af\0" -"net.ag\0australia.museum\0int.tt\0" -"force.museum\0thruhere.net\0" -"net.ai\0" -"slask.pl\0" -"v\xc3\xa5g\xc3\xa5.no\0" -"net.al\0" -"net.am\0" -"lotto\0" -"net\0" -"net.ba\0" -"net.ar\0net.bb\0kuju.oita.jp\0karaganda.su\0\xd1\x81\xd0\xb0\xd0\xbc\xd0\xb0\xd1\x80\xd0\xb0.\xd1\x80\xd1\x83\xd1\x81\0" -"tomobe.ibaraki.jp\0new\0" -"fuchu.toyama.jp\0sa.com\0" -"net.au\0cloudjiffy.net\0" -"blogspot.com.es\0" -"net.bh\0int.ve\0nfl\0\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0" -"blogspot.co.ke\0" -"net.az\0" -"turin.it\0halden.no\0" -"net.bm\0" -"net.bn\0farmstead.museum\0" -"net.bo\0" -"trentinostirol.it\0int.vn\0" -"net.br\0damnserver.com\0" -"net.bs\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0" -"net.bt\0tr\xc3\xb8gstad.no\0\xe7\xbd\x91\xe5\x9d\x80\0" -"isa.kagoshima.jp\0" -"\xe7\xbb\x84\xe7\xb9\x94.hk\0kppsp.gov.pl\0" -"net.ci\0" -"foz.br\0net.bz\0" -"higashihiroshima.hiroshima.jp\0ngo\0" -"sayama.saitama.jp\0hagebostad.no\0vipsinaapp.com\0" -"net.cm\0clinic\0" -"net.cn\0" -"net.co\0" -"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0clubmed\0lgbt\0" -"lease\0" -"baidu\0" -"go.gov.br\0" -"net.cu\0cal.it\0" -"stockholm.museum\0in-dsl.de\0" -"net.cw\0heimatunduhren.museum\0nhk\0\xe4\xba\x9a\xe9\xa9\xac\xe9\x80\x8a\0" -"net.cy\0joyo.kyoto.jp\0higashiizumo.shimane.jp\0" -"nishiizu.shizuoka.jp\0" -"kitami.hokkaido.jp\0onna.okinawa.jp\0" -"net.dm\0s3-website.us-east-2.amazonaws.com\0es-1.axarnet.cloud\0" -"monzaebrianza.it\0" -"net.do\0cc.wa.us\0" -"hob\xc3\xb8l.no\0" -"net.ec\0culturalcenter.museum\0" -"hn.cn\0" -"toyone.aichi.jp\0" -"64-b.it\0" -"net.eg\0" -"gb.com\0" -"myshopify.com\0" -"net.dz\0massa-carrara.it\0" -"adac\0" -"stjordal.no\0" -"shingu.fukuoka.jp\0kushiro.hokkaido.jp\0santacruz.museum\0" -"shimizu.shizuoka.jp\0" -"net.et\0" -"show.aero\0" -"net-freaks.com\0" -"net.fj\0" -"naka.hiroshima.jp\0" -"net.fm\0" -"blogspot.co.nz\0" -"sanuki.kagawa.jp\0asaka.saitama.jp\0" -"shimoji.okinawa.jp\0" -"sf.no\0ct.us\0" -"spy.museum\0k12.nm.us\0" -"saku.nagano.jp\0nz.eu.org\0" -"net.ge\0" -"reggiocalabria.it\0watches\0" -"net.gg\0aseral.no\0" -"kobayashi.miyazaki.jp\0iraq.museum\0" -"is-a-student.com\0" -"net.gl\0seoul.kr\0" -"nic.tj\0" -"net.gn\0" -"net.gp\0" -"nakadomari.aomori.jp\0" -"net.gr\0gold\0nokia\0" -"net.gt\0golf\0" -"net.gu\0gs.ah.no\0" -"webhop.org\0tn.oxa.cloud\0" -"dubai\0" -"net.gy\0mayfirst.info\0" -"net.hk\0" -"locker\0al.eu.org\0" -"net.hn\0erotica.hu\0horokanai.hokkaido.jp\0mj\xc3\xb8ndalen.no\0nhs.uk\0ipiranga\0" -"t.se\0" -"costume.museum\0" -"orland.no\0" -"net.ht\0net.id\0chat\0" -"yamaga.kumamoto.jp\0walbrzych.pl\0memset.net\0" -"km.ua\0blogdns.com\0" -"yamato.kumamoto.jp\0" -"net.il\0" -"net.im\0tokushima.jp\0misaki.okayama.jp\0" -"net.in\0" -"appengine.flow.ch\0" -"net.iq\0" -"net.ir\0" -"net.is\0money.museum\0vn.ua\0zapto.xyz\0" -"lib.ee\0net.je\0" -"ingatlan.hu\0bolzano.it\0" -"blogspot.com.mt\0" -"politica.bo\0" -"blogspot.com.ng\0" -"rehab\0" -"net.jo\0tec.ve\0" -"ishikawa.fukushima.jp\0" -"cc.pa.us\0" -"miyazu.kyoto.jp\0goog\0id.forgerock.io\0" -"oketo.hokkaido.jp\0" -"kamisato.saitama.jp\0net.kg\0" -"rodoy.no\0" -"valledaosta.it\0net.ki\0" -"cloud66.ws\0" -"gwangju.kr\0" -"net.kn\0" -"chuo.tokyo.jp\0roma.museum\0" -"net.la\0" -"net.lb\0" -"so.it\0net.lc\0now\0from-vt.com\0" -"\xc3\xb8vre-eiker.no\0" -"bahccavuotna.no\0" -"net.kw\0bmoattachments.org\0fastblog.net\0" -"trondheim.no\0definima.net\0" -"daisen.akita.jp\0net.ky\0flora.no\0krager\xc3\xb8.no\0" -"net.kz\0" -"net.lk\0" -"shimofusa.chiba.jp\0shibukawa.gunma.jp\0" -"konskowola.pl\0" -"matta-varjjat.no\0wuoz.gov.pl\0" -"ballooning.aero\0net.ma\0" -"net.lr\0myravendb.com\0" -"net.ls\0" -"rv.ua\0nic.za\0" -"net.me\0blogspot.com.tr\0" -"midori.gunma.jp\0net.lv\0upaas.kazteleport.kz\0" -"esan.hokkaido.jp\0cust.prod.thingdust.io\0dnsupdate.info\0" -"miyoshi.aichi.jp\0" -"net.ly\0" -"mod.gi\0net.mk\0" -"net.ml\0" -"crotone.it\0gu.us\0nra\0" -"\xe6\x95\x8e\xe8\x82\xb2.hk\0yachimata.chiba.jp\0" -"net.mo\0" -"repl.run\0" -"cc.ky.us\0" -"net.ms\0" -"net.mt\0" -"net.mu\0obi\0" -"net.mv\0net.nf\0pohl\0" -"yoshinogari.saga.jp\0net.mw\0net.ng\0" -"net.mx\0" -"campidanomedio.it\0net.my\0net.ni\0faststacks.net\0" -"veterinaire.km\0net.mz\0radom.pl\0barsy.support\0" -"taiwa.miyagi.jp\0fantasyleague.cc\0" -"mitaka.tokyo.jp\0magnet.page\0" -"semine.miyagi.jp\0" -"itano.tokushima.jp\0" -"net.nr\0" -"nrw\0" -"pg.it\0stranda.no\0" -"tonaki.okinawa.jp\0" -"sx.cn\0" -"\xe5\x85\xac\xe5\x8f\xb8.cn\0gallery.museum\0net.nz\0" -"higashitsuno.kochi.jp\0" -"tsuno.miyazaki.jp\0net.om\0" -"iron.museum\0" -"cust.disrec.thingdust.io\0" -"net.pa\0mlbfan.org\0" -"hembygdsforbund.museum\0" -"hokuto.hokkaido.jp\0" -"iki.nagasaki.jp\0net.pe\0um.gov.pl\0" -"moseushi.hokkaido.jp\0hjartdal.no\0" -"\xe5\x85\xac\xe5\x8f\xb8.hk\0rollag.no\0" -"net.ph\0s3.dualstack.ca-central-1.amazonaws.com\0" -"olecko.pl\0" -"itau\0" -"net.pk\0co.krd\0" -"net.pl\0\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0" -"net.pn\0from-ak.com\0" -"bando.ibaraki.jp\0cultural.museum\0s3-website-us-east-1.amazonaws.com\0" -"fukushima.jp\0vevelstad.no\0homesense\0ntt\0" -"net.qa\0" -"net.pr\0" -"net.ps\0cc.ia.us\0" -"shimizu.hokkaido.jp\0net.pt\0" -"blogspot.co.za\0" -"pp.az\0" -"discourse.group\0" -"sn\xc3\xa5""ase.no\0net.py\0" -"andriabarlettatrani.it\0" -"groundhandling.aero\0bbs.tr\0lon-2.paas.massivegrid.net\0wellbeingzone.eu\0" -"an.it\0" -"avocat.pro\0" -"veterinaire.fr\0" -"off\0" -"obu.aichi.jp\0" -"lo.it\0" -"nakatsugawa.gifu.jp\0" -"luzern.museum\0" -"misasa.tottori.jp\0amli.no\0" -"ojiya.niigata.jp\0" -"iitate.fukushima.jp\0" -"vardo.no\0" -"flight.aero\0blogspot.com.uy\0" -"citic\0square7.net\0dvrcam.info\0" -"furniture.museum\0net.sa\0" -"net.sb\0" -"tomika.gifu.jp\0net.sc\0kicks-ass.net\0" -"net.sd\0" -"egersund.no\0net.ru\0" -"kv.ua\0" -"h\xc3\xa1""bmer.no\0net.rw\0net.sg\0aquarelle\0" -"net.sh\0tel.tr\0" -"gliwice.pl\0" -"net.sl\0" -"net.so\0" -"bjarkoy.no\0" -"net.ss\0" -"net.st\0" -"us.gov.pl\0" -"instantcloud.cn\0" -"hole.no\0net.th\0" -"net.sy\0edu.krd\0" -"net.tj\0dnsalias.org\0" -"net.tm\0" -"net.tn\0" -"tonsberg.no\0net.to\0nyc\0" -"net.ua\0" -"net.tr\0" -"net.tt\0" -"*.lcl.dev\0" -"froland.no\0sor-aurdal.no\0" -"net.tw\0" -"yura.wakayama.jp\0" -"net.uk\0baseball\0" -"bo.telemark.no\0cleaning\0" -"net.vc\0\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0" -"lea\xc5\x8bgaviika.no\0net.ve\0*.stg.dev\0" -"consulado.st\0" -"hidaka.hokkaido.jp\0nayoro.hokkaido.jp\0yoga\0" -"net.uy\0net.vi\0" -"!city.sapporo.jp\0net.uz\0" -"gol.no\0" -"net.vn\0" -"nishinomiya.hyogo.jp\0" -"pixolino.com\0" -"dynalias.com\0for-some.biz\0" -"net.vu\0" -"tydal.no\0" -"is-a-chef.org\0ric.jelastic.vps-host.net\0" -"srv.br\0" -"yatomi.aichi.jp\0" -"net.ws\0" -"scot\0" -"university.museum\0ebiz.tw\0cdn77-ssl.net\0" -"minato.osaka.jp\0porn\0" -"akita.akita.jp\0" -"\xe8\x81\x94\xe9\x80\x9a\0" -"marche.it\0rakkestad.no\0" -"nysa.pl\0" -"ravendb.community\0" -"namerikawa.toyama.jp\0" -"transport.museum\0net.ye\0" -"mormon\0" -"aizubange.fukushima.jp\0nishitosa.kochi.jp\0" -"!city.kawasaki.jp\0" -"moskenes.no\0auspost\0" -"wa.gov.au\0larsson.museum\0aurskog-holand.no\0post\0" -"service.gov.uk\0" -"naamesjevuemie.no\0" -"net.za\0one\0" -"fnd.br\0shizuoka.jp\0ong\0" -"catholic\0" -"cloudaccess.host\0" -"toray\0" -"kitamoto.saitama.jp\0onl\0homeip.net\0" -"west1-us.cloudjiffy.net\0" -"myqnapcloud.com\0" -"kr\xc3\xb8""dsherad.no\0" -"chuo.chiba.jp\0net.zm\0ny-1.paas.massivegrid.net\0" -"lib.wa.us\0" -"nissan\0" -"columbus.museum\0is-saved.org\0" -"s3-ap-northeast-1.amazonaws.com\0" -"tinn.no\0pinb.gov.pl\0mt.eu.org\0" -"tksat.bo\0kariwa.niigata.jp\0" -"ichinohe.iwate.jp\0" -"bg.it\0" -"friuliveneziagiulia.it\0blogsite.org\0" -"nissay\0ooo\0" -"alto-adige.it\0" -"kamisunagawa.hokkaido.jp\0" -"ichikawa.chiba.jp\0kamikawa.hokkaido.jp\0" -"storage\0" -"morotsuka.miyazaki.jp\0wake.okayama.jp\0karelia.su\0" -"is-a-knight.org\0" -"takamatsu.kagawa.jp\0" -"oxa.cloud\0" -"\xe9\xb3\xa5\xe5\x8f\x96.jp\0varoy.no\0" -"is-a-chef.com\0" -"arna.no\0law.pro\0" -"kawaue.gifu.jp\0naha.okinawa.jp\0" -"h\xc3\xa1mm\xc3\xa1rfeasta.no\0wielun.pl\0" -"unzen.nagasaki.jp\0itoigawa.niigata.jp\0" -"research.aero\0" -"andria-trani-barletta.it\0akaiwa.okayama.jp\0org\0" -"\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"pay\0" -"construction\0" -"culture.museum\0" -"koori.fukushima.jp\0kiwa.mie.jp\0" -"iwamizawa.hokkaido.jp\0" -"kaga.ishikawa.jp\0" -"rsvp\0" -"horology.museum\0" -"gsm.pl\0neustar\0" -"chtr.k12.ma.us\0" -"cesenaforl\xc3\xac.it\0indowapblog.com\0" -"ureshino.mie.jp\0manx.museum\0" -"consulting\0" -"muroto.kochi.jp\0" -"tsuruoka.yamagata.jp\0reviews\0" -"\xd0\xbe\xd1\x80\xd0\xb3\0" -"click\0" -"*.northflank.app\0" -"from-ri.com\0" -"budejju.no\0" -"otaki.chiba.jp\0" -"aid.pl\0" -"odesa.ua\0" -"sarpsborg.no\0" -"kasserver.com\0" -"ott\0" -"kashima.ibaraki.jp\0kosuge.yamanashi.jp\0russia.museum\0cc.az.us\0lib.pa.us\0" -"toya.hokkaido.jp\0" -"akashi.hyogo.jp\0" -"academia.bo\0" -"cri.br\0" -"friuli-vgiulia.it\0\xe5\xb1\xb1\xe5\xbd\xa2.jp\0lukow.pl\0" -"leirfjord.no\0my-wan.de\0" -"pet\0" -"ora.gunma.jp\0pp.se\0pp.ru\0" -"kumamoto.jp\0kvinnherad.no\0ovh\0" -"better-than.tv\0" -"cable-modem.org\0" -"boats\0wales\0" -"salerno.it\0" -"sauherad.no\0" -"trani-barletta-andria.it\0county.museum\0" -"toyota\0" -"cuiaba.br\0" -"\xc3\xa5mot.no\0kongsberg.no\0" -"starostwo.gov.pl\0" -"yamato.fukushima.jp\0hornindal.no\0" -"gmina.pl\0jp.net\0" -"pp.ua\0" -"k12.co.us\0" -"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0" -"prato.it\0phd\0" -"osaki.miyagi.jp\0" -"\xe7\xb5\x84\xe7\xbb\x87.hk\0lib.mi.us\0" -"kuriyama.hokkaido.jp\0is-very-evil.org\0" -"mihara.kochi.jp\0jeep\0marriott\0" -"ce.leg.br\0" -"askvoll.no\0mincom.tn\0" -"financial\0casacam.net\0smushcdn.com\0" -"mex.com\0" -"mordovia.su\0" -"safety\0" -"pid\0" -"civilisation.museum\0my.eu.org\0app.os.fedoraproject.org\0" -"recife.br\0gotsu.shimane.jp\0\xe4\xb8\xad\xe5\x9b\xbd\0" -"lidl\0hostedpi.com\0" -"cooperativa.bo\0sunndal.no\0" -"pin\0" -"ryukyu\0twmail.net\0" -"loginline.app\0" -"na.it\0karlsoy.no\0daemon.panel.gg\0" -"hair\0" -"from-sd.com\0in.london\0" -"hatoyama.saitama.jp\0\xe4\xb8\xad\xe5\x9c\x8b\0" -"pizza\0" -"ueno.gunma.jp\0" -"friuli-venezia-giulia.it\0ras.ru\0" -"loseyourip.com\0" -"higashi.fukushima.jp\0" -"life\0" -"lib.ia.us\0" -"dyndns1.de\0" -"aero\0" -"busan.kr\0*.hosting.ovh.net\0" -"troandin.no\0" -"grainger\0" -"mordovia.ru\0" -"gitlab.io\0" -"k12.wi.us\0" -"balsfjord.no\0is-a-geek.com\0*.transurl.be\0" -"mayfirst.org\0" -"us.com\0" -"reisen\0" -"wy.us\0sellsyourhome.org\0" -"diamonds\0ua.rs\0" -"showa.gunma.jp\0stream\0" -"yk.ca\0" -"sande.more-og-romsdal.no\0" -"tosa.kochi.jp\0resistance.museum\0" -"carrd.co\0" -"kakinoki.shimane.jp\0" -"vic.au\0dr\xc3\xb8""bak.no\0swiebodzin.pl\0" -"gen.mi.us\0" -"aeroclub.aero\0" -"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0est-a-la-masion.com\0" -"labor.museum\0eurodir.ru\0" -"ohda.shimane.jp\0edgestack.me\0" -"wakasa.fukui.jp\0vip.jelastic.cloud\0" -"taira.toyama.jp\0ngo.lk\0pnc\0" -"indigena.bo\0uto.kumamoto.jp\0" -"okegawa.saitama.jp\0lancashire.museum\0" -"sorfold.no\0" -"seat\0" -"chase\0" -"forex\0phx.enscaled.us\0" -"trentinosued-tirol.it\0" -"kazo.saitama.jp\0" -"notaires.km\0" -"yoka.hyogo.jp\0fh.se\0kerryhotels\0nl.eu.org\0" -"cc.mt.us\0cc.nd.us\0" -"us.ax\0" -"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0copro.uk\0" -"stryn.no\0citi\0""1337.pictures\0" -"\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0ngo.ng\0" -"i.bg\0" -"hamatama.saga.jp\0" -"mazury.pl\0like\0" -"webhop.net\0*.transurl.eu\0" -"championship.aero\0" -"dyndns-wiki.com\0" -"kommune.no\0city\0eu-central-1.elasticbeanstalk.com\0" -"kviteseid.no\0" -"berg.no\0jcloud.ik-server.com\0""1kapp.com\0" -"reise\0" -"naroy.no\0" -"monticello.museum\0" -"v-info.info\0" -"interactive.museum\0" -"azerbaijan.su\0" -"sande.m\xc3\xb8re-og-romsdal.no\0sytes.net\0" -"fishing\0s3.dualstack.ap-southeast-2.amazonaws.com\0" -"from-ms.com\0from-nc.com\0" -"ngo.ph\0seek\0fbxos.fr\0" -"federation.aero\0" -"figueres.museum\0" -"eidskog.no\0" -"graz.museum\0store\0enscaled.sg\0" -"obama.nagasaki.jp\0" -"kyoto.jp\0" -"cri.nz\0abogado\0asso.eu.org\0" -"jgora.pl\0dyn53.io\0" -"defense.tn\0" -"pro\0limo\0" -"salvador.br\0minamioguni.kumamoto.jp\0minano.saitama.jp\0lifestyle\0n4t.co\0" -"1.bg\0" -"ci.it\0kamigori.hyogo.jp\0" -"pru\0discourse.team\0" -"\xd0\xbc\xd1\x81\xd0\xba.\xd1\x80\xd1\x83\xd1\x81\0" -"etne.no\0" -"parma.it\0sk\xc3\xa1nit.no\0kicks-ass.org\0" -"itayanagi.aomori.jp\0kobierzyce.pl\0link\0" -"nakagawa.hokkaido.jp\0" -"ichinomiya.aichi.jp\0portal.museum\0" -"police.uk\0" -"zamami.okinawa.jp\0" -"motoyama.kochi.jp\0" -"okagaki.fukuoka.jp\0" -"actor\0" -"k12.az.us\0" -"ogano.saitama.jp\0estate\0statefarm\0" -"pub\0" -"ruhr\0" -"feira.br\0k12.la.us\0ng.eu.org\0" -"progressive\0" -"trentino-altoadige.it\0" -"gamagori.aichi.jp\0tula.su\0" -"ukiha.fukuoka.jp\0shw.io\0" -"saintlouis.museum\0ic.gov.pl\0" -"ullensaker.no\0stuff-4-sale.org\0" -"courses\0haus\0" -"ns.ca\0" -"\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" -"agematsu.nagano.jp\0" -"workshop.museum\0mail.pl\0est-le-patron.com\0" -"tsuga.tochigi.jp\0" -"engineer\0" -"servemp3.com\0" -"dell-ogliastra.it\0higashikagura.hokkaido.jp\0" -"trentino-sued-tirol.it\0klabu.no\0" -"gniezno.pl\0" -"lima-city.rocks\0" -"is-a-geek.org\0" -"cruise\0pwc\0" -"wazuka.kyoto.jp\0\xe4\xbf\xa1\xe6\x81\xaf\0" -"portlligat.museum\0" -"palermo.it\0bearalv\xc3\xa1hki.no\0" -"vc.it\0oguni.kumamoto.jp\0lilly\0" -"saobernardo.br\0barsy.menu\0" -"gs.vf.no\0is-a-chef.net\0" -"isleofman.museum\0" -"childrensgarden.museum\0turek.pl\0" -"vercel.app\0" -"ushistory.museum\0" -"us.kg\0" -"nishiazai.shiga.jp\0" -"trentin-s\xc3\xbc""d-tirol.it\0" -"inderoy.no\0" -"honbetsu.hokkaido.jp\0*.transurl.nl\0" -"omega\0" -"university\0" -"tsubame.niigata.jp\0ris\xc3\xb8r.no\0couk.me\0pgafan.net\0" -"matsuzaki.shizuoka.jp\0vindafjord.no\0cc.nm.us\0" -"mein-vigor.de\0" -"hidaka.saitama.jp\0hikawa.shimane.jp\0myfirewall.org\0" -"goiania.br\0" -"r.bg\0from-de.com\0" -"port.fr\0" -"savona.it\0" -"log.br\0" -"americanantiques.museum\0" -"wolomin.pl\0game-server.cc\0" -"midori.chiba.jp\0suzaka.nagano.jp\0mintere.site\0" -"trentinoa-adige.it\0" -"shinagawa.tokyo.jp\0s\xc3\xb8rum.no\0ulvik.no\0" -"\xc3\xa5seral.no\0os.hedmark.no\0" -"katsuragi.wakayama.jp\0" -"nakai.kanagawa.jp\0" -"vet.br\0us.na\0" -"live\0" -"ngo.za\0" -"kofu.yamanashi.jp\0froya.no\0" -"swidnik.pl\0" -"veneto.it\0" -"lamborghini\0" -"bashkiria.ru\0" -"yoshioka.gunma.jp\0i.ng\0ga.us\0" -"bayern\0" -"*.dweb.link\0" -"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" -"eid.no\0go.leg.br\0" -"industria.bo\0" -"cr.it\0bashkiria.su\0remotewd.com\0" -"reggioemilia.it\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0" -"kozaki.chiba.jp\0sekikawa.niigata.jp\0" -"gs.cn\0clic2000.net\0" -"eu-west-2.elasticbeanstalk.com\0radio.am\0" -"musashino.tokyo.jp\0byen.site\0" -"sd.cn\0gs.of.no\0total\0" -"scientist.aero\0" -"itakura.gunma.jp\0" -"rome.it\0i.ph\0forum\0yandexcloud.net\0" -"kasumigaura.ibaraki.jp\0gran.no\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" -"misaki.osaka.jp\0" -"nishimera.miyazaki.jp\0\xe5\xb9\xbf\xe4\xb8\x9c\0caa.li\0" -"bungotakada.oita.jp\0myfast.space\0" -"radio.br\0benevento.it\0" -"kadogawa.miyazaki.jp\0oishida.yamagata.jp\0cancerresearch\0" -"hs.run\0" -"rishiri.hokkaido.jp\0" -"k12.md.us\0" -"arita.saga.jp\0" -"nanmoku.gunma.jp\0ogawa.ibaraki.jp\0" -"homeunix.net\0" -"toki.gifu.jp\0nj.us\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0" -"taxi.br\0dev-myqnapcloud.com\0" -"lynx.mythic-beasts.com\0" -"es.gov.br\0shiga.jp\0" -"bible.museum\0naumburg.museum\0imamat\0verm\xc3\xb6gensberater\0" -"tingvoll.no\0s3-website.ca-central-1.amazonaws.com\0" -"ac.ae\0" -"fuettertdasnetz.de\0" -"kitakata.miyazaki.jp\0nakagawa.tokushima.jp\0i.se\0" -"leksvik.no\0" -"philips\0krellian.net\0" -"hachirogata.akita.jp\0otake.hiroshima.jp\0" -"shimane.shimane.jp\0" -"trentinsud-tirol.it\0horonobe.hokkaido.jp\0report\0" -"arq.br\0s3-website-sa-east-1.amazonaws.com\0r.cdn77.net\0" -"allstate\0" -"mill.museum\0upow.gov.pl\0" -"ac.at\0ashiya.hyogo.jp\0loyalist.museum\0vinnytsia.ua\0" -"ac.be\0yamatokoriyama.nara.jp\0" -"redirectme.net\0" -"miyoshi.tokushima.jp\0vossevangen.no\0" -"council.aero\0kawasaki.miyagi.jp\0" -"karikatur.museum\0" -"sex.hu\0" -"delivery\0" -"nanjo.okinawa.jp\0" -"sakura.chiba.jp\0cc.de.us\0radio.fm\0" -"fjell.no\0" -"fudai.iwate.jp\0" -"mishima.shizuoka.jp\0privatizehealthinsurance.net\0" -"fylkesbibl.no\0\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0cyon.site\0" -"tokai.ibaraki.jp\0kanuma.tochigi.jp\0dyndns.dappnode.io\0" -"chikuho.fukuoka.jp\0""0e.vc\0" -"ac.ci\0alesund.no\0cc.nv.us\0" -"tahara.aichi.jp\0karumai.iwate.jp\0mydatto.net\0" -"guitars\0hobby-site.org\0" -"ac.cn\0kurate.fukuoka.jp\0" -"skanit.no\0" -"ac.cr\0\xe7\xbd\x91\xe7\xbb\x9c\0" -"sakura.tochigi.jp\0" -"assabu.hokkaido.jp\0we.bs\0" -"reklam.hu\0" -"biz.bb\0ac.cy\0" -"biz.at\0" -"jamison.museum\0" -"gangwon.kr\0onavstack.net\0" -"daiwa.hiroshima.jp\0*.magentosite.cloud\0" -"biz.az\0baseball.museum\0\xe5\x95\x86\xe6\xa5\xad.tw\0freeboxos.fr\0" -"serveexchange.com\0gotpantheon.com\0" -"sherbrooke.museum\0" -"arai.shizuoka.jp\0" -"lundbeck\0" -"red\0" -"teshikaga.hokkaido.jp\0" -"lier.no\0" -"cs.keliweb.cloud\0" -"zara\0" -"hokuto.yamanashi.jp\0" -"medecin.km\0santafe.museum\0spydeberg.no\0" -"fukumitsu.toyama.jp\0ren\0sexy\0" -"odawara.kanagawa.jp\0" -"servehumour.com\0" -"ac.fj\0kraanghke.no\0qvc\0" -"\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0" -"biz.cy\0" -"kitashiobara.fukushima.jp\0minato.tokyo.jp\0youth.museum\0biz.dk\0" -"expert\0" -"exhibition.museum\0" -"hl.cn\0americana.museum\0" -"graphox.us\0" -"noho.st\0" -"photography.museum\0" -"ac.gn\0jogasz.hu\0" -"basel.museum\0" -"\xd1\x80\xd1\x83\xd1\x81\0" -"cr.ua\0" -"winners\0" -"pesarourbino.it\0" -"sennan.osaka.jp\0oracle\0" -"autos\0" -"ed.ao\0abeno.osaka.jp\0immobilien\0" -"biz.et\0omi.niigata.jp\0" -"plantation.museum\0" -"shobara.hiroshima.jp\0" -"kujukuri.chiba.jp\0" -"nishi.fukuoka.jp\0" -"biz.fj\0" -"\xd8\xb9\xd8\xb1\xd8\xa8\0" -"ac.id\0" -"boehringer\0meinforum.net\0" -"cosenza.it\0" -"tsukumi.oita.jp\0nachikatsuura.wakayama.jp\0prod\0poznan.pl\0gov.scot\0" -"ascolipiceno.it\0familyds.com\0" -"topology.museum\0prof\0" -"ac.il\0physio\0" -"ac.im\0" -"ac.in\0romskog.no\0" -"newjersey.museum\0" -"ac.ir\0delmenhorst.museum\0sex.pl\0" -"\xc4\x8d\xc3\xa1hcesuolo.no\0ril\0biz.gl\0ditchyourip.com\0" -"ed.ci\0chambagri.fr\0" -"pe.ca\0karmoy.no\0" -"rio\0" -"rip\0torproject.net\0" -"ed.cr\0tama.tokyo.jp\0mosj\xc3\xb8""en.no\0" -"zaporizhzhia.ua\0" -"notaires.fr\0lavagis.no\0" -"ac.jp\0rovno.ua\0" -"natural.bo\0hotmail\0" -"r.se\0" -"ac.ke\0" -"cloud.fedoraproject.org\0vs.mythic-beasts.com\0za.net\0" -"eng.br\0shijonawate.osaka.jp\0" -"yasuda.kochi.jp\0" -"sci.eg\0nogi.tochigi.jp\0" -"biz.id\0cpa.pro\0" -"dabur\0" -"frog.museum\0grajewo.pl\0" -"ac.kr\0" -"safety.aero\0cloudns.biz\0" -"ol.no\0" -"endoftheinternet.org\0" -"tochigi.jp\0" -"nango.fukushima.jp\0" -"ac.lk\0" -"museum\0" -"ac.ma\0k12.tn.us\0" -"matera.it\0alstom\0ferrari\0" -"ono.fukui.jp\0shimokitayama.nara.jp\0ac.ls\0" -"kitagawa.kochi.jp\0tachikawa.tokyo.jp\0" -"ac.me\0hawaii.museum\0coupons\0" -"phoenix.museum\0" -"fastvps-server.com\0" -"tozawa.yamagata.jp\0uenohara.yamanashi.jp\0" -"kamiichi.toyama.jp\0" -"biz.ki\0loginline.io\0" -"furubira.hokkaido.jp\0servehalflife.com\0" -"nagai.yamagata.jp\0washtenaw.mi.us\0" -"ac.mu\0bale.museum\0" -"ac.mw\0lefrak\0" -"eu.pythonanywhere.com\0" -"suzuka.mie.jp\0ac.ni\0twmail.org\0" -"ac.mz\0linde\0togliatti.su\0" -"friuli-veneziagiulia.it\0square7.de\0" -"ikata.ehime.jp\0" -"lindesnes.no\0" -"b.ssl.fastly.net\0" -"hikari.yamaguchi.jp\0opoczno.pl\0" -"shirosato.ibaraki.jp\0" -"lib.ct.us\0" -"fujinomiya.shizuoka.jp\0" -"itoman.okinawa.jp\0\xd5\xb0\xd5\xa1\xd5\xb5\0" -"fujikawa.shizuoka.jp\0" -"biz.ls\0ac.nz\0" -"filegear-jp.me\0" -"consultant.aero\0ferrara.it\0ac.pa\0serveblog.net\0" -"africa.com\0" -"valle.no\0amfam\0" -"watchandclock.museum\0is-a-nurse.com\0miniserver.com\0" -"hamamatsu.shizuoka.jp\0drangedal.no\0" -"sd.us\0" -"ham-radio-op.net\0" -"biz.mv\0" -"pro.az\0biz.mw\0" -"biz.my\0biz.ni\0" -"shinonsen.hyogo.jp\0url.tw\0" -"tsumagoi.gunma.jp\0ac.pr\0" -"giessen.museum\0" -"pro.br\0ravendb.run\0" -"ritto.shiga.jp\0" -"pe.it\0" -"biz.nr\0" -"camdvr.org\0" -"ed.jp\0" -"s3-website.ap-northeast-2.amazonaws.com\0" -"square7.ch\0" -"sinaapp.com\0" -"tohnosho.chiba.jp\0" -"lib.al.us\0" -"wpenginepowered.com\0" -"sap\0" -"ravenna.it\0marugame.kagawa.jp\0atsugi.kanagawa.jp\0" -"hl.no\0" -"software.aero\0sas\0" -"unnan.shimane.jp\0" -"miyama.fukuoka.jp\0toride.ibaraki.jp\0mattel\0" -"pro.cy\0" -"rugby\0" -"doomdns.com\0" -"aso.kumamoto.jp\0sbi\0" -"xnbay.com\0" -"navigation.aero\0divttasvuotna.no\0biz.pk\0" -"biz.pl\0ac.rs\0k12.mn.us\0" -"ac.se\0energy\0radio\0ac.ru\0is-a-geek.net\0" -"pe.kr\0" -"pro.ec\0kisarazu.chiba.jp\0drobak.no\0ac.rw\0" -"sca\0" -"heguri.nara.jp\0biz.pr\0scb\0" -"sbs\0" -"homebuilt.aero\0miyoshi.hiroshima.jp\0" -"karasjok.no\0" -"soka.saitama.jp\0" -"al.it\0" -"sumoto.hyogo.jp\0" -"friulivenezia-giulia.it\0\xd1\x81\xd1\x80\xd0\xb1\0*.0emm.com\0" -"amagasaki.hyogo.jp\0" -"rhcloud.com\0" -"ac.th\0" -"eco.br\0ac.sz\0ac.tj\0juegos\0" -"windmill.museum\0" -"forum.hu\0" -"tarama.okinawa.jp\0artdeco.museum\0ilawa.pl\0" -"pro.fj\0" -"oncilla.mythic-beasts.com\0" -"accountants\0avianca\0" -"ikusaka.nagano.jp\0b\xc3\xb8mlo.no\0" -"author.aero\0" -"we.tc\0" -"fyresdal.no\0ac.ug\0" -"lincoln.museum\0ac.tz\0" -"ac.uk\0from-va.com\0" -"kawara.fukuoka.jp\0" -"webhop.info\0" -"kr\xc3\xa5""anghke.no\0lib.gu.us\0" -"utah.museum\0be.ax\0" -"kvanangen.no\0" -"soc.dz\0" -"h\xc3\xa5.no\0s3.cn-north-1.amazonaws.com.cn\0" -"sciences.museum\0" -"takazaki.miyazaki.jp\0and\xc3\xb8y.no\0limited\0run\0" -"mycloud.by\0bloxcms.com\0" -"misato.wakayama.jp\0" -"biz.ss\0ses\0" -"watch-and-clock.museum\0akrehamn.no\0" -"hdfc\0" -"ac.vn\0sew\0" -"sex\0" -"takamori.kumamoto.jp\0biz.tj\0" -"def.br\0" -"legal\0platform0.app\0" -"itabashi.tokyo.jp\0\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0" -"takahagi.ibaraki.jp\0yodobashi\0" -"pro.ht\0kyotanabe.kyoto.jp\0kautokeino.no\0biz.ua\0" -"kuroishi.aomori.jp\0biz.tr\0sfr\0" -"niimi.okayama.jp\0" -"agriculture.museum\0biz.tt\0" -"versailles.museum\0rwe\0" -"!city.nagoya.jp\0" -"platter-app.dev\0" -"ed.pw\0" -"sv.it\0biratori.hokkaido.jp\0" -"nose.osaka.jp\0" -"lasalle\0" -"krakow.pl\0" -"al.no\0" -"olawa.pl\0wien.funkfeuer.at\0" -"lur\xc3\xb8y.no\0" -"chernovtsy.ua\0" -"\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0" -"bruxelles.museum\0sm.ua\0" -"biz.vn\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0" -"operaunite.com\0" -"medecin.fr\0mywire.org\0" -"nakano.tokyo.jp\0skiptvet.no\0" -"netlify.app\0" -"limanowa.pl\0" -"yandex\0" -"ac.za\0" -"her\xc3\xb8y.nordland.no\0" -"in-the-band.net\0" -"kyowa.hokkaido.jp\0""611.to\0" -"ac.zm\0travelers\0" -"funahashi.toyama.jp\0tysfjord.no\0" -"oppdal.no\0" -"minamiminowa.nagano.jp\0" -"pn.it\0pictures\0" -"ac.zw\0gitapp.si\0" -"miura.kanagawa.jp\0" -"uslivinghistory.museum\0" -"ski\0""12hp.de\0" -"zachpomor.pl\0is-a-green.com\0be.gy\0" -"hamburg\0" -"blackbaudcdn.net\0" -"pro.na\0homeunix.org\0" -"aisho.shiga.jp\0verdal.no\0" -"pro.mv\0foodnetwork\0" -"servesarcasm.com\0" -"sky\0" -"miharu.fukushima.jp\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0" -"soc.lk\0" -"depot.museum\0biz.zm\0" -"insurance.aero\0waw.pl\0" -"tana.no\0" -"okinawa.jp\0forde.no\0" -"ginan.gifu.jp\0" -"tokigawa.saitama.jp\0gitpage.si\0" -"cheap\0" -"takinoue.hokkaido.jp\0sydney.museum\0""12hp.at\0" -"otobe.hokkaido.jp\0kaisei.kanagawa.jp\0versicherung\0" -"pro.om\0" -"ass.km\0" -"vercel.dev\0" -"georgia.su\0" -"shopitsite.com\0" -"sukumo.kochi.jp\0" -"agdenes.no\0own.pm\0" -"off.ai\0" -"london.cloudapps.digital\0" -"cloudfront.net\0" -"training\0" -"wakuya.miyagi.jp\0brandywinevalley.museum\0" -"orsites.com\0" -"shaw\0""12hp.ch\0" -"monzaedellabrianza.it\0melhus.no\0" -"matsubara.osaka.jp\0" -"ma.gov.br\0dovre.no\0pro.pr\0" -"oygarden.no\0" -"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0" -"misawa.aomori.jp\0" -"maibara.shiga.jp\0health.museum\0" -"tours\0" -"s3-ap-northeast-2.amazonaws.com\0" -"al.us\0to.gt\0" -"\xec\x82\xbc\xec\x84\xb1\0" -"\xe5\x80\x8b\xe4\xba\xba.hk\0" -"pulawy.pl\0" -"sorum.no\0no-ip.org\0" -"spa\0" -"okoppe.hokkaido.jp\0sosnowiec.pl\0holdings\0" -"higashiomi.shiga.jp\0" -"club\0" -"wloclawek.pl\0" -"kosai.shizuoka.jp\0nasushiobara.tochigi.jp\0soy\0" -"aland.fi\0altervista.org\0" -"sor-odal.no\0global.prod.fastly.net\0" -"s3-website-us-west-2.amazonaws.com\0" -"clinique\0" -"udine.it\0turystyka.pl\0" -"tab\0" -"mo.cn\0dnsdojo.com\0" -"*.developer.app\0" -"to.it\0bydgoszcz.pl\0" -"aioi.hyogo.jp\0tsunan.niigata.jp\0nsupdate.info\0" -"tsurugashima.saitama.jp\0" -"sld.do\0gs.tr.no\0" -"workers.dev\0" -"philately.museum\0pomorze.pl\0" -"brindisi.it\0" -"natori.miyagi.jp\0" -"naustdal.no\0fastlylb.net\0" -"athleta\0tax\0" -"nis.za\0" -"miyashiro.saitama.jp\0" -"kisofukushima.nagano.jp\0" -"srl\0" -"kawanishi.hyogo.jp\0rade.no\0" -"appchizi.com\0" -"spacekit.io\0" -"torsken.no\0pro.tt\0" -"kashima.saga.jp\0" -"tsuno.kochi.jp\0" -"cc.mi.us\0" -"society.museum\0" -"ogata.akita.jp\0tci\0" -"royken.no\0academy\0" -"jampa.br\0work\0" -"film.museum\0gos.pk\0definima.io\0" -"milan.it\0" -"stc\0" -"xs4all.space\0" -"spjelkavik.no\0stcgroup\0" -"to.md\0" -"mining.museum\0" -"pro.vn\0tdk\0" -"nature.museum\0in.na\0" -"friulivegiulia.it\0miyagi.jp\0" -"kamioka.akita.jp\0harstad.no\0jotelulu.cloud\0" -"engineering\0\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0" -"nantan.kyoto.jp\0bindal.no\0fage\0" -"*.uberspace.de\0" -"kristiansand.no\0" -"okawa.fukuoka.jp\0in.ni\0" -"transporte.bo\0lib.az.us\0shia\0" -"sciencecenters.museum\0" -"kasamatsu.gifu.jp\0abbvie\0wroc.pl\0srht.site\0" -"k12.de.us\0" -"tel\0cloudcontrolapp.com\0" -"*.ex.futurecms.at\0" -"cloudaccess.net\0" -"ohi.fukui.jp\0cloud-fr1.unispace.io\0" -"rag-cloud.hosteur.com\0" -"!city.kobe.jp\0" -"coach\0voyage\0" -"likescandy.com\0" -"jewishart.museum\0" -"yashiro.hyogo.jp\0" -"kerryproperties\0" -"kahoku.ishikawa.jp\0" -"\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"jewelry\0\xe6\x9b\xb8\xe7\xb1\x8d\0" -"flog.br\0" -"conference.aero\0bn.it\0ostroleka.pl\0eu.com\0" -"stpetersburg.museum\0xerox\0omniwe.site\0za.org\0" -"fail\0guge\0" -"co.technology\0tuxfamily.org\0" -"mo.it\0firewall-gateway.net\0" -"nord-odal.no\0" -"gs.mr.no\0" -"hokuryu.hokkaido.jp\0itami.hyogo.jp\0" -"minami.fukuoka.jp\0sor-fron.no\0" -"thd\0" -"koshimizu.hokkaido.jp\0arida.wakayama.jp\0" -"voting\0" -"la-spezia.it\0pordenone.it\0" -"lv.ua\0" -"kitakata.fukushima.jp\0" -"servep2p.com\0" -"mihama.mie.jp\0" -"vlog.br\0directory\0" -"taito.tokyo.jp\0" -"vibo-valentia.it\0mito.ibaraki.jp\0ashgabad.su\0" -"education.museum\0" -"lancaster\0" -"barlettatraniandria.it\0in.rs\0" -"musica.ar\0" -"r\xc3\xb8mskog.no\0" -"yonezawa.yamagata.jp\0xy.ax\0" -"yokosuka.kanagawa.jp\0sumida.tokyo.jp\0h\xc3\xb8ylandet.no\0jls-sto2.elastx.net\0" -"shimabara.nagasaki.jp\0" -"trentino-alto-adige.it\0tenei.fukushima.jp\0events\0lolipop.io\0" -"from-or.com\0" -"hamburg.museum\0" -"frontier\0" -"musica.bo\0casino.hu\0" -"mat.br\0" -"\xe4\xb8\xaa\xe4\xba\xba.hk\0" -"yuza.yamagata.jp\0" -"walter\0" -"in.th\0" -"carbonia-iglesias.it\0" -"trentino-s-tirol.it\0" -"svizzera.museum\0" -"birdart.museum\0tjx\0" -"movie\0" -"vard\xc3\xb8.no\0" -"takasago.hyogo.jp\0tatsuno.hyogo.jp\0gorlice.pl\0" -"in.ua\0myfast.host\0" -"raholt.no\0" -"haboro.hokkaido.jp\0from-mn.com\0" -"botanicgarden.museum\0" -"sucks\0" -"shirako.chiba.jp\0" -"shinshinotsu.hokkaido.jp\0" -"shop\0" -"ogaki.gifu.jp\0" -"takanabe.miyazaki.jp\0cc.ca.us\0" -"show\0" -"broker\0" -"in.us\0fans\0" -"sld.pa\0" -"iglesiascarbonia.it\0\xe5\x9c\xa8\xe7\xba\xbf\0" -"help\0scjohnson\0" -"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0paris.museum\0barsy.mobi\0" -"wskr.gov.pl\0" -"chikushino.fukuoka.jp\0" -"tosashimizu.kochi.jp\0jewelry.museum\0cologne\0" -"creation.museum\0" -"g.bg\0myiphost.com\0" -"trader.aero\0" -"delta\0" -"watarai.mie.jp\0" -"sm\xc3\xb8la.no\0" -"aure.no\0" -"yame.fukuoka.jp\0otari.nagano.jp\0\xd1\x83\xd0\xba\xd1\x80\0" -"tsukiyono.gunma.jp\0kyoto\0" -"etc.br\0saigawa.fukuoka.jp\0" -"\xe5\xa8\xb1\xe4\xb9\x90\0" -"lib.as.us\0" -"ozu.ehime.jp\0\xd0\xb1\xd0\xb8\xd0\xb7.\xd1\x80\xd1\x83\xd1\x81\0" -"nago.okinawa.jp\0" -"*.sch.uk\0walmart\0\xe4\xbc\x81\xe4\xb8\x9a\0adimo.co.uk\0" -"works.aero\0" -"iwanai.hokkaido.jp\0" -"orangecloud.tn\0" -"top\0" -"farmers.museum\0" -"farm\0international\0" -"skole.museum\0" -"filegear.me\0" -"eigersund.no\0" -"matsuyama.ehime.jp\0" -"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0" -"kitagata.gifu.jp\0" -"joso.ibaraki.jp\0" -"yokawa.hyogo.jp\0uppo.gov.pl\0green\0" -"ing.pa\0" -"grimstad.no\0fast\0" -"beeldengeluid.museum\0" -"ishigaki.okinawa.jp\0mykolaiv.ua\0" -"travelchannel\0" -"\xd1\x81\xd0\xbf\xd0\xb1.\xd1\x80\xd1\x83\xd1\x81\0" -"shingu.hyogo.jp\0air.museum\0here\0ybo.faith\0" -"santabarbara.museum\0" -"fujimi.saitama.jp\0hammarfeasta.no\0" -"okazaki.aichi.jp\0" -"inder\xc3\xb8y.no\0" -"d.gv.vc\0" -"brussels\0charity\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x80\xd1\x83\xd1\x81\0" -"doctor\0ubs\0" -"masuda.shimane.jp\0" -"trv\0\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0" -"sondrio.it\0guru\0" -"mo.us\0doesntexist.com\0" -"mydissent.net\0" -"naturalsciences.museum\0" -"vang.no\0" -"kosaka.akita.jp\0stateofdelaware.museum\0" -"bjerkreim.no\0" -"utazu.kagawa.jp\0paderborn.museum\0ilovecollege.info\0" -"journalist.aero\0tlon.network\0" -"ikoma.nara.jp\0" -"oita.jp\0" -"es.leg.br\0myforum.community\0" -"polkowice.pl\0" -"pasadena.museum\0" -"va.it\0" -"us-west-1.elasticbeanstalk.com\0" -"mx.na\0volvo\0" -"qsl.br\0" -"tui\0" -"frogans\0jp.kg\0" -"izumo.shimane.jp\0" -"itako.ibaraki.jp\0" -"sampa.br\0miyoshi.saitama.jp\0" -"h\xc3\xa1pmir.no\0" -"*.svc.firenet.ch\0" -"freebox-os.com\0" -"wa.edu.au\0" -"edunet.tn\0" -"is-a-lawyer.com\0" -"budapest\0" -"*.yokohama.jp\0tanohata.iwate.jp\0tx.us\0tvs\0" -"\xe6\x94\xbf\xe5\xba\x9c.hk\0" -"perugia.it\0" -"p.bg\0murayama.yamagata.jp\0jp.md\0" -"*.advisor.ws\0" -"dynv6.net\0" -"verran.no\0" -"yokote.akita.jp\0freiburg.museum\0" -"kyonan.chiba.jp\0" -"ri.it\0" -"yorii.saitama.jp\0" -"vallee-d-aoste.it\0" -"gs.rl.no\0" -"balat.no\0prochowice.pl\0forsale\0" -"\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0diskstation.org\0" -"\xe5\xbe\xb3\xe5\xb3\xb6.jp\0*.landing.myjino.ru\0" -"seiyo.ehime.jp\0austin.museum\0" -"oristano.it\0" -"bio.br\0leangaviika.no\0" -"silk\0" -"tr.eu.org\0" -"ebina.kanagawa.jp\0obuse.nagano.jp\0" -"sa-east-1.elasticbeanstalk.com\0" -"television.museum\0" -"karasuyama.tochigi.jp\0" -"va.no\0" -"fukagawa.hokkaido.jp\0" -"shakotan.hokkaido.jp\0ae.org\0" -"baghdad.museum\0*.sys.qcx.io\0" -"bozen-s\xc3\xbc""dtirol.it\0" -"mitoyo.kagawa.jp\0sina\0" -"asnes.no\0homelinux.com\0" -"8.bg\0" -"cc.ut.us\0" -"civilaviation.aero\0" -"ha.cn\0hurum.no\0" -"mg.gov.br\0" -"flap.id\0" -"*.compute-1.amazonaws.com\0" -"guernsey.museum\0" -"gs.nt.no\0" -"is-a-player.com\0" -"yamashina.kyoto.jp\0no-ip.net\0" -"jur.pro\0" -"asahikawa.hokkaido.jp\0bristol.museum\0" -"ericsson\0" -"erni\0is-a-bruinsfan.org\0barsyonline.com\0" -"campobasso.it\0museumcenter.museum\0" -"grong.no\0durban\0" -"likes-pie.com\0" -"myjino.ru\0" -"nesna.no\0" -"ggf.br\0" -"\xe7\xbd\x91\xe5\xba\x97\0" -"lib.tn.us\0" -"station.museum\0" -"minamiyamashiro.kyoto.jp\0*.platformsh.site\0" -"kumamoto.kumamoto.jp\0orkdal.no\0nh.us\0" -"k12.wy.us\0" -"batsfjord.no\0" -"pleskns.com\0" -"gorge.museum\0" -"akdn\0" -"wolterskluwer\0" -"torahime.shiga.jp\0" -"fukusaki.hyogo.jp\0" -"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0" -"kanna.gunma.jp\0career\0" -"moscow\0" -"shimotsuma.ibaraki.jp\0is-a-candidate.org\0" -"lipsy\0" -"youtube\0" -"g.se\0" -"sphinx.mythic-beasts.com\0" -"neues.museum\0" -"chizu.tottori.jp\0jelastic.regruhosting.ru\0" -"\xe5\x98\x89\xe9\x87\x8c\0" -"kawazu.shizuoka.jp\0" -"uno\0" -"chieti.it\0media\0" -"katsuragi.nara.jp\0" -"*.kobe.jp\0tsuruta.aomori.jp\0" -"meguro.tokyo.jp\0" -"calabria.it\0" -"minnesota.museum\0googleapis.com\0" -"hiroshima.jp\0" -"tarnobrzeg.pl\0uol\0" -"honjo.akita.jp\0" -"shinjo.yamagata.jp\0" -"cc.dc.us\0" -"alabama.museum\0" -"maison\0jelastic.saveincloud.net\0" -"takayama.gifu.jp\0brand.se\0productions\0" -"oji.nara.jp\0" -"abruzzo.it\0" -"meloy.no\0" -"site\0\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0" -"homes\0dnsiskinky.com\0" -"ambulance.museum\0" -"konan.aichi.jp\0tara.saga.jp\0" -"ibaraki.jp\0va.us\0" -"annaka.gunma.jp\0misato.miyagi.jp\0kommunalforbund.se\0" -"y.bg\0ups\0" -"sandiego.museum\0amica\0extraspace\0" -"toyohashi.aichi.jp\0" -"americanart.museum\0" -"barsycenter.com\0" -"republican\0fr-1.paas.massivegrid.net\0" -"\xd0\xba\xd0\xbe\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0" -"dyndns.biz\0" -"gratangen.no\0" -"kalisz.pl\0lib.ca.us\0" -"fedex\0" -"higashiyoshino.nara.jp\0" -"archaeology.museum\0" -"lib.mn.us\0" -"ino.kochi.jp\0" -"meiwa.mie.jp\0from-ia.com\0" -"marnardal.no\0" -"coz.br\0" -"foundation.museum\0" -"kids.us\0" -"ri.us\0" -"plesk.page\0" -"kimobetsu.hokkaido.jp\0" -"zentsuji.kagawa.jp\0" -"sk.ca\0klodzko.pl\0" -"catering\0" -"gz.cn\0" -"rogers\0" -"higashishirakawa.gifu.jp\0" -"ogawa.saitama.jp\0" -"in-addr.arpa\0taobao\0" -"levanger.no\0rnrt.tn\0" -"tamba.hyogo.jp\0romsa.no\0" -"lombardy.it\0study\0" -"kadena.okinawa.jp\0" -"kasahara.gifu.jp\0*.lclstage.dev\0" -"sveio.no\0" -"asso.fr\0" -"ha.no\0" -"oe.yamagata.jp\0" -"tochigi.tochigi.jp\0freemyip.com\0" -"vet\0" -"stavanger.no\0" -"k12.ma.us\0zero\0" -"asso.gp\0honjyo.akita.jp\0oiso.kanagawa.jp\0" -"mitsubishi\0" -"loan\0" -"kani.gifu.jp\0" -"dyn.home-webserver.de\0" -"gifts\0us.reclaim.cloud\0" -"siena.it\0" -"abudhabi\0cust.retrosnub.co.uk\0" -"kasugai.aichi.jp\0" -"val-d-aosta.it\0" -"kaizuka.osaka.jp\0" -"garden\0" -"asso.ht\0kr.it\0omaezaki.shizuoka.jp\0" -"kariya.aichi.jp\0" -"a\xc3\xa9roport.ci\0" -"uk.net\0" -"modelling.aero\0hyuga.miyazaki.jp\0" -"fukushima.hokkaido.jp\0p.se\0" -"isa.us\0" -"vs.it\0tienda\0" -"teaches-yoga.com\0" -"prd.fr\0" -"kalmykia.su\0" -"lomza.pl\0" -"asso.bj\0dnipropetrovsk.ua\0" -"tokamachi.niigata.jp\0vig\0" -"sosa.chiba.jp\0from-il.com\0static.land\0" -"tagawa.fukuoka.jp\0uz.ua\0dyn-berlin.de\0" -"hyogo.jp\0" -"ntr.br\0" -"s\xc3\xbc""dtirol.it\0" -"vin\0" -"shell.museum\0" -"vip\0" -"engerdal.no\0" -"asso.ci\0" -"quicksytes.com\0" -"ichinoseki.iwate.jp\0" -"pisa.it\0oki.fukuoka.jp\0jorpeland.no\0" -"vall\xc3\xa9""eaoste.it\0" -"sg-1.paas.massivegrid.net\0wixsite.com\0" -"design.aero\0discover\0" -"hakuba.nagano.jp\0cool\0" -"shikama.miyagi.jp\0meldal.no\0sko.gov.pl\0uk.eu.org\0grozny.su\0" -"pila.pl\0" -"commbank\0" -"coop\0" -"encyclopedic.museum\0gs.hm.no\0" -"app.lmpm.com\0" -"nakamura.kochi.jp\0ostrowiec.pl\0ownip.net\0" -"osakikamijima.hiroshima.jp\0samnanger.no\0tele.amune.org\0" -"iide.yamagata.jp\0" -"barclaycard\0" -"vestnes.no\0kalmykia.ru\0" -"trani-andria-barletta.it\0muko.kyoto.jp\0" -"cargo.aero\0aa.no\0" -"nichinan.miyazaki.jp\0" -"loft\0*.paywhirl.com\0" -"asso.dz\0" -"stage.nodeart.io\0" -"stjohn.museum\0" -"southcarolina.museum\0komforb.se\0dyndns-web.com\0" -"sb.ua\0" -"\xe5\xba\x83\xe5\xb3\xb6.jp\0" -"airtel\0" -"ferrero\0" -"backplaneapp.io\0" -"for.sale\0" -"pescara.it\0" -"vxl.sh\0" -"iizuka.fukuoka.jp\0kamaishi.iwate.jp\0prd.km\0" -"balsan.it\0fujieda.shizuoka.jp\0" -"yurihonjo.akita.jp\0" -"keisen.fukuoka.jp\0" -"hashikami.aomori.jp\0" -"grozny.ru\0" -"\xe6\x94\xbf\xe5\x8a\xa1\0" -"accident-prevention.aero\0" -"eun.eg\0" -"honda\0" -"pc.it\0" -"prd.mg\0" -"half.host\0" -"pharmacy\0" -"wmflabs.org\0" -"takko.aomori.jp\0zhitomir.ua\0" -"prof.pr\0" -"maniwa.okayama.jp\0" -"geology.museum\0" -"k12.mt.us\0" -"omi.nagano.jp\0" -"forli-cesena.it\0" -"friuli-v-giulia.it\0a.run.app\0" -"lecce.it\0" -"appudo.net\0" -"grp.lk\0" -"ohtawara.tochigi.jp\0ethnology.museum\0homelinux.net\0" -"ikeda.nagano.jp\0" -"rahkkeravju.no\0paris\0" -"vagsoy.no\0" -"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0for-more.biz\0" -"hu.net\0onfabrica.com\0" -"suzuki\0xbox\0" -"tondabayashi.osaka.jp\0" -"dr.na\0" -"kasuya.fukuoka.jp\0" -"qualifioapp.com\0" -"finearts.museum\0y.se\0" -"broker.aero\0bern.museum\0" -"media.aero\0" -"mino.gifu.jp\0is-an-entertainer.com\0" -"fh-muenster.io\0" -"b\xc3\xb8.nordland.no\0" -"olkusz.pl\0" -"hattfjelldal.no\0kr.ua\0yahoo\0" -"s3-eu-central-1.amazonaws.com\0" -"solutions\0" -"takaishi.osaka.jp\0space-to-rent.com\0" -"sandnessj\xc3\xb8""en.no\0fam.pk\0" -"finnoy.no\0" -"svalbard.no\0" -"ichikai.tochigi.jp\0" -"lib.sd.us\0" -"bc.ca\0" -"futurehosting.at\0" -"abashiri.hokkaido.jp\0lardal.no\0" -"erimo.hokkaido.jp\0nishiwaki.hyogo.jp\0" -"uji.kyoto.jp\0" -"reg.dk\0" -"kai.yamanashi.jp\0" -"bungoono.oita.jp\0" -"enonic.io\0" -"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0" -"md.ci\0" -"giize.com\0" -"pc.pl\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0" -"higashiizu.shizuoka.jp\0hitachi\0*.in.futurecms.at\0" -"s\xc3\xb8r-odal.no\0" -"hgtv\0" -"cloud\0" -"pippu.hokkaido.jp\0ikano\0toshiba\0" -"gjemnes.no\0" -"frei.no\0*.firenet.ch\0" -"cinema.museum\0is-a-cpa.com\0" -"act.edu.au\0tobe.ehime.jp\0" -"lib.co.us\0" -"skin\0" -"starnberg.museum\0ally\0" -"obninsk.su\0" -"swiss\0" -"friuli-vegiulia.it\0hs.kr\0" -"flakstad.no\0" -"nara.nara.jp\0" -"mihama.fukui.jp\0" -"\xe5\x95\x86\xe5\x9f\x8e\0" -"fukuchi.fukuoka.jp\0" -"virtualuser.de\0" -"krokstadelva.no\0" -"westus2.azurestaticapps.net\0" -"gonohe.aomori.jp\0" -"cricket\0" -"cloudns.club\0temp-dns.com\0" -"*.statics.cloud\0" -"hitachiota.ibaraki.jp\0kinko.kagoshima.jp\0" -"lig.it\0amsterdam.museum\0" -"from.work\0" -"koriyama.fukushima.jp\0kawachinagano.osaka.jp\0hasuda.saitama.jp\0is.gov.pl\0" -"embroidery.museum\0" -"andria-barletta-trani.it\0" -"bill.museum\0guovdageaidnu.no\0dr.tr\0codes\0" -"hokksund.no\0asso.re\0" -"koka.shiga.jp\0" -"fhv.se\0" -"tm.cy\0" -"tas.edu.au\0" -"portland.museum\0point2this.com\0" -"tolga.no\0win\0beep.pl\0" -"ohira.tochigi.jp\0" -"st.no\0zt.ua\0" -"antiques.museum\0k12.ok.us\0myshopblocks.com\0" -"hamaroy.no\0" -"tm.dz\0" -"pesaro-urbino.it\0gushikami.okinawa.jp\0salat.no\0creditunion\0" -"s3.amazonaws.com\0" -"minamiboso.chiba.jp\0" -"isshiki.aichi.jp\0" -"kakamigahara.gifu.jp\0birthplace.museum\0" -"avellino.it\0virginia.museum\0" -"nyc.mn\0" -"stufftoread.com\0" -"love\0" -"lt.it\0" -"tm.fr\0" -"lerdal.no\0parts\0*.elb.amazonaws.com\0" -"bnr.la\0" -"dynathome.net\0" -"bergamo.it\0tomisato.chiba.jp\0" -"party\0" -"rep.br\0" -"shimonita.gunma.jp\0" -"saga.saga.jp\0" -"lib.il.us\0" -"asso.nc\0video\0" -"is-an-actress.com\0" -"narusawa.yamanashi.jp\0" -"wme\0" -"moriyoshi.akita.jp\0" -"kaminoyama.yamagata.jp\0" -"oseto.nagasaki.jp\0" -"belluno.it\0kurotaki.nara.jp\0averoy.no\0www.ro\0" -"franziskaner.museum\0" -"kanmaki.nara.jp\0" -"tm.hu\0jetzt\0" -"shiwa.iwate.jp\0motobu.okinawa.jp\0atami.shizuoka.jp\0" -"tosu.saga.jp\0" -"katori.chiba.jp\0" -"fortal.br\0" -"shimokawa.hokkaido.jp\0" -"lyngdal.no\0" -"trd.br\0flatanger.no\0" -"miyama.mie.jp\0" -"ryugasaki.ibaraki.jp\0skien.no\0" -"numata.gunma.jp\0amsw.nl\0" -"zushi.kanagawa.jp\0" -"friulivgiulia.it\0amex\0" -"taishi.osaka.jp\0floro.no\0\xc3\xa1laheadju.no\0onred.one\0" -"kitahata.saga.jp\0ski.no\0gr.com\0" -"ddnsgeek.com\0" -"settlers.museum\0\xe5\x81\xa5\xe5\xba\xb7\0" -"s3.ap-south-1.amazonaws.com\0" -"entertainment.aero\0handson.museum\0" -"hiroo.hokkaido.jp\0" -"wow\0" -"stj\xc3\xb8rdalshalsen.no\0ddnsking.com\0" -"ostrowwlkp.pl\0" -"tm.km\0" -"tv.bb\0atsuma.hokkaido.jp\0lund.no\0under.one\0" -"kurume.fukuoka.jp\0" -"bilbao.museum\0balena-devices.com\0" -"halsa.no\0platter-app.com\0" -"democracia.bo\0" -"isesaki.gunma.jp\0" -"res.aero\0" -"omihachiman.shiga.jp\0" -"troms\xc3\xb8.no\0" -"mamurogawa.yamagata.jp\0north.museum\0salvadordali.museum\0alaheadju.no\0" -"tv.bo\0" -"moriya.ibaraki.jp\0" -"tv.br\0saotome.st\0" -"miners.museum\0" -"tm.mc\0estate.museum\0" -"pu.it\0" -"sumoto.kumamoto.jp\0coastaldefence.museum\0trysil.no\0" -"tm.mg\0" -"\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"e164.arpa\0asso.km\0" -"rindal.no\0" -"final\0" -"mukawa.hokkaido.jp\0" -"venezia.it\0pl.ua\0" -"k12.dc.us\0" -"sandvik\0" -"evje-og-hornnes.no\0select\0" -"toyosato.shiga.jp\0" -"vestre-slidre.no\0club.tw\0" -"tm.no\0" -"ine.kyoto.jp\0higashimatsushima.miyagi.jp\0asso.mc\0" -"england.museum\0gotdns.ch\0" -"pharmacien.fr\0dsmynas.org\0" -"fm.br\0paleo.museum\0slupsk.pl\0watch\0wtc\0" -"divtasvuodna.no\0groks-this.info\0" -"wtf\0" -"bl.it\0" -"sanda.hyogo.jp\0uber.space\0" -"pubol.museum\0b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0" -"ryuoh.shiga.jp\0" -"express.aero\0pcloud.host\0" -"ppg.br\0" -"dattolocal.net\0" -"handa.aichi.jp\0" -"rep.kp\0" -"paragliding.aero\0burghof.museum\0sibenik.museum\0" -"steiermark.museum\0" -"tm.pl\0" -"chernihiv.ua\0" -"gamo.shiga.jp\0" -"uni5.net\0" -"skj\xc3\xa5k.no\0" -"kartuzy.pl\0lt.ua\0" -"k12.ak.us\0from-ut.com\0" -"chiyoda.tokyo.jp\0panama.museum\0" -"time.museum\0" -"aerobatic.aero\0*.compute.amazonaws.com.cn\0" -"bodo.no\0" -"soc.srcf.net\0" -"as.us\0" -"oyabe.toyama.jp\0" -"trapani.it\0" -"galsa.no\0" -"kawagoe.saitama.jp\0is-very-sweet.org\0" -"nishikawa.yamagata.jp\0" -"hvaler.no\0" -"md.us\0" -"maebashi.gunma.jp\0" -"katagami.akita.jp\0store.nf\0" -"dyndns-free.com\0" -"dev.br\0nf.ca\0tm.ro\0marshalls\0" -"politie\0lelux.site\0" -"buzen.fukuoka.jp\0" -"val-daosta.it\0badajoz.museum\0tm.se\0" -"tv.im\0" -"ibestad.no\0" -"onga.fukuoka.jp\0kumagaya.saitama.jp\0" -"kuokgroup\0" -"sevastopol.ua\0" -"tv.it\0" -"kurashiki.okayama.jp\0" -"umig.gov.pl\0chimkent.su\0" -"moss.no\0" -"mypep.link\0" -"homeunix.com\0" -"vagan.no\0" -"trentino-s\xc3\xbc""d-tirol.it\0travelersinsurance\0" -"nakatombetsu.hokkaido.jp\0" -"xin\0" -"inagawa.hyogo.jp\0tv.kg\0" -"trentino-sud-tirol.it\0" -"gj\xc3\xb8vik.no\0" -"yotsukaido.chiba.jp\0shishikui.tokushima.jp\0" -"wassamu.hokkaido.jp\0il.us\0*.compute.estate\0dnsfor.me\0" -"kuromatsunai.hokkaido.jp\0" -"\xc3\xa5rdal.no\0" -"agrigento.it\0" -"ipifony.net\0hicam.net\0" -"bushey.museum\0" -"toei.aichi.jp\0" -"mesaverde.museum\0" -"nom.ad\0e.bg\0" -"fm.it\0nom.ae\0" -"haebaru.okinawa.jp\0nom.af\0" -"nom.ag\0mymailer.com.tw\0pyatigorsk.ru\0" -"wanouchi.gifu.jp\0poker\0ntdll.top\0nom.ai\0" -"archi\0homedepot\0" -"holiday\0" -"nom.al\0" -"ooshika.nagano.jp\0mashiko.tochigi.jp\0" -"\xe5\x8f\xb0\xe6\xb9\xbe\0jelastic.team\0" -"shinshiro.aichi.jp\0" -"democrat\0" -"norfolk.museum\0phone\0office-on-the.net\0shacknet.nu\0" -"pilots.museum\0" -"tv.na\0knightpoint.systems\0" -"\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0" -"vefsn.no\0" -"homelinux.org\0" -"fireweb.app\0" -"beiarn.no\0" -"shikabe.hokkaido.jp\0" -"shiftcrypto.io\0" -"yatsushiro.kumamoto.jp\0" -"virtual-user.de\0" -"nom.bz\0nyan.to\0" -"\xe0\xba\xa5\xe0\xba\xb2\xe0\xba\xa7\0" -"nom.cl\0" -"sicily.it\0" -"nom.co\0sayama.osaka.jp\0verisign\0" -"yakumo.hokkaido.jp\0withgoogle.com\0" -"realestate\0" -"law.za\0sport\0" -"ce.it\0maif\0" -"telebit.app\0" -"miyada.nagano.jp\0" -"\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0awsmppl.com\0nh-serv.co.uk\0" -"toyono.osaka.jp\0pony.club\0" -"tm.za\0" -"museum.tt\0" -"sk\xc3\xa5nland.no\0" -"website.yandexcloud.net\0" -"health.nz\0" -"yamanouchi.nagano.jp\0circle\0data\0" -"org.ac\0trentino-suedtirol.it\0" -"contractors\0" -"org.ae\0mar.it\0wakkanai.hokkaido.jp\0store.ve\0" -"org.af\0date\0is-a-designer.com\0" -"org.ag\0is-lost.org\0" -"org.ai\0" -"otaki.saitama.jp\0" -"org.al\0" -"org.am\0fm.no\0\xe5\xa4\xa7\xe6\x8b\xbf\0freeddns.us\0" -"stor-elvdal.no\0" -"nom.es\0gb.net\0" -"org.ba\0giving\0istanbul\0" -"org.ar\0org.bb\0mymediapc.net\0" -"caracal.mythic-beasts.com\0" -"org.au\0" -"alfaromeo\0" -"ugim.gov.pl\0" -"org.bh\0pup.gov.pl\0" -"org.bi\0" -"org.az\0ide.kyoto.jp\0hol.no\0" -"uvic.museum\0" -"org.bm\0" -"org.bn\0rebun.hokkaido.jp\0choyo.kumamoto.jp\0kasukabe.saitama.jp\0" -"org.bo\0nom.fr\0" -"taranto.it\0washingtondc.museum\0" -"airport.aero\0nom.gd\0" -"org.br\0nom.ge\0" -"org.bs\0" -"org.bt\0" -"sic.it\0builtwithdark.com\0" -"izumisano.osaka.jp\0" -"the.br\0org.bw\0" -"org.ci\0kuji.iwate.jp\0yahaba.iwate.jp\0nom.gl\0" -"org.bz\0tv.sd\0" -"sos.pl\0" -"org.cn\0" -"org.co\0sport.hu\0monza-e-della-brianza.it\0" -"nom.gt\0" -"gyeongbuk.kr\0planetarium.museum\0equipment\0redstone\0" -"naie.hokkaido.jp\0obihiro.hokkaido.jp\0" -"org.cu\0" -"azurewebsites.net\0qcx.io\0" -"org.cw\0" -"minami-alps.yamanashi.jp\0" -"org.cy\0abr.it\0" -"nerdpol.ovh\0" -"nom.hn\0" -"org.dm\0" -"bu.no\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0photo\0" -"org.do\0" -"ushiku.ibaraki.jp\0claims\0" -"org.ec\0br\xc3\xb8nn\xc3\xb8ysund.no\0" -"chernigov.ua\0" -"org.ee\0kamo.niigata.jp\0marker.no\0" -"org.eg\0" -"iwade.wakayama.jp\0tv.tr\0" -"tanabe.wakayama.jp\0nordreisa.no\0webhosting.be\0" -"org.dz\0nom.im\0" -"bolivia.bo\0canon\0from-tn.com\0" -"store.ro\0" -"principe.st\0tv.tz\0" -"codespot.com\0" -"demo.jelastic.com\0" -"org.es\0" -"org.et\0" -"tako.chiba.jp\0kanegasaki.iwate.jp\0" -"hermes\0" -"org.fj\0shari.hokkaido.jp\0" -"l\xc3\xa1hppi.no\0sande.vestfold.no\0" -"goip.de\0" -"n.bg\0org.fm\0" -"cloud.interhostsolutions.be\0nom.ke\0*.s5y.io\0editorx.io\0" -"store.st\0" -"org.ge\0bulsan.it\0intl.tn\0" -"org.gg\0rg.it\0" -"org.gh\0" -"org.gi\0askim.no\0" -"nom.km\0" -"sayo.hyogo.jp\0" -"org.gl\0viking\0" -"org.gn\0giske.no\0" -"origins\0" -"org.gp\0plo.ps\0" -"org.gr\0" -"bauhaus\0" -"org.gt\0health.vn\0" -"org.gu\0" -"nom.li\0" -"miyawaka.fukuoka.jp\0oshu.iwate.jp\0ap-southeast-1.elasticbeanstalk.com\0" -"org.gy\0" -"vao.it\0" -"org.hk\0" -"org.hn\0" -"\xc3\xa5""fjord.no\0" -"emilia-romagna.it\0" -"is-certified.com\0nom.lv\0" -"org.ht\0nom.mg\0axis.museum\0bci.dnstrace.pro\0" -"org.hu\0" -"from-la.net\0nom.mk\0" -"org.il\0wedding\0" -"org.im\0" -"6.bg\0org.in\0museum.mv\0" -"go.ci\0cn.it\0museum.mw\0" -"nom.nc\0" -"org.iq\0" -"org.ir\0" -"org.is\0" -"frosinone.it\0stuttgart.museum\0" -"org.je\0" -"godo.gifu.jp\0nom.ni\0" -"seihi.nagasaki.jp\0museum.no\0domains\0*.kunden.ortsinfo.at\0" -"go.cr\0no.it\0" -"s3-eu-west-2.amazonaws.com\0" -"naturalhistorymuseum.museum\0ufcfan.org\0" -"org.jo\0meeres.museum\0" -"roma.it\0nom.nu\0" -"kanazawa.ishikawa.jp\0museum.om\0\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0xxx\0" -"kr.com\0" -"matsumoto.nagano.jp\0org.kg\0" -"lierne.no\0" -"org.ki\0" -"oga.akita.jp\0\xe6\x96\xb0\xe9\x97\xbb\0" -"org.km\0" -"org.kn\0nom.pa\0" -"org.kp\0nrw.museum\0clicketcloud.com\0" -"org.la\0r\xc3\xb8""d\xc3\xb8y.no\0" -"org.lb\0n\xc3\xa6r\xc3\xb8y.no\0nom.pe\0home.dyndns.org\0" -"org.lc\0lind\xc3\xa5s.no\0" -"kushimoto.wakayama.jp\0" -"\xc3\xb8ygarden.no\0" -"imperia.it\0org.kw\0dentist\0xyz\0" -"homeoffice.gov.uk\0" -"fussa.tokyo.jp\0org.ky\0nom.pl\0*.on-rio.io\0" -"anamizu.ishikawa.jp\0org.kz\0" -"noto.ishikawa.jp\0org.lk\0" -"is-a-guru.com\0" -"nom.qa\0" -"org.ma\0" -"yahiko.niigata.jp\0org.lr\0" -"bihoro.hokkaido.jp\0org.ls\0" -"nom.pw\0" -"org.me\0skedsmo.no\0" -"org.lv\0" -"org.mg\0" -"kota.aichi.jp\0" -"org.ly\0" -"gausdal.no\0" -"org.mk\0" -"org.ml\0dev.vu\0" -"club.aero\0nasu.tochigi.jp\0" -"nx.cn\0idf.il\0takahama.aichi.jp\0org.mn\0" -"org.mo\0e.se\0" -"gripe\0" -"org.na\0" -"nom.re\0centralus.azurestaticapps.net\0" -"org.ms\0mypets.ws\0" -"org.mt\0""2038.io\0" -"org.mu\0" -"org.mv\0" -"org.mw\0org.ng\0" -"org.mx\0unj\xc3\xa1rga.no\0" -"nsw.au\0org.my\0org.ni\0" -"org.mz\0vana\0g.vbrplsbx.io\0" -"\xe8\xb0\xb7\xe6\xad\x8c\0" -"nom.ro\0" -"psse.gov.pl\0" -"masoy.no\0" -"nom.rs\0" -"vanguard\0" -"org.nr\0" -"from-al.com\0" -"web.bo\0kouhoku.saga.jp\0farmequipment.museum\0" -"nom.si\0" -"kg.kr\0" -"\xe5\x9f\xbc\xe7\x8e\x89.jp\0mosjoen.no\0qoto.io\0" -"go.id\0org.nz\0" -"drammen.no\0org.om\0" -"wa.au\0owariasahi.aichi.jp\0" -"oregon.museum\0from-co.net\0" -"org.pa\0nom.st\0" -"act.au\0shirakawa.gifu.jp\0" -"samsclub\0" -"web.co\0" -"org.pe\0" -"org.pf\0opencraft.hosting\0" -"nom.tj\0" -"org.ph\0" -"w.bg\0" -"go.it\0murakami.niigata.jp\0nom.tm\0" -"2000.hu\0ueda.nagano.jp\0org.pk\0" -"pa.gov.br\0harvestcelebration.museum\0org.pl\0" -"org.pn\0" -"flekkefjord.no\0" -"ninohe.iwate.jp\0" -"org.qa\0" -"org.pr\0" -"org.ps\0science\0" -"web.do\0org.pt\0nom.ug\0" -"go.jp\0muika.niigata.jp\0" -"sncf\0" -"org.py\0community-pro.net\0" -"go.ke\0" -"yamada.fukuoka.jp\0" -"r\xc3\xb8yken.no\0nom.vc\0" -"ketrzyn.pl\0u2.xnbay.com\0" -"you\0" -"zlg.br\0nom.vg\0" -"fot.br\0nom.uy\0" -"higashiosaka.osaka.jp\0" -"go.kr\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0" -"jelastic.dogado.eu\0" -"tamakawa.fukushima.jp\0leka.no\0" -"pb.gov.br\0swatch\0" -"genkai.saga.jp\0cloudera.site\0" -"tokuyama.yamaguchi.jp\0org.ro\0" -"noda.iwate.jp\0org.sa\0" -"org.sb\0" -"org.rs\0org.sc\0" -"org.sd\0s3.ap-northeast-2.amazonaws.com\0" -"org.se\0org.ru\0" -"org.rw\0org.sg\0" -"viterbo.it\0org.sh\0" -"\xe5\x8d\x83\xe8\x91\x89.jp\0" -"izumizaki.fukushima.jp\0bel.tr\0" -"eurovision\0" -"org.sl\0twmail.cc\0" -"alta.no\0zp.gov.pl\0org.sn\0" -"shinto.gunma.jp\0ando.nara.jp\0org.so\0" -"gx.cn\0ybo.trade\0" -"yoita.niigata.jp\0" -"ogliastra.it\0kui.hiroshima.jp\0org.ss\0" -"kawakami.nagano.jp\0org.st\0dnshome.de\0" -"shonai.fukuoka.jp\0maritimo.museum\0org.sv\0" -"saogonca.br\0basketball\0apigee.io\0" -"omachi.nagano.jp\0realty\0" -"org.sy\0" -"web.gu\0org.sz\0org.tj\0jobs.tt\0" -"cn.ua\0" -"org.tm\0" -"tohma.hokkaido.jp\0org.tn\0ro.eu.org\0" -"org.to\0" -"org.ua\0cloudns.info\0" -"store.bb\0sarufutsu.hokkaido.jp\0org.tr\0" -"yaotsu.gifu.jp\0org.tt\0" -"ibigawa.gifu.jp\0" -"org.tw\0org.ug\0" -"muncie.museum\0schoenbrunn.museum\0" -"web.id\0macerata.it\0" -"org.uk\0" -"ivanovo.su\0" -"\xe7\xbb\x84\xe7\xbb\x87.hk\0porsanger.no\0in-butter.de\0" -"nom.za\0" -"sweetpepper.org\0" -"sharp\0" -"snaase.no\0lib.vi.us\0org.vc\0web.in\0" -"miyako.iwate.jp\0farsund.no\0" -"org.ve\0in-berlin.de\0" -"game.tw\0" -"sling\0" -"org.uy\0org.vi\0usr.cloud.muni.cz\0" -"org.uz\0" -"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0iserv.dev\0shopware.store\0" -"motorcycle.museum\0cc.sc.us\0" -"sener\0" -"org.vn\0khakassia.su\0chirurgiens-dentistes-en-france.fr\0" -"kyotamba.kyoto.jp\0annefrank.museum\0cn.vu\0" -"jambyl.su\0customer.mythic-beasts.com\0" -"ventures\0" -"nishiokoppe.hokkaido.jp\0" -"hemne.no\0" -"nerima.tokyo.jp\0org.vu\0" -"catholic.edu.au\0" -"jobs\0" -"n.se\0yun\0store.dk\0" -"go.pw\0" -"niki.hokkaido.jp\0" -"tsubata.ishikawa.jp\0oyama.tochigi.jp\0" -"org.ws\0" -"eu.int\0skype\0" -"ballangen.no\0" -"joinville.br\0" -"cody.museum\0maryland.museum\0" -"nsn.us\0" -"softbank\0si.eu.org\0nov.ru\0" -"nagahama.shiga.jp\0" -"web.lk\0" -"org.ye\0" -"yoichi.hokkaido.jp\0" -"honefoss.no\0" -"trentino.it\0dclk\0dsmynas.net\0" -"surgeonshall.museum\0cc.ok.us\0cog.mi.us\0" -"nov.su\0" -"teo.br\0homesecuritymac.com\0" -"org.za\0" -"ah.cn\0bluebite.io\0dscloud.mobi\0" -"\xe9\xa3\x9f\xe5\x93\x81\0" -"org.yt\0" -"chiba.jp\0" -"adm.br\0shiranuka.hokkaido.jp\0web.nf\0" -"dyndns.tv\0" -"tado.mie.jp\0org.zm\0with.marketing\0" -"web.ni\0go.th\0" -"si.it\0" -"go.tj\0" -"kyowa.akita.jp\0kustanai.ru\0" -"org.zw\0" -"basilicata.it\0" -"go.ug\0zip\0" -"volkenkunde.museum\0" -"tabuse.yamaguchi.jp\0go.tz\0" -"government.aero\0" -"motosu.gifu.jp\0" -"\xe5\x8f\xb0\xe7\x81\xa3\0" -"funagata.yamagata.jp\0lib.ny.us\0kustanai.su\0" -"est-mon-blogueur.com\0" -"moma.museum\0" -"nedre-eiker.no\0" -"cc.ks.us\0sk.eu.org\0" -"secaas.hk\0" -"web.pk\0joburg\0" -"kawanehon.shizuoka.jp\0bykle.no\0" -"sano.tochigi.jp\0s3.eu-west-3.amazonaws.com\0" -"ski.museum\0" -"aomori.jp\0lk3.ru\0" -"cc.vt.us\0" -"dyndns.ws\0" -"soma.fukushima.jp\0nikon\0" -"comsec\0" -"pa.it\0" -"notodden.no\0style\0" -"mobara.chiba.jp\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" -"blockbuster\0" -"lugansk.ua\0" -"ee.eu.org\0" -"unjarga.no\0sola.no\0" -"kaneyama.fukushima.jp\0" -"takayama.nagano.jp\0deno-staging.dev\0" -"tokke.no\0translate.goog\0" -"sakuho.nagano.jp\0war.museum\0" -"hangout\0" -"property\0debian.net\0" -"k\xc3\xa5""fjord.no\0" -"oz.au\0kamiizumi.saitama.jp\0research.museum\0pvt.k12.ma.us\0" -"cloud.jelastic.open.tim.it\0" -"from-hi.com\0" -"oh.us\0" -"from-ny.net\0futuremailing.at\0*.ex.ortsinfo.at\0" -"pi.gov.br\0" -"ru.eu.org\0se.eu.org\0" -"web.tj\0" -"ochi.kochi.jp\0" -"li.it\0lawyer\0" -"kids.museum\0", - -"lucerne.museum\0hopto.me\0" -"takata.fukuoka.jp\0" -"w.se\0web.tr\0finance\0" -"yasuoka.nagano.jp\0folionetwork.site\0syno-ds.de\0" -"frogn.no\0" -"iwi.nz\0" -"rimini.it\0" -"yukuhashi.fukuoka.jp\0\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0" -"swidnica.pl\0" -"*.devcdnaccesso.com\0" -"nishikata.tochigi.jp\0basicserver.io\0" -"lib.hi.us\0ma.leg.br\0" -"usarts.museum\0web.ve\0" -"chikuhoku.nagano.jp\0" -"choshi.chiba.jp\0stackhero-network.com\0" -"barsy.co.uk\0" -"creditcard\0" -"tempioolbia.it\0minokamo.gifu.jp\0business\0" -"dy.fi\0" -"ainan.ehime.jp\0" -"mb.ca\0" -"tone.ibaraki.jp\0" -"wa.us\0" -"n\xc3\xa1vuotna.no\0photography\0" -"contagem.br\0botanicalgarden.museum\0technology\0" -"castle.museum\0convent.museum\0halloffame.museum\0" -"kiyosu.aichi.jp\0" -"gildesk\xc3\xa5l.no\0isa-geek.org\0" -"herad.no\0" -"adv.br\0mikawa.yamagata.jp\0" -"mihama.aichi.jp\0dlugoleka.pl\0" -"zgora.pl\0" -"sr.it\0loabat.no\0" -"usculture.museum\0giehtavuoatna.no\0" -"fl\xc3\xa5.no\0" -"diskussionsbereich.de\0" -"jab.br\0helsinki\0qbuser.com\0" -"ah.no\0myddns.rocks\0" -"horten.no\0" -"rocks\0" -"i234.me\0" -"sunagawa.hokkaido.jp\0hitachinaka.ibaraki.jp\0" -"firmdale\0" -"cc.ak.us\0" -"geometre-expert.fr\0" -"school.museum\0from-id.com\0" -"glass.museum\0web.za\0" -"fribourg.museum\0" -"ayabe.kyoto.jp\0" -"hitachi.ibaraki.jp\0akiruno.tokyo.jp\0" -"omg.lol\0" -"omitama.ibaraki.jp\0nikolaev.ua\0" -"taketa.oita.jp\0aca.pro\0hosting\0sohu\0" -"naklo.pl\0" -"boston.museum\0" -"amot.no\0" -"gotdns.com\0" -"hemnes.no\0" -"shima.mie.jp\0dp.ua\0" -"vald-aosta.it\0" -"kamitsue.oita.jp\0" -"shimane.jp\0tokoname.aichi.jp\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0" -"railroad.museum\0pramerica\0" -"taku.saga.jp\0country\0resindevice.io\0" -"francaise.museum\0" -"pe.gov.br\0" -"kotoura.tottori.jp\0s3.dualstack.ap-northeast-1.amazonaws.com\0" -"blogsyte.com\0" -"fuso.aichi.jp\0" -"okinawa\0en-root.fr\0" -"aosta-valley.it\0ralingen.no\0""4u.com\0" -"tanagura.fukushima.jp\0protonet.io\0" -"oshima.yamaguchi.jp\0nome.pt\0" -"cc.id.us\0dyndns-ip.com\0" -"g12.br\0" -"uchiko.ehime.jp\0" -"pa.us\0" -"westeurope.azurestaticapps.net\0" -"n\xc3\xa5\xc3\xa5mesjevuemie.no\0" -"aq.it\0ba.it\0" -"qc.ca\0" -"osasco.br\0ujitawara.kyoto.jp\0ap-northeast-2.elasticbeanstalk.com\0" -"rifu.miyagi.jp\0" -"indian.museum\0nowtv\0virgin\0" -"forgot.her.name\0" -"nctu.me\0" -"mb.it\0homegoods\0" -"ltda\0" -"stuff-4-sale.us\0" -"uda.nara.jp\0" -"yombo.me\0" -"hyatt\0" -"music.museum\0" -"york.museum\0" -"kyotango.kyoto.jp\0" -"fortmissoula.museum\0co.events\0" -"*.gateway.dev\0" -"from-mt.com\0from-nd.com\0" -"piedmont.it\0" -"song\0" -"thingdustdata.com\0" -"kawanishi.yamagata.jp\0" -"tires\0" -"mobi.gp\0" -"owani.aomori.jp\0" -"ky.us\0" -"k12.ut.us\0ath.cx\0" -"pol.dz\0" -"warmia.pl\0" -"\xe9\xa6\x99\xe6\xb8\xaf\0" -"bj.cn\0aogashima.tokyo.jp\0sokndal.no\0ismaili\0" -"news.hu\0test.tj\0sony\0" -"from-dc.com\0" -"yachts\0" -"agents.aero\0" -"b\xc3\xa1l\xc3\xa1t.no\0baby\0" -"belau.pw\0" -"utashinai.hokkaido.jp\0" -"pa.gov.pl\0" -"riopreto.br\0even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0" -"app.br\0" -"biei.hokkaido.jp\0elblag.pl\0deal\0bookonline.app\0" -"edu.eu.org\0" -"radoy.no\0" -"ws.na\0" -"taiji.wakayama.jp\0" -"rodeo\0" -"\xe7\x82\xb9\xe7\x9c\x8b\0httpbin.org\0" -"k12.ga.us\0" -"nishinoomote.kagoshima.jp\0horse\0" -"reggio-calabria.it\0wajima.ishikawa.jp\0" -"verm\xc3\xb6gensberatung\0collegefan.org\0" -"adv.mz\0lunner.no\0" -"ia.us\0" -"enterprises\0" -"m\xc3\xa5s\xc3\xb8y.no\0" -"cc.me.us\0\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0test.ru\0" -"yabu.hyogo.jp\0cn.eu.org\0" -"kouyama.kagoshima.jp\0" -"pol.ht\0" -"hasvik.no\0" -"cc.wv.us\0azure\0" -"is-with-theband.com\0" -"bozen.it\0" -"\xd9\x82\xd8\xb7\xd8\xb1\0capitalone\0" -"global\0" -"sardegna.it\0" -"military.museum\0pisz.pl\0isa-geek.com\0" -"ouchi.saga.jp\0fiat\0" -"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0americanexpress\0prvcy.page\0" -"g\xc3\xbcnstigliefern.de\0" -"praxi\0" -"shibata.miyagi.jp\0sandnes.no\0" -"rio.br\0" -"pr.gov.br\0" -"citadel\0" -"seiro.niigata.jp\0" -"nord-fron.no\0" -"git-repos.de\0" -"smola.no\0" -"app.gp\0" -"tokushima.tokushima.jp\0" -"tranibarlettaandria.it\0" -"house.museum\0" -"cc.tn.us\0microsoft\0" -"fukushima.fukushima.jp\0jefferson.museum\0" -"trentin-sudtirol.it\0ddns.net\0" -"fido\0" -"paris.eu.org\0" -"catanzaro.it\0" -"midsund.no\0" -"x443.pw\0" -"s3-external-1.amazonaws.com\0" -"kv\xc3\xa6nangen.no\0" -"madrid.museum\0" -"sandnessjoen.no\0" -"doesntexist.org\0" -"s\xc3\xb8rfold.no\0" -"s3-ap-southeast-2.amazonaws.com\0" -"its.me\0" -"kyuragi.saga.jp\0sn\xc3\xa5sa.no\0" -"senseering.net\0" -"artcenter.museum\0in-vpn.org\0" -"flanders.museum\0" -"tirol\0from.marketing\0" -"nabari.mie.jp\0mimata.miyazaki.jp\0cy.eu.org\0" -"miho.ibaraki.jp\0" -"iopsys.se\0" -"kizu.kyoto.jp\0" -"kasai.hyogo.jp\0" -"contemporary.museum\0from-wv.com\0" -"oyamazaki.kyoto.jp\0" -"aip.ee\0" -"det.br\0narita.chiba.jp\0" -"snillfjord.no\0" -"\xe9\xa4\x90\xe5\x8e\x85\0to.work\0inc.hk\0" -"jprs\0" -"is.it\0" -"tt.im\0" -"univ.sn\0" -"oguchi.aichi.jp\0audnedaln.no\0" -"nemuro.hokkaido.jp\0bargains\0" -"ud.it\0sango.nara.jp\0malvik.no\0" -"cz.eu.org\0" -"\xe9\xa6\x99\xe5\xb7\x9d.jp\0bible\0" -"medio-campidano.it\0onomichi.hiroshima.jp\0" -"minamiuonuma.niigata.jp\0band\0sandcats.io\0" -"condos\0" -"jele.club\0" -"matsushima.miyagi.jp\0bank\0isteingeek.de\0" -"studio\0" -"berkeley.museum\0mansion.museum\0" -"dell\0" -"bonn.museum\0k12.sc.us\0" -"unazuki.toyama.jp\0songdalen.no\0\xeb\x8b\xb7\xec\xbb\xb4\0" -"swinoujscie.pl\0cc.mn.us\0agakhan\0" -"bulsan-suedtirol.it\0" -"okaya.nagano.jp\0" -"dk.eu.org\0" -"kitaura.miyazaki.jp\0hayakawa.yamanashi.jp\0" -"c.bg\0kitadaito.okinawa.jp\0ota.tokyo.jp\0" -"glade\0" -"watari.miyagi.jp\0berlev\xc3\xa5g.no\0" -"kamagaya.chiba.jp\0is-a-soxfan.org\0" -"jl.cn\0" -"guam.gu\0oi.kanagawa.jp\0" -"ayagawa.kagawa.jp\0hanno.saitama.jp\0cards\0" -"aibetsu.hokkaido.jp\0kanan.osaka.jp\0" -"tsukui.kanagawa.jp\0" -"boldlygoingnowhere.org\0" -"memorial.museum\0" -"perspecta.cloud\0" +"trentino-sued-tirol.it\0shishikui.tokushima.jp\0edu.sd\0" +"edu.ru\0" "arab\0" -"management\0" -"bib.br\0amazon\0" -"\xe5\x85\xac\xe7\x9b\x8a\0" -"otama.fukushima.jp\0" -"film\0" -"cc.hn\0" -"katashina.gunma.jp\0" -"s3.dualstack.eu-west-3.amazonaws.com\0" -"lib.md.us\0" -"yamagata.ibaraki.jp\0pol.tr\0insurance\0" -"valleeaoste.it\0nanbu.tottori.jp\0beauty\0" -"amsterdam\0" -"belem.br\0" -"customer.speedpartner.de\0" -"indiana.museum\0nannestad.no\0" -"hotels\0meet\0" -"kokonoe.oita.jp\0pagefrontapp.com\0" -"cnt.br\0" -"g\xc3\xa1ivuotna.no\0" -"bs.it\0" -"gd.cn\0edgecompute.app\0" -"rochester.museum\0" -"atl.jelastic.vps-host.net\0" -"mt.it\0kimino.wakayama.jp\0" -"usui.fukuoka.jp\0spot\0wmcloud.org\0" -"de.eu.org\0mg.leg.br\0myactivedirectory.com\0" -"tainai.niigata.jp\0izumiotsu.osaka.jp\0" -"nanyo.yamagata.jp\0" -"casadelamoneda.museum\0is-a-patsfan.org\0" -"tsukuba.ibaraki.jp\0" -"miyazaki.miyazaki.jp\0" -"wsa.gov.pl\0" -"hirono.fukushima.jp\0hino.tokyo.jp\0is-a-teacher.com\0" -"mk.ua\0" -"nankoku.kochi.jp\0dray-dns.de\0" -"erotika.hu\0shiftedit.io\0" -"from-mi.com\0" -"kashiba.nara.jp\0" -"az.us\0" -"shunan.yamaguchi.jp\0k12.ks.us\0auction\0" -"olbiatempio.it\0" -"molise.it\0" -"maritime.museum\0heroy.nordland.no\0" -"plurinacional.bo\0" -"hitachiomiya.ibaraki.jp\0murmansk.su\0" -"wroclaw.pl\0" -"desi\0" -"yamanashi.jp\0" -"iwate.iwate.jp\0" -"suifu.ibaraki.jp\0jele.host\0" +"sola.no\0edu.sg\0" +"oncilla.mythic-beasts.com\0" +"nago.okinawa.jp\0mima.tokushima.jp\0edu.sl\0sites.static.land\0" +"filegear.me\0" +"pro.az\0edu.sn\0" +"broker.aero\0hyllestad.no\0edu.so\0v-info.info\0" +"natori.miyagi.jp\0" +"corporation.museum\0" +"moskenes.no\0edu.ss\0" +"takayama.gunma.jp\0takehara.hiroshima.jp\0hadano.kanagawa.jp\0edu.st\0" +"pro.br\0edu.sv\0" +"c.bg\0" +"kikugawa.shizuoka.jp\0" +"edu.sy\0*.ocs.customer-oci.com\0*.quipelements.com\0" +"edu.tj\0*.gateway.dev\0" +"int.pt\0budapest\0" +"scienceandhistory.museum\0edu.tm\0" +"coop.rw\0edu.to\0" "ako.hyogo.jp\0" -"milano.it\0go.dyndns.org\0" -"fjaler.no\0" -"hiraya.nagano.jp\0" -"user.aseinet.ne.jp\0us.org\0ddnss.de\0" -"keymachine.de\0" -"stokke.no\0" -"campania.it\0familyds.net\0" -"cc.na\0" +"bill.museum\0edu.ua\0fire\0" +"edu.tr\0" +"fitjar.no\0conn.uk\0" +"muko.kyoto.jp\0swidnica.pl\0edu.tt\0" +"l.bg\0edu.tw\0" +"kaga.ishikawa.jp\0myfritz.net\0base.shop\0" +"ancona.it\0toyooka.hyogo.jp\0demon.nl\0" +"pro.cy\0mobi.na\0" +"eid.no\0" +"eu.int\0onjuku.chiba.jp\0kotohira.kagawa.jp\0publ.pt\0" +"desi\0" +"mobi.ng\0edu.vc\0" +"lodi.it\0fish\0" +"edu.ve\0from-or.com\0" +"berlin\0" +"u.bg\0pro.ec\0" +"shinagawa.tokyo.jp\0" +"edu.uy\0" +"masoy.no\0no-ip.co.uk\0" +"satosho.okayama.jp\0coop.tt\0" +"mb.ca\0int.ru\0" +"edu.vn\0" +"tromsa.no\0" +"wakayama.jp\0" +"doesntexist.com\0" +"ed.pw\0" +"tsuruga.fukui.jp\0sytes.net\0" +"forum.hu\0edu.vu\0" +"slattum.no\0" +"ogose.saitama.jp\0now-dns.top\0" +"estate.museum\0" +"juif.museum\0" +"pro.fj\0coop.mv\0" +"coop.mw\0fedje.no\0" +"int.tj\0" +"edu.ws\0" +"torahime.shiga.jp\0*.banzai.cloud\0" +"gose.nara.jp\0" +"servehalflife.com\0" +"kviteseid.no\0unjarga.no\0is-a-patsfan.org\0" +"umbria.it\0ikata.ehime.jp\0int.tt\0" +"cr.ua\0paas.massivegrid.com\0" +"hs.kr\0" +"tromso.no\0k12.sc.us\0" +"lima.zone\0" +"minamiise.mie.jp\0" +"edu.ye\0" +"ha.no\0cc.sc.us\0myspreadshop.co.uk\0" +"wios.gov.pl\0" +"sex.hu\0int.ve\0" +"g12.br\0pony.club\0" +"snillfjord.no\0" +"motoyama.kochi.jp\0" +"edu.za\0" +"dabur\0" +"eidsberg.no\0mo\xc3\xa5reke.no\0" +"tenkawa.nara.jp\0northwesternmutual\0oxa.cloud\0" +"coloradoplateau.museum\0" +"int.vn\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0" +"pro.ht\0" "nm.cn\0" -"hotelwithflight.com\0" -"center\0fire\0" -"ybo.science\0" -"blackfriday\0" -"mobi.tt\0" -"memorial\0" -"yn.cn\0" -"eastafrica.museum\0spdns.eu\0" -"po.gov.pl\0" -"sakuragawa.ibaraki.jp\0mobi.tz\0\xe5\x85\xab\xe5\x8d\xa6\0" -"imizu.toyama.jp\0" -"newhampshire.museum\0fentiger.mythic-beasts.com\0*.quipelements.com\0" -"niigata.niigata.jp\0" -"accesscam.org\0" -"nanae.hokkaido.jp\0" -"fish\0" -"ikeda.fukui.jp\0" -"service.gov.scot\0" -"from.hr\0luxembourg.museum\0vuelos\0home-webserver.de\0" -"barsy.net\0" -"toon.ehime.jp\0" -"godaddy\0" -"meme\0" -"c.la\0" -"l.bg\0marburg.museum\0" -"from-oh.com\0adygeya.su\0" -"\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"canada.museum\0" -"shiraoka.saitama.jp\0roan.no\0" -"orange\0" -"re.it\0vlaanderen.museum\0" -"com.ac\0" -"com.af\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0" +"rost.no\0pimienta.org\0" +"edu.zm\0" +"com.ac\0plc.uk\0" +"tachiarai.fukuoka.jp\0" +"mobi.ke\0coop.py\0lpusercontent.com\0" +"com.af\0nissan\0" "com.ag\0" -"obira.hokkaido.jp\0" -"com.ai\0lixil\0spdns.org\0" +"com.ai\0of.by\0" +"fuossko.no\0paris.eu.org\0" "com.al\0" "com.am\0" -"k12.ec\0osteroy.no\0" -"com.ba\0flor\xc3\xb8.no\0barsy.online\0" -"com.ar\0com.bb\0moroyama.saitama.jp\0" -"oum.gov.pl\0" -"menu\0" -"com.au\0" -"not.br\0rockart.museum\0" +"nic.tj\0" +"b\xc3\xa1l\xc3\xa1t.no\0" +"trentinoaltoadige.it\0\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0" +"com.ba\0aip.ee\0luxe\0nissay\0br.com\0is-a-hard-worker.com\0" +"com.ar\0com.bb\0cnt.br\0" +"k12.tx.us\0" +"aizuwakamatsu.fukushima.jp\0tajimi.gifu.jp\0" +"com.au\0palmsprings.museum\0" "com.aw\0" -"com.bh\0wakayama.jp\0lib.nm.us\0" -"com.bi\0ca.eu.org\0mcpre.ru\0" -"com.az\0gov.nc.tr\0" -"economia.bo\0" -"com.bm\0" +"com.bh\0" +"com.bi\0" +"com.az\0" +"lighting\0vaporcloud.io\0" +"com.bm\0lifestyle\0" "com.bn\0" -"com.bo\0" -"takatori.nara.jp\0re.kr\0\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0" -"mobi.na\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0kurgan.su\0" -"com.br\0" -"com.bs\0moriyama.shiga.jp\0" -"com.bt\0moscow.museum\0" -"kamiamakusa.kumamoto.jp\0minamiise.mie.jp\0mobi.ng\0" -"kikugawa.shizuoka.jp\0shibuya.tokyo.jp\0" -"4.bg\0com.by\0com.ci\0dyndns-server.com\0" -"com.bz\0cl.it\0adygeya.ru\0" -"hiji.oita.jp\0" -"mielec.pl\0" -"com.cm\0omotego.fukushima.jp\0" -"com.cn\0piacenza.it\0freeddns.org\0" -"com.co\0" -"minamiechizen.fukui.jp\0ninja\0" -"repbody.aero\0" -"trento.it\0isa-geek.net\0" -"com.cu\0com.de\0" -"com.cw\0spdns.de\0" -"com.cy\0" -"okayama.okayama.jp\0" -"cc.ua\0" -"minami.tokushima.jp\0" -"com.dm\0" -"aichi.jp\0dyn-vpn.de\0" -"com.do\0" -"otofuke.hokkaido.jp\0epson\0" -"com.ec\0" -"larvik.no\0" -"com.ee\0naruto.tokushima.jp\0army\0" -"entomology.museum\0" -"com.eg\0trentinosud-tirol.it\0" -"anjo.aichi.jp\0" -"schools.nsw.edu.au\0noshiro.akita.jp\0" -"com.dz\0" -"fujisawa.iwate.jp\0strand.no\0" -"nagano.jp\0sukagawa.fukushima.jp\0" -"nes.buskerud.no\0" -"ome.tokyo.jp\0" -"com.es\0is-a-rockstar.com\0" -"com.et\0" -"v\xc3\xa5gan.no\0" -"bus.museum\0mt.us\0nd.us\0" -"k12.il\0dance\0" +"com.bo\0nhs.uk\0cc.tn.us\0" +"taxi\0" +"com.br\0kg.kr\0" +"com.bs\0gos.pk\0dating\0" +"com.bt\0li.it\0tourism.pl\0" +"redumbrella\0for.sale\0" "bar.pro\0" -"com.fj\0togane.chiba.jp\0" -"sakahogi.gifu.jp\0glass\0" -"arpa\0com.fm\0" -"fedje.no\0talk\0" -"*.spectrum.myjino.ru\0zakopane.pl\0" +"nsw.au\0com.by\0com.ci\0coop.km\0from-wv.com\0" +"com.bz\0design\0" +"\xe5\x8d\x83\xe8\x91\x89.jp\0miyoshi.tokushima.jp\0" +"com.cm\0dolls.museum\0s3.dualstack.ap-northeast-2.amazonaws.com\0pagefrontapp.com\0" +"com.cn\0" +"com.co\0services\0" +"oita.jp\0" +"latrobe\0uber.space\0" +"grp.lk\0" +"mb.it\0takasu.hokkaido.jp\0saarland\0" +"com.cu\0com.de\0c.la\0googlecode.com\0" +"com.cv\0" +"com.cw\0barsy.pro\0" +"kujukuri.chiba.jp\0" +"com.cy\0castle.museum\0" +"is-a-knight.org\0" +"kanmaki.nara.jp\0neyagawa.osaka.jp\0" +"com.dm\0" +"com.do\0h\xc3\xb8yanger.no\0" +"trentinos-tirol.it\0futurehosting.at\0" +"com.ec\0roros.no\0k12.va.us\0" +"westeurope.azurestaticapps.net\0" +"com.ee\0" +"com.eg\0vang.no\0" +"pro.na\0" +"com.dz\0" +"gifts\0press\0" +"shioya.tochigi.jp\0" +"*.paywhirl.com\0" +"pro.mv\0" +"cc.vi.us\0" +"showa.fukushima.jp\0" +"com.es\0k12.vt.us\0" +"com.et\0mt.it\0sango.nara.jp\0kolobrzeg.pl\0" +"lutsk.ua\0" +"\xeb\x8b\xb7\xeb\x84\xb7\0" +"shikatsu.aichi.jp\0nakadomari.aomori.jp\0kamigori.hyogo.jp\0" +"com.fj\0barsy.pub\0" +"com.fm\0trolley.museum\0" +"arboretum.museum\0army\0ninja\0onthewifi.com\0" "com.fr\0" -"coop.ht\0" -"of.by\0" -"com.ge\0ondigitalocean.app\0" -"forte.id\0" -"com.gh\0" +"investments\0ch.eu.org\0" +"com.ge\0pro.om\0nic.za\0" +"com.gh\0towada.aomori.jp\0beppu.oita.jp\0tadaoka.osaka.jp\0sex.pl\0" "com.gi\0" -"c.se\0uk.oxa.cloud\0bar0.net\0" -"qld.gov.au\0brother\0" -"com.gl\0" +"win\0" +"com.gl\0soma.fukushima.jp\0minamimaki.nagano.jp\0otaki.saitama.jp\0unnan.shimane.jp\0*.futurecms.at\0dsmynas.net\0" "com.gn\0" -"cloud.goog\0" -"com.gp\0achi.nagano.jp\0h\xc3\xb8yanger.no\0herokuapp.com\0" -"bomlo.no\0d\xc3\xb8nna.no\0singles\0alpha.bounty-full.com\0" -"com.gr\0conn.uk\0" -"!www.ck\0com.gt\0" -"com.gu\0hinohara.tokyo.jp\0mobi.ke\0" -"akishima.tokyo.jp\0b\xc3\xa1id\xc3\xa1r.no\0" -"koeln\0" -"com.gy\0from-ar.com\0cd.eu.org\0" -"com.hk\0ancona.it\0" -"\xe5\x85\xac\xe5\x8f\xb8\0" +"com.gp\0" +"com.gr\0" +"divttasvuotna.no\0in-dsl.org\0" +"com.gt\0noto.ishikawa.jp\0bizen.okayama.jp\0kakinoki.shimane.jp\0fujikawaguchiko.yamanashi.jp\0" +"com.gu\0of.je\0" +"selfip.org\0" +"funahashi.toyama.jp\0" +"arpa\0com.gy\0aquarium.museum\0" +"pro.pr\0" +"com.hk\0app.banzaicloud.io\0" +"reggio-calabria.it\0iizuka.fukuoka.jp\0sakai.osaka.jp\0baseball\0" "com.hn\0" -"yoshida.saitama.jp\0" -"ven.it\0inazawa.aichi.jp\0*.banzai.cloud\0" -"coop.br\0" -"com.hr\0free.hr\0" -"cc.co.us\0" -"com.ht\0bod\xc3\xb8.no\0" -"adachi.tokyo.jp\0macys\0" -"sjc.br\0" -"toyota.yamaguchi.jp\0" -"marketing\0" -"computer\0" +"kiho.mie.jp\0" +"est-a-la-masion.com\0" +"com.hr\0" +"narviika.no\0sorum.no\0" +"com.ht\0" +"bplaced.com\0" +"\xe5\x85\xac\xe7\x9b\x8a\0" +"smart\0dynathome.net\0" +"national.museum\0" "com.im\0" -"com.io\0mydrobo.com\0" -"experts-comptables.fr\0yonaguni.okinawa.jp\0" -"com.iq\0" -"taifun-dns.de\0" -"com.is\0" -"u.bg\0higashimatsuyama.saitama.jp\0" -"loginline.services\0" -"bozen-sudtirol.it\0\xe6\x96\xb0\xe6\xbd\x9f.jp\0" -"uzhgorod.ua\0" -"map.fastlylb.net\0" -"asda\0" -"rn.it\0" -"com.jo\0\xc3\xa1lt\xc3\xa1.no\0" -"arte\0" -"komatsu.ishikawa.jp\0" -"yokkaichi.mie.jp\0" -"luxe\0" -"cherkassy.ua\0de.gt\0" -"com.kg\0museumvereniging.museum\0kaluga.su\0" -"devices.resinstaging.io\0" -"com.ki\0embaixada.st\0" -"messina.it\0\xe5\xa4\xa7\xe9\x98\xaa.jp\0" -"gv.ao\0" +"sn.cn\0" +"com.io\0gildesk\xc3\xa5l.no\0\xc3\xb8rland.no\0" +"com.iq\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0" +"com.is\0il.us\0" +"alaska.museum\0" +"austrheim.no\0" +"kasai.hyogo.jp\0kuzumaki.iwate.jp\0" +"\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0" +"uenohara.yamanashi.jp\0" +"jor.br\0" +"ambulance.aero\0com.jo\0" +"akune.kagoshima.jp\0wiih.gov.pl\0" +"educational.museum\0wme\0" +"langevag.no\0" +"seven\0" +"com.kg\0" +"com.ki\0c.se\0" +"zlg.br\0" +"nishiokoppe.hokkaido.jp\0sakaiminato.tottori.jp\0tsuru.yamanashi.jp\0broke-it.net\0" "com.km\0" -"com.kp\0aviation.museum\0shell\0" -"gv.at\0com.la\0" +"yoshinogari.saga.jp\0com.kp\0" +"com.la\0" "com.lb\0" "com.lc\0" +"pz.it\0toyotsu.fukuoka.jp\0yaita.tochigi.jp\0" +"broadcast.museum\0museumvereniging.museum\0chimkent.su\0" "com.kw\0" -"vf.no\0" -"fujisato.akita.jp\0com.ky\0" +"obuse.nagano.jp\0chofu.tokyo.jp\0" +"ltd.cy\0com.ky\0bern.museum\0l.se\0asda\0" "com.kz\0" -"com.lk\0" -"\xe6\xb2\x96\xe7\xb8\x84.jp\0barsy.pro\0" -"bbva\0" -"shimosuwa.nagano.jp\0" -"omura.nagasaki.jp\0" -"\xc3\xb8yer.no\0sorreisa.no\0" -"com.lr\0gub.uy\0" -"historical.museum\0l\xc3\xb8renskog.no\0shiksha\0" -"com.lv\0cc.vi.us\0dynalias.net\0" -"livorno.it\0kawaminami.miyazaki.jp\0com.mg\0" -"com.ly\0" -"seirou.niigata.jp\0com.mk\0trustee.museum\0" -"com.ml\0" -"com.mo\0" -"crafts.museum\0of.je\0" -"com.na\0" -"com.ms\0" -"com.mt\0" -"tomi.nagano.jp\0com.mu\0" -"com.mv\0com.nf\0" -"com.mw\0com.ng\0" -"com.mx\0mw.gov.pl\0clickrising.net\0" -"com.my\0com.ni\0exchange\0" -"virtual.museum\0" -"skaun.no\0" -"barsy.pub\0" -"com.nr\0" -"campidano-medio.it\0" -"hanyu.saitama.jp\0nid.io\0" -"markets\0certmgr.org\0" -"\xd9\x83\xd9\x88\xd9\x85\0" -"cloudycluster.net\0*.on-rancher.cloud\0" -"*.kawasaki.jp\0k12.me.us\0" -"bergbau.museum\0" -"asia\0shinichi.hiroshima.jp\0com.om\0" -"ovre-eiker.no\0" -"accenture\0" -"kasuga.hyogo.jp\0com.pa\0" -"nm.us\0" -"schlesisches.museum\0s\xc3\xb8mna.no\0" -"s3.dualstack.us-east-2.amazonaws.com\0issmarterthanyou.com\0" -"com.pe\0de.ls\0" -"com.pf\0de.md\0" -"suli.hu\0" -"com.ph\0" -"lewismiller.museum\0" -"organic\0blog.gt\0" -"com.pk\0" -"com.pl\0" -"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0" -"ms.gov.br\0historyofscience.museum\0" -"barletta-trani-andria.it\0holmestrand.no\0" -"com.qa\0" -"fukui.fukui.jp\0com.pr\0dontexist.net\0" -"fla.no\0com.ps\0" -"brussel.museum\0com.pt\0" -"komono.mie.jp\0" -"l.se\0" -"kakegawa.shizuoka.jp\0" -"komae.tokyo.jp\0com.py\0\xe5\x95\x86\xe5\xba\x97\0" -"boleslawiec.pl\0" -"k12.tr\0yali.mythic-beasts.com\0" -"art.br\0fusa.no\0" -"sakata.yamagata.jp\0discount\0" -"abu.yamaguchi.jp\0" -"us-gov-west-1.elasticbeanstalk.com\0jed.wafaicloud.com\0" -"sakegawa.yamagata.jp\0" -"vix.br\0asahi.ibaraki.jp\0ohira.miyagi.jp\0com.re\0" -"kanie.aichi.jp\0natura\0" -"graphics\0" +"com.lk\0r\xc3\xb8mskog.no\0" +"balsan.it\0shibata.miyagi.jp\0pro.tt\0discount\0" +"arte\0" "of.no\0" -"philadelphiaarea.museum\0taxi\0" -"mt.gov.br\0" -"com.ro\0" -"otsuchi.iwate.jp\0com.sa\0" -"yawata.kyoto.jp\0com.sb\0" -"yazu.tottori.jp\0com.sc\0" -"com.sd\0k12.tx.us\0k12.vi\0withyoutube.com\0" -"blog.bo\0com.se\0com.ru\0" -"com.sg\0" -"blog.br\0com.sh\0cc.ny.us\0tunk.org\0" -"\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0no-ip.biz\0" -"art.do\0\xe6\x8b\x9b\xe8\x81\x98\0githubpreview.dev\0" -"com.sl\0" -"bahn.museum\0com.sn\0" -"ogori.fukuoka.jp\0com.so\0" -"kainan.tokushima.jp\0" -"usa.oita.jp\0hemsedal.no\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0" -"caxias.br\0mo\xc3\xa5reke.no\0skierva.no\0" -"com.ss\0" -"com.st\0" -"art.dz\0kawaba.gunma.jp\0com.sv\0" -"laspezia.it\0" -"merseine.nu\0" -"trentinos\xc3\xbc""dtirol.it\0com.sy\0" -"com.tj\0eastasia.azurestaticapps.net\0" -"loab\xc3\xa1t.no\0poltava.ua\0*.customer-oci.com\0" +"aoki.nagano.jp\0" +"photography.museum\0" +"com.lr\0" +"journal.aero\0httpbin.org\0" +"rc.it\0hitachiomiya.ibaraki.jp\0daito.osaka.jp\0kyuragi.saga.jp\0us.platform.sh\0" +"com.lv\0" +"com.mg\0" +"com.ly\0u.se\0" +"com.mk\0" +"caserta.it\0shimada.shizuoka.jp\0oshima.tokyo.jp\0com.ml\0" +"com.mo\0skanland.no\0" +"higashikagura.hokkaido.jp\0swiebodzin.pl\0" +"com.na\0" +"riopreto.br\0" +"com.ms\0wow\0" +"vao.it\0takahata.yamagata.jp\0com.mt\0" +"com.mu\0" +"com.mv\0com.nf\0pro.vn\0" +"com.mw\0com.ng\0sm\xc3\xb8la.no\0" +"com.mx\0" +"film.hu\0stalbans.museum\0com.my\0com.ni\0bbva\0" +"hammarfeasta.no\0ski.no\0" +"foggia.it\0shitara.aichi.jp\0" +"humanities.museum\0" +"\xd9\x83\xd9\x88\xd9\x85\0" +"com.nr\0lancaster\0" +"gloppen.no\0ky.us\0tunes\0at.eu.org\0protonet.io\0" +"gallup\0" +"emergency.aero\0" +"cesena-forli.it\0" +"ltd.gi\0" +"austevoll.no\0hjartdal.no\0racing\0drud.io\0" +"ogi.saga.jp\0" +"com.om\0" +"strand.no\0" +"matsuura.nagasaki.jp\0kamikawa.saitama.jp\0" +"com.pa\0mk.ua\0luxury\0" +"yawara.ibaraki.jp\0" +"com.pe\0" +"com.pf\0" +"trentins\xc3\xbc""d-tirol.it\0nakasatsunai.hokkaido.jp\0kokonoe.oita.jp\0com.ph\0" +"youtube\0servemp3.com\0" +"com.pk\0ltd.hk\0" +"aikawa.kanagawa.jp\0com.pl\0zp.gov.pl\0homeunix.net\0" +"santabarbara.museum\0" +"wakasa.tottori.jp\0beta.tailscale.net\0" +"com.qa\0" +"ribeirao.br\0com.pr\0" +"com.ps\0fresenius\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0ae.org\0" +"toki.gifu.jp\0ota.gunma.jp\0higashisumiyoshi.osaka.jp\0com.pt\0" +"finearts.museum\0" +"passenger-association.aero\0zapto.org\0" +"asia\0lajolla.museum\0com.py\0" +"gleeze.com\0loginline.site\0" +"\xe5\x85\xab\xe5\x8d\xa6\0" +"fyresdal.no\0wtc\0*.dweb.link\0" +"masuda.shimane.jp\0" +"bible.museum\0" +"wtf\0" +"svalbard.no\0mandal.no\0mt.us\0nd.us\0" +"tp.it\0noshiro.akita.jp\0" +"com.re\0amsterdam\0online\0" +"blockbuster\0" +"circle\0" +"asahi.ibaraki.jp\0kanuma.tochigi.jp\0" +"rl.no\0com.ro\0" +"minano.saitama.jp\0" +"com.sa\0" +"com.sb\0" +"sandefjord.no\0com.sc\0nm.us\0ox.rs\0" +"sth.ac.at\0com.sd\0\xe6\x8b\x9b\xe8\x81\x98\0" +"com.se\0com.ru\0" +"nesset.no\0com.sg\0" +"com.sh\0" +"pharmacien.fr\0" +"tran\xc3\xb8y.no\0" +"harima.hyogo.jp\0com.sl\0" +"com.sn\0repair\0" +"com.so\0barsy.org\0" +"utashinai.hokkaido.jp\0oishida.yamagata.jp\0" +"settlers.museum\0" +"com.ss\0nv.us\0" +"vb.it\0tokorozawa.saitama.jp\0com.st\0" +"medical.museum\0" +"com.sv\0" +"systems\0" +"shikabe.hokkaido.jp\0fastblog.net\0" +"cheltenham.museum\0lucerne.museum\0com.sy\0" +"com.tj\0za.bz\0" +"ltd.lk\0" +"fedex\0" "com.tm\0" -"com.tn\0turen.tn\0" -"teramo.it\0com.to\0" +"com.tn\0" +"com.to\0" +"sakawa.kochi.jp\0" "com.ua\0" "com.tr\0" -"com.tt\0" -"pilot.aero\0" -"com.tw\0com.ug\0audible\0" -"ezproxy.kuleuven.be\0" -"yasaka.nagano.jp\0" -"cremona.it\0j.scaleforce.com.cy\0" -"chicago.museum\0" -"tamaki.mie.jp\0" -"seki.gifu.jp\0timekeeping.museum\0lib.ok.us\0" -"tysv\xc3\xa6r.no\0" -"reliance\0" -"com.vc\0in-vpn.net\0" -"is-a-musician.com\0" -"com.ve\0" -"cam.it\0nisshin.aichi.jp\0takahama.fukui.jp\0aga.niigata.jp\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0" -"zarow.pl\0cc.la.us\0com.uy\0com.vi\0" +"odda.no\0" +"ven.it\0altoadige.it\0com.tt\0museum.tt\0" +"actor\0" +"com.tw\0com.ug\0network\0" +"*.compute-1.amazonaws.com\0" +"zj.cn\0" +"gulen.no\0" +"3utilities.com\0" +"rade.no\0com.vc\0" +"teramo.it\0vt.it\0" +"com.ve\0\xd0\xba\xd1\x80\xd1\x8b\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0" +"nsn.us\0is-very-evil.org\0ltd.ng\0" +"philately.museum\0com.uy\0com.vi\0" "com.uz\0" -"kyiv.ua\0" -"california.museum\0" -"ibaraki.osaka.jp\0\xc3\xa5krehamn.no\0com.vn\0" -"kokubunji.tokyo.jp\0skjervoy.no\0" +"dielddanuorri.no\0" +"ascolipiceno.it\0\xe5\xb2\x90\xe9\x98\x9c.jp\0inatsuki.fukuoka.jp\0" +"pixolino.com\0" +"com.vn\0" +"istanbul\0" +"no-ip.org\0" +"fudai.iwate.jp\0" "com.vu\0" -"szex.hu\0" -"telebit.io\0" -"bearalvahki.no\0" -"art.ht\0" +"autos\0" +"healthcare\0" +"xin\0" +"sande.vestfold.no\0" +"trentino-altoadige.it\0tajiri.osaka.jp\0onavstack.net\0xx.gl\0" +"pharmacy\0ybo.science\0" +"sciencesnaturelles.museum\0mobile\0" +"com.ws\0barrell-of-knowledge.info\0" +"koga.fukuoka.jp\0dynu.net\0" +"american.museum\0" +"s3-website-us-east-1.amazonaws.com\0" +"uchiko.ehime.jp\0otobe.hokkaido.jp\0shiriuchi.hokkaido.jp\0" +"frog.museum\0is-a-geek.com\0" +"ballangen.no\0" +"nativeamerican.museum\0com.ye\0yokohama\0" +"oppeg\xc3\xa5rd.no\0lib.gu.us\0" +"kadoma.osaka.jp\0" +"oregon.museum\0zone\0dscloud.me\0" +"monza-e-della-brianza.it\0ide.kyoto.jp\0" +"fribourg.museum\0" +"dep.no\0fairwinds\0" +"mutual\0sg-1.paas.massivegrid.net\0" +"gs.aa.no\0" +"kawagoe.saitama.jp\0\xe7\xa7\xbb\xe5\x8a\xa8\0" +"protection\0" +"hosting\0" +"\xd9\x85\xd8\xb5\xd8\xb1\0com.zm\0from-ky.com\0" +"s\xc3\xbc""dtirol.it\0contact\0" +"dyndns-free.com\0" +"aparecida.br\0" +"gs.svalbard.no\0" +"yatsushiro.kumamoto.jp\0cheap\0" +"m\xc3\xa1latvuopmi.no\0" +"\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0" +"drud.us\0" +"mie.jp\0\xe5\x85\xac\xe5\x8f\xb8\0" +"hof.no\0" +"star\0" +"fuso.aichi.jp\0" +"chippubetsu.hokkaido.jp\0" +"ltd.ua\0omniwe.site\0" +"tadotsu.kagawa.jp\0" +"filegear-ie.me\0" +"takikawa.hokkaido.jp\0tawaramoto.nara.jp\0zgora.pl\0coach\0host\0" +"ltd.uk\0" +"es.leg.br\0" +"tysfjord.no\0washtenaw.mi.us\0" +"kddi\0" +"larvik.no\0" +"sassari.it\0fukui.fukui.jp\0taishi.osaka.jp\0vip.jelastic.cloud\0" +"museum.mv\0" +"museum.mw\0gs.bu.no\0bardu.no\0*.sch.uk\0builders\0versicherung\0" +"bozen-s\xc3\xbc""dtirol.it\0kuchinotsu.nagasaki.jp\0rybnik.pl\0" +"miyawaka.fukuoka.jp\0kanra.gunma.jp\0ayabe.kyoto.jp\0nagatoro.saitama.jp\0podlasie.pl\0" +"delta\0isa-hockeynut.com\0exnet.su\0barsy.mobi\0" +"museum.no\0frogn.no\0" +"kakamigahara.gifu.jp\0" +"cloudns.eu\0" +"pa.gov.br\0" +"\xc3\xa5krehamn.no\0diamonds\0" +"kameoka.kyoto.jp\0" +"notaires.km\0" +"611.to\0" +"taketa.oita.jp\0hicam.net\0clan.rip\0" +"snoasa.no\0" +"matsuyama.ehime.jp\0yamagata.gifu.jp\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0bplaced.net\0" +"freemasonry.museum\0quebec.museum\0museum.om\0git-pages.rit.edu\0" +"\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0" +"ichinomiya.aichi.jp\0" +"tochigi.jp\0amakusa.kumamoto.jp\0abeno.osaka.jp\0" +"fst.br\0githubpreview.dev\0" +"raholt.no\0\xe5\x95\x86\xe5\xba\x97\0" +"genoa.it\0shibecha.hokkaido.jp\0" +"narusawa.yamanashi.jp\0" +"k12.as.us\0" +"pb.gov.br\0realtor\0" +"au.eu.org\0be.eu.org\0" +"fujinomiya.shizuoka.jp\0" +"s3.dualstack.ca-central-1.amazonaws.com\0" +"yorkshire.museum\0" +"jevnaker.no\0cc.as.us\0" +"wsa.gov.pl\0" +"c66.me\0cloud.nospamproxy.com\0" +"pinb.gov.pl\0" +"tydal.no\0vt.us\0" +"sakahogi.gifu.jp\0" +"virtual.museum\0" +"vall\xc3\xa9""e-aoste.it\0kyowa.hokkaido.jp\0tsukuba.ibaraki.jp\0takahashi.okayama.jp\0" +"cloudns.in\0" +"trentin-s\xc3\xbc""d-tirol.it\0r.cdn77.net\0" +"hostyhosting.io\0" +"platform0.app\0homeip.net\0" +"flir\0" +"geo.br\0" +"operaunite.com\0" +"bodo.no\0is-a-geek.org\0" +"matsue.shimane.jp\0" +"wellbeingzone.eu\0" +"\xe7\xbd\x91\xe7\xbb\x9c.cn\0" +"aurskog-h\xc3\xb8land.no\0cloudns.cc\0" +"kiyosato.hokkaido.jp\0kawanehon.shizuoka.jp\0in-dsl.net\0" +"wv.us\0" +"nakagyo.kyoto.jp\0" +"alipay\0" +"macys\0" +"verona.it\0oto.fukuoka.jp\0kahoku.ishikawa.jp\0gyokuto.kumamoto.jp\0haebaru.okinawa.jp\0naha.okinawa.jp\0" +"control.aero\0k12.co.us\0" +"kawamata.fukushima.jp\0okegawa.saitama.jp\0" +"lindas.no\0bg.eu.org\0" +"hasvik.no\0lib.ny.us\0" +"hidaka.hokkaido.jp\0showa.yamanashi.jp\0mysecuritycamera.net\0" +"verm\xc3\xb6gensberatung\0" +"namie.fukushima.jp\0shirakawa.fukushima.jp\0hofu.yamaguchi.jp\0" +"art.museum\0maritimo.museum\0" +"pordenone.it\0" +"ac.ae\0" +"aknoluokta.no\0pictures\0" +"andria-trani-barletta.it\0nextdirect\0" +"mordovia.su\0" +"tkmaxx\0blogspot.co.at\0" +"verbania.it\0" +"serveirc.com\0" +"ollo\0" +"ac.at\0" +"ac.be\0" +"gs.jan-mayen.no\0homeftp.org\0" +"kamiichi.toyama.jp\0xxx\0*.rss.my.id\0" +"caravan\0" +"\xe6\x95\x8e\xe8\x82\xb2.hk\0" +"\xe5\xa4\xa7\xe5\x88\x86.jp\0mihama.aichi.jp\0" +"vicenza.it\0ozu.ehime.jp\0kannami.shizuoka.jp\0" +"amfam\0" +"pfizer\0" +"matsuno.ehime.jp\0" +"ac.ci\0impertrix.com\0" +"xyz\0" +"lodingen.no\0\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0" +"ac.cn\0" +"\xe7\xbd\x91\xe7\xbb\x9c.hk\0spacekit.io\0" +"sakata.yamagata.jp\0dynv6.net\0" +"columbia.museum\0rar.ve\0" +"ac.cr\0" +"airtraffic.aero\0for-our.info\0" +"brasil.museum\0" +"net.ac\0" +"ravenna.it\0be.ax\0" +"net.ae\0ac.cy\0mordovia.ru\0site.tb-hosting.com\0" +"net.af\0" +"net.ag\0" +"tokushima.jp\0genkai.saga.jp\0" +"net.ai\0ferrari\0travelersinsurance\0us-east-1.elasticbeanstalk.com\0" +"net.al\0ando.nara.jp\0" +"net.am\0qld.gov.au\0" +"fukuchiyama.kyoto.jp\0" +"net.ba\0" +"net.ar\0net.bb\0qpon\0" +"js.org\0" +"molise.it\0" +"net.au\0" +"net.bh\0ono.fukushima.jp\0yokoze.saitama.jp\0" +"cartoonart.museum\0" +"net.az\0" +"kvinesdal.no\0" +"net.bm\0today\0" +"net.bn\0" +"net.bo\0" +"yodobashi\0" +"net.br\0" +"net.bs\0hr.eu.org\0" +"net.bt\0" +"axis.museum\0pdns.page\0" +"ac.fj\0" +"suldal.no\0kerryhotels\0" +"takahagi.ibaraki.jp\0ugim.gov.pl\0" +"net.ci\0" +"net.bz\0" +"agents.aero\0" +"usuki.oita.jp\0" +"net.cm\0" +"net.cn\0boehringer\0" +"net.co\0" +"*.elb.amazonaws.com.cn\0" +"chosei.chiba.jp\0nagareyama.chiba.jp\0ofunato.iwate.jp\0oyabe.toyama.jp\0" +"net.cu\0team\0homesecuritypc.com\0" +"net.cw\0stj\xc3\xb8rdalshalsen.no\0stange.no\0" +"kawanishi.hyogo.jp\0" +"net.cy\0" +"ac.gn\0" +"net.dm\0" +"net.do\0s\xc3\xb8r-varanger.no\0homeunix.org\0" +"dental\0" +"audi\0dyndns-work.com\0" +"net.ec\0" +"kasukabe.saitama.jp\0homesklep.pl\0" +"net.eg\0" +"nishimera.miyazaki.jp\0blogspot.co.id\0" +"net.dz\0" +"hagi.yamaguchi.jp\0" +"ac.id\0hamura.tokyo.jp\0arida.wakayama.jp\0tech\0travel\0blogspot.co.il\0" +"yalta.ua\0you\0" +"j\xc3\xb8rpeland.no\0" +"net.et\0barlettatraniandria.it\0otofuke.hokkaido.jp\0" +"force.museum\0" +"oyer.no\0" +"ac.il\0\xe4\xbd\x90\xe8\xb3\x80.jp\0bungotakada.oita.jp\0ch.trendhosting.cloud\0" +"ac.im\0ulm.museum\0filegear-jp.me\0virtualuser.de\0" +"net.fj\0ac.in\0beer\0" +"caa.aero\0" +"net.fm\0" +"ac.ir\0" +"logistics.aero\0cloudns.us\0" +"amagasaki.hyogo.jp\0shiiba.miyazaki.jp\0diet\0" +"pi.gov.br\0name.hr\0\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0" +"taishi.hyogo.jp\0" +"net.ge\0be.gy\0" +"net.gg\0holdings\0game-host.org\0" +"friulive-giulia.it\0trentino-sudtirol.it\0hokuto.hokkaido.jp\0" +"niteroi.br\0" +"nesseby.no\0lefrak\0" +"net.gl\0ac.jp\0ono.fukui.jp\0" +"net.gn\0dealer\0" +"net.gp\0al.it\0mutsu.aomori.jp\0" +"ac.ke\0" +"net.gr\0" +"kvits\xc3\xb8y.no\0" +"name.et\0net.gt\0" +"net.gu\0bugatti\0" +"fukudomi.saga.jp\0final\0" +"net.gy\0" +"name.fj\0selfip.biz\0" +"net.hk\0" +"architecture.museum\0pagespeedmobilizer.com\0plesk.page\0qbuser.com\0" +"net.hn\0ac.kr\0" +"\xe6\x89\x8b\xe6\x9c\xba\0" +"mypep.link\0" +"net.ht\0net.id\0awaji.hyogo.jp\0tarama.okinawa.jp\0" +"ac.lk\0" +"bolzano.it\0" +"from-id.com\0" +"namsos.no\0" +"net.il\0piemonte.it\0" +"net.im\0ac.ma\0gripe\0" +"fm.br\0net.in\0" +"ac.ls\0" +"bn.it\0kitami.hokkaido.jp\0" +"net.iq\0ac.me\0" +"net.ir\0" +"net.is\0" +"co.financial\0" +"wa.edu.au\0net.je\0project.museum\0caa.li\0" +"contagem.br\0" +"int.eu.org\0" +"viterbo.it\0katsushika.tokyo.jp\0" +"takagi.nagano.jp\0kamo.niigata.jp\0" +"ambulance.museum\0" +"net.jo\0" +"no-ip.net\0" +"ac.mu\0jcloud.ik-server.com\0" +"dyndns.biz\0" +"ac.mw\0" +"sakai.fukui.jp\0aridagawa.wakayama.jp\0" +"ac.ni\0" +"ac.mz\0" +"name.eg\0net.kg\0" +"sannan.hyogo.jp\0ichikai.tochigi.jp\0" +"net.ki\0safety\0" +"yun\0" +"lillehammer.no\0" +"tra.kp\0onflashdrive.app\0" +"starnberg.museum\0" +"net.kn\0" +"perso.ht\0" +"net.la\0" +"net.lb\0" +"net.lc\0b\xc3\xa1id\xc3\xa1r.no\0" +"sosnowiec.pl\0eu.encoway.cloud\0" +"go.ci\0arteducation.museum\0" +"ac.nz\0" +"net.kw\0" +"kitamoto.saitama.jp\0" +"net.ky\0" +"name.az\0net.kz\0" +"net.lk\0al.no\0" +"bulsan.it\0!city.nagoya.jp\0yamatsuri.fukushima.jp\0" +"act.au\0ac.pa\0" +"go.cr\0" +"stryn.no\0" +"net.ma\0is-a-personaltrainer.com\0" +"net.lr\0koeln\0" +"net.ls\0" +"net.me\0" +"net.lv\0" +"4.bg\0lib.wy.us\0" +"tahara.aichi.jp\0" +"net.ly\0" +"gx.cn\0" +"dgca.aero\0net.mk\0is-by.us\0" +"net.ml\0" +"mintere.site\0" +"ac.pr\0" +"net.mo\0" +"monzaedellabrianza.it\0mashiko.tochigi.jp\0" +"alsace\0" +"net.ms\0americanexpress\0" +"otsuki.yamanashi.jp\0net.mt\0" +"net.mu\0" +"net.mv\0net.nf\0" +"net.mw\0net.ng\0" +"net.mx\0walmart\0" +"net.my\0net.ni\0grondar.za\0\xd0\xbc\xd0\xb8\xd1\x80.\xd1\x80\xd1\x83\xd1\x81\0" +"adm.br\0net.mz\0" +"inawashiro.fukushima.jp\0centralus.azurestaticapps.net\0" +"sci.eg\0is-a-chef.org\0" +"kyotanabe.kyoto.jp\0" +"motorcycle.museum\0" +"pe.gov.br\0net.nr\0" +"elverum.no\0" +"kazuno.akita.jp\0half.host\0" +"presidio.museum\0" +"rodoy.no\0sk\xc3\xa1nit.no\0" +"nakagawa.fukuoka.jp\0wanouchi.gifu.jp\0it1.jenv-aruba.cloud\0" +"adv.br\0net.nz\0" +"ngo.lk\0" +"zip\0redirectme.net\0" +"net.om\0" +"ac.rs\0" +"kakuda.miyagi.jp\0oum.gov.pl\0" +"lakas.hu\0net.pa\0ac.se\0ac.ru\0" +"ac.rw\0" +"nagasu.kumamoto.jp\0muika.niigata.jp\0toga.toyama.jp\0" +"net.pe\0mini\0" +"herad.no\0" +"net.ph\0etisalat\0" +"dyndns-mail.com\0myqnapcloud.com\0" +"net.pk\0" +"osakasayama.osaka.jp\0sugito.saitama.jp\0net.pl\0" +"ybo.party\0" +"net.pn\0" +"fm.it\0mint\0" +"net.qa\0cyou\0" +"net.pr\0" +"net.ps\0loans\0" +"ibaraki.ibaraki.jp\0net.pt\0ac.th\0hyatt\0" +"wales.museum\0balashov.su\0" +"ac.sz\0ac.tj\0wolterskluwer\0" +"ngo.ng\0" +"itami.hyogo.jp\0namegata.ibaraki.jp\0nakagawa.nagano.jp\0" +"lancashire.museum\0muenchen.museum\0net.py\0" +"jl.cn\0" +"airport.aero\0cc.ok.us\0potager.org\0" "murata.miyagi.jp\0" -"groks-the.info\0vaporcloud.io\0" -"com.ws\0" -"floripa.br\0""3utilities.com\0" -"far.br\0" -"woltlab-demo.com\0" -"fukuroi.shizuoka.jp\0" -"morimachi.shizuoka.jp\0bridgestone\0" -"bestbuy\0" -"keliweb.cloud\0" -"cleverapps.io\0" -"yamagata.gifu.jp\0" -"yoshino.nara.jp\0" -"de.us\0com.ye\0svn-repos.de\0" -"coop.rw\0k12.nh.us\0" -"landrover\0azure-mobile.net\0" -"ogawara.miyagi.jp\0cc.hi.us\0" -"ekloges.cy\0pri.ee\0" -"puglia.it\0nv.us\0" -"paas.hosted-by-previder.com\0" -"gru.br\0idv.hk\0" -"now-dns.net\0" -"koza.wakayama.jp\0\xd0\xba\xd1\x80\xd1\x8b\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0" -"\xe9\x9d\x92\xe6\xa3\xae.jp\0" -"nakamichi.yamanashi.jp\0" -"nalchik.ru\0" -"b\xc3\xa6rum.no\0" -"poa.br\0kiwi.nz\0" -"com.zm\0" -"patria.bo\0fukuoka.jp\0urasoe.okinawa.jp\0bjugn.no\0" -"sakyo.kyoto.jp\0" -"omigawa.chiba.jp\0u.se\0" -"coop.tt\0" -"\xd9\x85\xd8\xb5\xd8\xb1\0" -"uhren.museum\0" -"hamada.shimane.jp\0other.nf\0" -"lg.jp\0nalchik.su\0ent.platform.sh\0" -"shinanomachi.nagano.jp\0" -"lucca.it\0kamakura.kanagawa.jp\0" -"rec.br\0steinkjer.no\0house\0" -"daplie.me\0" -"loans\0" -"avoues.fr\0eiheiji.fukui.jp\0kishiwada.osaka.jp\0" -"gamvik.no\0" -"dnepropetrovsk.ua\0yalta.ua\0" -"pictet\0barsy.org\0" -"ltd.cy\0coop.mv\0" -"coop.mw\0motorcycles\0" -"skodje.no\0" -"rec.co\0" -"forgot.his.name\0" -"aero.tt\0" -"building.museum\0freesite.host\0" -"\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0\xe9\x9b\x86\xe5\x9b\xa2\0" -"shingu.wakayama.jp\0" -"cc.or.us\0" -"liguria.it\0" -"podzone.net\0" -"skedsmokorset.no\0mazowsze.pl\0ivano-frankivsk.ua\0" -"aero.mv\0" -"odessa.ua\0" -"sp.it\0kep.tr\0" -"koeln.museum\0newyork.museum\0" -"urausu.hokkaido.jp\0" -"kuki.saitama.jp\0" -"fuossko.no\0" -"scrapping.cc\0eating-organic.net\0" -"mima.tokushima.jp\0lib.dc.us\0" -"ltd.gi\0eaton.mi.us\0" -"shonai.yamagata.jp\0" -"coop.py\0*.webpaas.ovh.net\0art.pl\0" -"nakaniikawa.toyama.jp\0\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0" -"mashiki.kumamoto.jp\0sandvikcoromant\0" -"tysnes.no\0blog.vu\0" -"saiki.oita.jp\0" -"kaneyama.yamagata.jp\0gucci\0" -"kagoshima.jp\0legnica.pl\0" -"gv.vc\0" -"archaeological.museum\0agric.za\0" -"bloomberg\0" -"ullensvang.no\0*.cryptonomic.net\0" -"nat.tn\0" -"press.aero\0ltd.hk\0" -"mombetsu.hokkaido.jp\0" -"ch.eu.org\0" -"os\xc3\xb8yro.no\0" -"ternopil.ua\0" -"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0" -"jinsekikogen.hiroshima.jp\0" -"kagoshima.kagoshima.jp\0" -"center.museum\0" -"ann-arbor.mi.us\0" -"barum.no\0" -"servequake.com\0" -"coop.km\0gentlentapis.com\0familyds.org\0" -"brescia.it\0nyaa.am\0" -"dn.ua\0" -"technology.museum\0" -"lib.ak.us\0" -"host\0" -"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0*.oci.customer-oci.com\0" -"\xe7\xbd\x91\xe7\xb5\xa1.hk\0" -"yasugi.shimane.jp\0marine.ru\0" -"\xe9\x95\xb7\xe5\xb4\x8e.jp\0art.sn\0" -"recreation.aero\0" -"zuerich\0de.trendhosting.cloud\0" -"ddr.museum\0" -"zp.ua\0" -"ube.yamaguchi.jp\0airguard.museum\0k12.mo.us\0" -"happou.akita.jp\0ny-2.paas.massivegrid.net\0" -"oppegard.no\0mragowo.pl\0" -"terni.it\0lib.wi.us\0christmas\0" -"kisosaki.mie.jp\0wios.gov.pl\0fidelity\0" -"beppu.oita.jp\0" -"troitsk.su\0" -"ao.it\0impertrix.com\0" -"hiratsuka.kanagawa.jp\0" -"ltd.lk\0" -"sanfrancisco.museum\0" -"amber.museum\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0" -"hjelmeland.no\0" -"gov.ac\0" -"gov.ae\0" -"gov.af\0kddi\0" -"gwiddle.co.uk\0" -"gojome.akita.jp\0kumano.hiroshima.jp\0" -"higashikurume.tokyo.jp\0" -"gov.al\0" -"est-a-la-maison.com\0" -"lg.ua\0" -"gov.ba\0flir\0" -"gov.ar\0gov.bb\0" -"gov.as\0" -"iwate.jp\0" -"gov.au\0jor.br\0demon.nl\0" -"gov.bf\0misato.shimane.jp\0" -"gov.bh\0ltd.ng\0" -"gov.az\0michigan.museum\0" -"gov.bm\0" -"gov.bn\0selfip.info\0" -"idv.tw\0" -"gov.br\0" -"gov.bs\0" -"gov.bt\0gov.cd\0js.wpenginepowered.com\0" -"sassari.it\0nyny.museum\0rec.nf\0" -"staples\0" -"gov.by\0" -"gov.bz\0" -"mcpe.me\0" -"gov.cl\0" -"gov.cm\0" -"gov.cn\0dyn-o-saur.com\0" -"gov.co\0" +"dr.na\0" +"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" +"blogspot.co.uk\0" +"go.id\0oiso.kanagawa.jp\0miasta.pl\0consulado.st\0" +"artsandcrafts.museum\0epilepsy.museum\0" +"ac.ug\0cloudns.pw\0" +"nom.ad\0fujiyoshida.yamanashi.jp\0" +"agric.za\0" +"ac.tz\0" +"nom.ag\0a.bg\0ac.uk\0" +"ibigawa.gifu.jp\0primetel.cloud\0" +"is-a-musician.com\0" +"notaires.fr\0" +"abr.it\0discourse.group\0" +"reservd.disrec.thingdust.io\0" +"go.it\0android\0" +"net.sa\0stada\0hopto.me\0" +"net.sb\0" +"bjarkoy.no\0net.sc\0" +"olbiatempio.it\0net.sd\0map.fastlylb.net\0" +"georgia.museum\0dopaas.com\0net.ru\0", + +"j.bg\0net.rw\0net.sg\0*.advisor.ws\0nh-serv.co.uk\0" +"shinonsen.hyogo.jp\0ngo.ph\0net.sh\0" +"kunstsammlung.museum\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0" +"ac.vn\0" +"b\xc3\xb8.telemark.no\0malatvuopmi.no\0hamburg\0reservd.dev.thingdust.io\0" +"go.jp\0otsuchi.iwate.jp\0net.sl\0" +"net.so\0al.us\0" +"bounceme.net\0" +"go.ke\0" +"porsgrunn.no\0net.ss\0" +"!city.yokohama.jp\0tarnobrzeg.pl\0net.st\0dish\0" +"is-a-chef.com\0" +"s.bg\0gjerdrum.no\0" +"shiogama.miyagi.jp\0tara.saga.jp\0yamada.toyama.jp\0net.th\0" +"net.sy\0" +"net.tj\0" +"s\xc3\xb8r-aurdal.no\0" +"pa.gov.pl\0best\0" +"net.tm\0" +"go.kr\0net.tn\0surf\0\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0" +"nom.co\0net.to\0" +"shingu.fukuoka.jp\0oizumi.gunma.jp\0obira.hokkaido.jp\0chizu.tottori.jp\0" +"civilization.museum\0net.ua\0pokrovsk.su\0" +"net.tr\0" +"nakagawa.hokkaido.jp\0sanagochi.tokushima.jp\0net.tt\0bc.platform.sh\0" +"portal.museum\0" +"prd.fr\0*.lclstage.dev\0" +"net.tw\0auto\0public-inquiry.uk\0" +"banamex\0" +"fm.no\0luroy.no\0net.uk\0" +"visa\0selfip.com\0fastvps-server.com\0co.place\0" +"lindesnes.no\0rakkestad.no\0net.vc\0" +"imakane.hokkaido.jp\0" +"net.ve\0fnwk.site\0" "karm\xc3\xb8y.no\0" -"haugesund.no\0" -"osen.no\0" -"rennesoy.no\0" -"gov.cu\0" -"toyoake.aichi.jp\0knx-server.net\0" -"gov.cx\0\xe5\xae\xae\xe5\xb4\x8e.jp\0" -"gov.cy\0" -"takino.hyogo.jp\0cya.gg\0" -"hellas.museum\0" -"medicina.bo\0xj.cn\0" -"gov.dm\0" -"at.eu.org\0" -"gov.do\0vanylven.no\0" -"cn-north-1.eb.amazonaws.com.cn\0" -"izumi.osaka.jp\0" -"nakagusuku.okinawa.jp\0" -"gov.ec\0" -"gov.ee\0" -"gov.eg\0himi.toyama.jp\0" -"esashi.hokkaido.jp\0" -"morena.br\0gov.dz\0vda.it\0skygearapp.com\0" -"works\0" -"firm.ht\0cc.ar.us\0world\0" -"tenkawa.nara.jp\0" -"tokashiki.okinawa.jp\0" -"gov.et\0" -"press\0" -"tempio-olbia.it\0gobo.wakayama.jp\0" -"firm.in\0land-4-sale.us\0" -"gov.fj\0s3.ca-central-1.amazonaws.com\0" -"ox.rs\0" -"\xe7\x86\x8a\xe6\x9c\xac.jp\0" -"asago.hyogo.jp\0" -"\xe5\xa4\xa7\xe5\x88\x86.jp\0kita.tokyo.jp\0flickr\0" -"otaru.hokkaido.jp\0us-east-2.elasticbeanstalk.com\0" -"urbino-pesaro.it\0chihayaakasaka.osaka.jp\0" -"isumi.chiba.jp\0artsandcrafts.museum\0essex.museum\0" -"nagoya\0" +"soo.kagoshima.jp\0" +"net.uy\0net.vi\0" +"net.uz\0" +"marriott\0" +"nb.ca\0ac.za\0prime\0" +"net.vn\0" +"bryne.no\0" +"lig.it\0is.it\0bihoro.hokkaido.jp\0" +"niepce.museum\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0" +"student.aero\0nom.es\0il.eu.org\0" +"*.kitakyushu.jp\0inuyama.aichi.jp\0" +"net.vu\0mydrobo.com\0" +"aramco\0weibo\0" +"is-a-geek.net\0" +"ac.zm\0blogspot.co.ke\0" +"broker\0" +"barrel-of-knowledge.info\0" +"hasura-app.io\0" +"nt.au\0from-mt.com\0from-nd.com\0" +"far.br\0nom.fr\0" +"net.ws\0ac.zw\0platterp.us\0" +"targi.pl\0" +"nature.museum\0supply\0s3-ap-south-1.amazonaws.com\0official.academy\0" +"rovigo.it\0joboji.iwate.jp\0" +"teva\0s3-ap-southeast-2.amazonaws.com\0" +"saga.saga.jp\0" +"nt.ca\0london.museum\0viva\0" +"dr.tr\0name.vn\0" +"qa2.com\0" +"pr.gov.br\0free.hr\0" +"hu.eu.org\0ie.eu.org\0" +"kagawa.jp\0kumamoto.kumamoto.jp\0azure-mobile.net\0" +"net.ye\0" +"surgeonshall.museum\0" +"vivo\0mysecuritycamera.org\0" +"tagami.niigata.jp\0" +"\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"winb.gov.pl\0" +"prd.km\0fundacio.museum\0net.za\0mycd.eu\0" +"go.pw\0" +"aoste.it\0firenze.it\0namikata.ehime.jp\0" +"her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0phx.enscaled.us\0" +"arezzo.it\0gotsu.shimane.jp\0router.management\0" +"name.tj\0" +"higashiomi.shiga.jp\0" +"net.zm\0" +"plumbing\0" +"homeftp.net\0" +"film.museum\0" +"adv.mz\0name.tr\0" +"name.tt\0" +"browsersafetymark.io\0" +"soka.saitama.jp\0" +"prd.mg\0mosj\xc3\xb8""en.no\0" +"lg.jp\0" +"blogspot.co.nz\0" +"shikaoi.hokkaido.jp\0" +"s3-ap-northeast-1.amazonaws.com\0" +"qcx.io\0" +"gratangen.no\0" +"tokigawa.saitama.jp\0aogashima.tokyo.jp\0tmall\0ju.mp\0" +"nom.km\0lviv.ua\0ui.nabu.casa\0" +"cn-northwest-1.eb.amazonaws.com.cn\0" +"mi.it\0obama.nagasaki.jp\0" +"ngo.za\0ravendb.me\0" +"flora.no\0" +"bifuka.hokkaido.jp\0shinjuku.tokyo.jp\0go.th\0" +"from-wy.com\0" +"go.tj\0" +"rygge.no\0" +"iwatsuki.saitama.jp\0" +"qh.cn\0" +"bearalvahki.no\0" +"sic.it\0naganohara.gunma.jp\0numazu.shizuoka.jp\0" +"firmdale\0" +"aostavalley.it\0" +"stordal.no\0tolga.no\0go.ug\0" +"horse\0" +"go.tz\0" +"nom.mg\0" +"takayama.nagano.jp\0" +"perso.sn\0" +"isa.us\0" +"sciences.museum\0rs.ba\0" +"modalen.no\0k12.wa.us\0" +"nishiazai.shiga.jp\0futuremailing.at\0" +"name.qa\0is-a-nascarfan.com\0" +"name.pr\0" +"nom.nc\0bjugn.no\0homegoods\0" +"taketomi.okinawa.jp\0" +"skanit.no\0valer.ostfold.no\0id.forgerock.io\0" +"trentinoaadige.it\0" +"nom.ni\0sa.com\0" +"perso.tn\0" +"cc.wi.us\0" +"pruszkow.pl\0" +"seiyo.ehime.jp\0" +"nationalheritage.museum\0name.na\0" +"iwi.nz\0" +"name.mv\0" +"name.ng\0" +"venice.it\0bielawa.pl\0" +"name.my\0" +"sc.cn\0" +"hanggliding.aero\0nissedal.no\0noip.us\0" +"pisa.it\0akita.jp\0" +"cloud66.zone\0*.nodebalancer.linode.com\0" +"lenvik.no\0ia.us\0" +"nom.pa\0nis.za\0" +"ralingen.no\0" +"nom.pe\0myvnc.com\0" +"anani.br\0" +"oksnes.no\0" +"tsukiyono.gunma.jp\0" +"vacations\0" +"chiba.jp\0nom.pl\0debian.net\0dynalias.net\0" +"artgallery.museum\0" +"cuneo.it\0\xe5\xb1\xb1\xe5\xbd\xa2.jp\0takaharu.miyazaki.jp\0serveminecraft.net\0" +"n\xc3\xa5\xc3\xa5mesjevuemie.no\0" +"sabae.fukui.jp\0furukawa.miyagi.jp\0okaya.nagano.jp\0" +"showtime\0university\0ap-southeast-2.elasticbeanstalk.com\0" +"mr.no\0" +"*.owo.codes\0" +"po.it\0kiwa.mie.jp\0" +"gr.eu.org\0" +"eiheiji.fukui.jp\0" +"nom.re\0a.se\0" +"hsbc\0icbc\0" +"yao.osaka.jp\0funagata.yamagata.jp\0" +"environmentalconservation.museum\0\xd0\xba\xd0\xbe\xd0\xbc.\xd1\x80\xd1\x83\xd1\x81\0" +"name.mk\0" +"namerikawa.toyama.jp\0" +"vinnica.ua\0" +"troms\xc3\xb8.no\0nom.ro\0" +"kadogawa.miyazaki.jp\0ondigitalocean.app\0""64-b.it\0" +"ichihara.chiba.jp\0cistron.nl\0" +"stpetersburg.museum\0codeberg.page\0mel.cloudlets.com.au\0" +"beiarn.no\0b\xc3\xa5tsfjord.no\0carrd.co\0" +"from-ma.com\0" +"tw.cn\0" +"nt.no\0" +"colonialwilliamsburg.museum\0" +"med.br\0" +"name.jo\0" +"ra.it\0ibara.okayama.jp\0hinohara.tokyo.jp\0" +"s.se\0nov.ru\0" +"us.eu.org\0" +"slask.pl\0" +"development.run\0" +"tsugaru.aomori.jp\0" +"tas.au\0nom.tm\0lg.ua\0charity\0" +"misugi.mie.jp\0" +"meland.no\0rennes\xc3\xb8y.no\0" +"pavia.it\0" +"nov.su\0blogspot.co.za\0" +"bonn.museum\0sandiego.museum\0" +"med.ec\0" +"tsuruoka.yamagata.jp\0toyota.yamaguchi.jp\0turystyka.pl\0cloud\0" +"med.ee\0stateofdelaware.museum\0" +"mi.th\0" +"nom.ve\0kustanai.ru\0" +"yuasa.wakayama.jp\0" +"homedns.org\0" +"jotelulu.cloud\0" +"khmelnitskiy.ua\0" +"works.aero\0lind\xc3\xa5s.no\0pors\xc3\xa1\xc5\x8bgu.no\0" +"tatsuno.hyogo.jp\0" +"sc.ke\0" +"lyngdal.no\0codes\0" +"kisarazu.chiba.jp\0" +"fhsk.se\0gr.com\0kustanai.su\0" +"orsta.no\0" +"kosei.shiga.jp\0" +"*.vps.myjino.ru\0" +"nt.ro\0" +"jinsekikogen.hiroshima.jp\0minamiashigara.kanagawa.jp\0po.gov.pl\0" +"brussels.museum\0" +"sc.kr\0" +"mi.us\0" +"te.it\0furano.hokkaido.jp\0nobeoka.miyazaki.jp\0ketrzyn.pl\0" +"lier.no\0b-data.io\0" +"friuli-ve-giulia.it\0" +"helsinki.museum\0museumcenter.museum\0" +"eidfjord.no\0" +"kunimi.fukushima.jp\0bunkyo.tokyo.jp\0" +"center.museum\0maritime.museum\0gub.uy\0from-nv.com\0" +"kaufen\0" +"sc.ls\0" +"vda.it\0tn.it\0" +"lib.ct.us\0flights\0pstmn.io\0" +"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0lomza.pl\0" +"botanical.museum\0sologne.museum\0" +"mywire.org\0" +"\xe6\x85\x88\xe5\x96\x84\0" "is-a-linux-user.org\0" +"ookuwa.nagano.jp\0ashikaga.tochigi.jp\0is-a-chef.net\0" +"od.ua\0" +"for-some.biz\0" +"mil.ac\0b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0meloy.no\0" +"med.ht\0yawata.kyoto.jp\0" +"mil.ae\0nom.za\0" +"paroch.k12.ma.us\0" +"mil.al\0campobasso.it\0kobierzyce.pl\0hosting-cluster.nl\0" +"taa.it\0lplfinancial\0" +"mil.ba\0noip.me\0" +"mil.ar\0" +"hobby-site.com\0" +"tonami.toyama.jp\0" +"website\0" +"mil.az\0" +"grosseto.it\0kunitomi.miyazaki.jp\0hasura.app\0" +"bet.ar\0" +"mil.bo\0movimiento.bo\0" +"seidat.net\0" +"mil.br\0" +"reggiocalabria.it\0vi.it\0" +"royken.no\0" +"mil.by\0" +"mil.cl\0shimosuwa.nagano.jp\0" +"jus.br\0mil.cn\0" +"mil.co\0" +"chikushino.fukuoka.jp\0perspecta.cloud\0" +"karacol.su\0forgeblocks.com\0" +"vr.it\0" +"otago.museum\0""1kapp.com\0" +"ong.br\0guardian\0" +"anpachi.gifu.jp\0" +"mil.cy\0trycloudflare.com\0lohmus.me\0" +"dnsdojo.org\0from-me.org\0" +"hioki.kagoshima.jp\0" +"norfolk.museum\0" +"mil.do\0" +"oshu.iwate.jp\0" +"mil.ec\0is-a-bruinsfan.org\0" +"aero.tt\0gov.scot\0" +"blogspot.com\0" +"mil.eg\0barclays\0" +"trentinosud-tirol.it\0mikasa.hokkaido.jp\0" +"med.ly\0" +"!www.ck\0" +"suzu.ishikawa.jp\0saku.nagano.jp\0static.land\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0" +"ishikawa.fukushima.jp\0" +"kalmykia.su\0" +"appspacehosted.com\0" +"aero.mv\0" +"urakawa.hokkaido.jp\0nanbu.tottori.jp\0food\0" +"media.hu\0intelligence.museum\0nikolaev.ua\0is-gone.com\0my-wan.de\0" +"mil.fj\0" +"time.no\0" +"kuwana.mie.jp\0tsuwano.shimane.jp\0imamat\0" +"attorney\0filegear-sg.me\0" +"heroy.more-og-romsdal.no\0" +"la-spezia.it\0" +"jewish.museum\0" +"miyako.fukuoka.jp\0akaiwa.okayama.jp\0" +"mil.ge\0" +"snasa.no\0" +"mil.gh\0" +"maryland.museum\0amica\0" +"leksvik.no\0" +"\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0" +"med.om\0" +"higashiura.aichi.jp\0" +"med.pa\0" +"mil.gt\0kawazu.shizuoka.jp\0ustka.pl\0" +"s3-website-ap-northeast-1.amazonaws.com\0" +"gjovik.no\0kr\xc3\xa5""anghke.no\0sc.ug\0lib.il.us\0" +"noheji.aomori.jp\0" +"bestbuy\0s3-eu-west-2.amazonaws.com\0" +"sc.tz\0goodyear\0" +"varoy.no\0" +"kokubunji.tokyo.jp\0med.pl\0" +"otsuka\0" +"mil.hn\0localzone.xyz\0" +"kamoenai.hokkaido.jp\0" +"komatsu\0is-a-therapist.com\0kalmykia.ru\0" +"sc.us\0" +"mil.id\0uk.reclaim.cloud\0" +"arkhangelsk.su\0" +"gs.ah.no\0" +"ford\0" +"abogado\0" +"\xe6\x94\xbf\xe5\xba\x9c\0" +"pittsburgh.museum\0clicketcloud.com\0" +"bhz.br\0mil.in\0" +"kimobetsu.hokkaido.jp\0" +"mil.iq\0te.ua\0" +"shoes\0" +"sasaguri.fukuoka.jp\0" +"haram.no\0" +"jelastic.saveincloud.net\0" +"keymachine.de\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0diskstation.org\0" +"yasuoka.nagano.jp\0" +"alt.za\0" +"mil.jo\0tennis\0" +"nishitosa.kochi.jp\0" +"bolt.hu\0civilwar.museum\0nyny.museum\0med.sa\0grocery\0" +"beardu.no\0r\xc3\xb8""d\xc3\xb8y.no\0" +"kahoku.yamagata.jp\0med.sd\0" +"mil.kg\0" +"mil.km\0sciencecenters.museum\0" +"quebec\0scrapping.cc\0collegefan.org\0" +"maizuru.kyoto.jp\0" +"cechire.com\0" +"mil.kr\0" +"farsund.no\0tn.us\0co.business\0" +"honjo.akita.jp\0mutsuzawa.chiba.jp\0ojiya.niigata.jp\0" +"career\0" +"trader.aero\0" +"naie.hokkaido.jp\0aizumi.tokushima.jp\0" +"mil.kz\0" +"field.museum\0lugansk.ua\0stockholm\0" +"s\xc3\xb8mna.no\0" +"hirosaki.aomori.jp\0tempurl.host\0" +"sydney\0" +"mil.lv\0" +"mil.mg\0home.dyndns.org\0loginline.services\0" +"is-leet.com\0prvcy.page\0" +"sandnessjoen.no\0\xc3\xa5l.no\0flakstad.no\0eu.org\0" +"hakone.kanagawa.jp\0kikuchi.kumamoto.jp\0minato.tokyo.jp\0digital\0kicks-ass.net\0" +"nesna.no\0k12.az.us\0" +"shop.ht\0watarai.mie.jp\0media.pl\0" +"shop.hu\0" +"open\0" +"hizen.saga.jp\0maibara.shiga.jp\0" +"graz.museum\0from-pr.com\0" +"mil.mv\0" +"mil.ng\0\xc3\xb8yer.no\0locus\0" +"mil.my\0mil.ni\0dyndns-remote.com\0hk.com\0" +"mil.mz\0" +"monash\0" +"computer.museum\0money.museum\0" +"mil.no\0vik.no\0" +"sobetsu.hokkaido.jp\0mw.gov.pl\0bialystok.pl\0" +"lans.museum\0" +"vi.us\0" +"sand\xc3\xb8y.no\0*.diher.solutions\0" +"minami.kyoto.jp\0kotoura.tottori.jp\0minobu.yamanashi.jp\0" +"mil.nz\0" +"samnanger.no\0" +"ogaki.gifu.jp\0iwate.iwate.jp\0pulawy.pl\0" +"s3-us-east-2.amazonaws.com\0" +"air-traffic-control.aero\0" +"ehime.jp\0izunokuni.shizuoka.jp\0" +"tatamotors\0" +"asuke.aichi.jp\0homedepot\0stcgroup\0" +"games.hu\0mil.pe\0" +"lib.md.us\0*.otap.co\0" +"mil.ph\0ownip.net\0" +"tushu\0" +"law.pro\0cc.az.us\0" +"mil.pl\0" +"nittedal.no\0" +"kumamoto.jp\0" +"mil.qa\0" +"statebank\0" +"hamatonbetsu.hokkaido.jp\0" +"ms.gov.br\0" +"lib.nm.us\0us.org\0" +"mil.py\0from-il.com\0" +"froland.no\0" +"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0asakuchi.okayama.jp\0ricoh\0" +"tmp.br\0\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"kuji.iwate.jp\0miyota.nagano.jp\0" +"security\0shiksha\0de.com\0" +"melhus.no\0" +"caltanissetta.it\0yamagata.ibaraki.jp\0" +"piw.gov.pl\0" +"k12.de.us\0feedback\0" +"computerhistory.museum\0\xd1\x8f.\xd1\x80\xd1\x83\xd1\x81\0" +"nemuro.hokkaido.jp\0" +"jewishart.museum\0mil.ru\0tula.su\0*.spectrum.myjino.ru\0health-carereform.com\0" +"mt.gov.br\0" +"bykle.no\0mil.rw\0lib.ok.us\0" +"mil.sh\0\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0" +"\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0" +"cc.de.us\0" +"ar.com\0" +"navuotna.no\0" +"gifu.jp\0cloudaccess.host\0" +"mil.st\0" +"fylkesbibl.no\0jondal.no\0" +"mil.sy\0s3-website-us-west-2.amazonaws.com\0svn-repos.de\0" +"mil.tj\0" +"gildeskal.no\0grimstad.no\0inder\xc3\xb8y.no\0" +"museet.museum\0mil.tm\0*.landing.myjino.ru\0" +"mil.to\0booking\0" +"oi.kanagawa.jp\0" +"compare\0" +"eco.br\0mil.tr\0" +"zuerich\0" +"heimatunduhren.museum\0" +"ringebu.no\0mil.tw\0gwiddle.co.uk\0" +"ichinomiya.chiba.jp\0midori.chiba.jp\0" +"hotelwithflight.com\0" +"mil.tz\0" +"bronnoy.no\0" +"oguchi.aichi.jp\0ilawa.pl\0" +"mazeplay.com\0" +"hellas.museum\0" +"mil.vc\0" +"kasugai.aichi.jp\0global.prod.fastly.net\0" +"mil.ve\0" +"gs.hm.no\0" +"oarai.ibaraki.jp\0shibata.niigata.jp\0" +"mil.uy\0synology.me\0" +"aerodrome.aero\0" +"minamiizu.shizuoka.jp\0yandexcloud.net\0" +"solar\0" +"bato.tochigi.jp\0" +"nyc.museum\0" +"kimitsu.chiba.jp\0ohi.fukui.jp\0konsulat.gov.pl\0" +"holiday\0" +"police.uk\0" +"kariya.aichi.jp\0" +"indianapolis.museum\0" +"bc.ca\0assisi.museum\0" +"h\xc3\xa6gebostad.no\0" +"akashi.hyogo.jp\0rawa-maz.pl\0" +"durban\0" +"\xc3\xb8ygarden.no\0ferrero\0" +"matsudo.chiba.jp\0horonobe.hokkaido.jp\0nakagawa.tokushima.jp\0select\0" +"folionetwork.site\0myiphost.com\0" +"dyn53.io\0" +"flog.br\0" +"naroy.no\0" +"hatogaya.saitama.jp\0nasushiobara.tochigi.jp\0" +"gitpage.si\0" +"mil.ye\0africa\0" +"kristiansand.no\0fr.eu.org\0" +"higashine.yamagata.jp\0" +"isleofman.museum\0" +"shimodate.ibaraki.jp\0kameyama.mie.jp\0olawa.pl\0read\0" +"tiaa\0dyndns.ddnss.de\0" +"ikeda.fukui.jp\0kuju.oita.jp\0" +"mil.za\0" +"gaivuotna.no\0" +"pesaro-urbino.it\0" +"rochester.museum\0company\0withyoutube.com\0" +"servebbs.net\0" +"vlog.br\0" +"ogliastra.it\0" +"historical.museum\0mil.zm\0" +"test.tj\0" +"hidaka.kochi.jp\0clerkstage.app\0" +"diskussionsbereich.de\0" +"lib.sc.us\0mil.zw\0rdv.to\0" +"iwate.jp\0toda.saitama.jp\0sumida.tokyo.jp\0" +"mc.eu.org\0" +"palermo.it\0" +"lima-city.de\0" +"research.aero\0halden.no\0" +"trentin-s\xc3\xbc""dtirol.it\0kashiba.nara.jp\0yamanakako.yamanashi.jp\0" +"dynalias.org\0" +"museum\0is-a-socialist.com\0" +"shimoichi.nara.jp\0izena.okinawa.jp\0" +"is-a-hunter.com\0loginto.me\0" +"riobranco.br\0" +"vestv\xc3\xa5g\xc3\xb8y.no\0cust.retrosnub.co.uk\0" +"ushiku.ibaraki.jp\0okutama.tokyo.jp\0" +"ieee\0dynamisches-dns.de\0" +"lamer\0" +"kids\0independent-review.uk\0" +"okazaki.aichi.jp\0" +"historisch.museum\0" +"test.ru\0is-a-cpa.com\0paas.datacenter.fi\0" +"lt.eu.org\0" +"lima-city.at\0" +"dinosaur.museum\0" +"doesntexist.org\0" +"nakatsugawa.gifu.jp\0hirogawa.wakayama.jp\0" +"takko.aomori.jp\0siteleaf.net\0" +"noop.app\0" +"academy\0" +"motosu.gifu.jp\0" +"dyndns-pics.com\0" +"aurskog-holand.no\0" +"lima-city.ch\0" +"griw.gov.pl\0" +"shinjo.okayama.jp\0" +"page\0" +"is-a-painter.com\0" +"vald-aosta.it\0bl.it\0bozen.it\0gamagori.aichi.jp\0matsukawa.nagano.jp\0london.cloudapps.digital\0" +"lebesby.no\0tickets\0" +"inami.wakayama.jp\0" +"is-a-nurse.com\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0" +"lib.ut.us\0" +"malbork.pl\0dnsdojo.net\0myspreadshop.nl\0" +"myspreadshop.no\0" +"living.museum\0\xed\x95\x9c\xea\xb5\xad\0" +"freebox-os.fr\0" +"k12.ks.us\0" +"ce.it\0" +"cinema.museum\0delivery\0eu-west-2.elasticbeanstalk.com\0wphostedmail.com\0" +"stuff-4-sale.org\0" +"shop.th\0" +"dy.fi\0" +"economia.bo\0solund.no\0" +"helsinki\0webhosting.be\0" +"gd.cn\0" +"gv.ao\0aa.no\0lorenskog.no\0cc.ks.us\0" +"tenei.fukushima.jp\0ogimi.okinawa.jp\0kutno.pl\0" +"gv.at\0cn.it\0toyone.aichi.jp\0j.scaleforce.net\0" +"bike\0s3.ca-central-1.amazonaws.com\0" +"place\0" +"for-better.biz\0" +"myspreadshop.pl\0" +"lewismiller.museum\0" +"monza-brianza.it\0katsuragi.wakayama.jp\0reit\0user.srcf.net\0" +"qualifioapp.com\0" +"k12.me.us\0" +"kyonan.chiba.jp\0kami.miyagi.jp\0" +"discourse.team\0my-vigor.de\0" +"glass\0" +"hekinan.aichi.jp\0ozu.kumamoto.jp\0" +"2.bg\0" +"yonabaru.okinawa.jp\0za.net\0" +"dyndns-wiki.com\0" +"randaberg.no\0cc.me.us\0shop.ro\0" +"hospital\0" +"platter-app.dev\0" +"k12.nh.us\0" +"valle-aosta.it\0\xe6\xb2\x96\xe7\xb8\x84.jp\0myspreadshop.it\0" +"poltava.ua\0" +"d.gv.vc\0" +"is-certified.com\0" +"ppg.br\0" +"game\0house\0" +"cc.mn.us\0" +"omitama.ibaraki.jp\0" +"k12.mo.us\0from.work\0" +"newyork.museum\0" +"bing\0" +"rexroth\0" +"trentino-stirol.it\0bozen-suedtirol.it\0yachiyo.chiba.jp\0shop.pl\0pages.torproject.net\0" +"bu.no\0" +"chijiwa.nagasaki.jp\0" +"rad\xc3\xb8y.no\0eng.pro\0" +"taranto.it\0faststacks.net\0" +"spy.museum\0" +"aremark.no\0" +"kamifurano.hokkaido.jp\0kinokawa.wakayama.jp\0" +"is-into-cartoons.com\0" +"schlesisches.museum\0ing.pa\0" +"canon\0flt.cloud.muni.cz\0" +"semine.miyagi.jp\0kawachinagano.osaka.jp\0" +"association.aero\0s\xc3\xb8r-fron.no\0" +"uk.net\0" +"kaluga.su\0" +"affinitylottery.org.uk\0" +"fujimi.saitama.jp\0" +"ap-northeast-2.elasticbeanstalk.com\0" +"cloud66.ws\0" +"kawai.iwate.jp\0" +"cc.ny.us\0" +"tsurugi.ishikawa.jp\0kitagata.saga.jp\0rent\0" +"agematsu.nagano.jp\0ishikawa.okinawa.jp\0" +"us-gov-west-1.elasticbeanstalk.com\0" +"ma.leg.br\0" +"conference.aero\0midsund.no\0" +"ravendb.cloud\0" +"homeunix.com\0" +"js.cn\0" +"cc.or.us\0" +"otoineppu.hokkaido.jp\0" +"zaporizhzhe.ua\0" +"daejeon.kr\0gyeongbuk.kr\0" +"grue.no\0" +"powiat.pl\0" +"manchester.museum\0osaka\0try-snowplow.com\0" +"palmas.br\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0" +"gru.br\0" +"h.bg\0" +"siracusa.it\0*.kawasaki.jp\0" +"ocelot.mythic-beasts.com\0" +"\xe6\xa0\x83\xe6\x9c\xa8.jp\0higashiagatsuma.gunma.jp\0" +"house.museum\0" +"pilot.aero\0oppegard.no\0tips\0kicks-ass.org\0" +"rishirifuji.hokkaido.jp\0hamatama.saga.jp\0wpmudev.host\0" +"under.one\0" +"mitake.gifu.jp\0" +"sellfy.store\0" +"q.bg\0" +"rimini.it\0" +"eu.pythonanywhere.com\0" +"reggio-emilia.it\0hiroshima.jp\0" +"\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0" +"lavangen.no\0tj\xc3\xb8me.no\0as.us\0" +"anthro.museum\0portland.museum\0" +"not.br\0" +"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0tiffany\0\xd0\xb1\xd0\xb8\xd0\xb7.\xd1\x80\xd1\x83\xd1\x81\0" +"z.bg\0pars\0" +"embetsu.hokkaido.jp\0makurazaki.kagoshima.jp\0" +"ln.cn\0" +"mk.eu.org\0" +"yugawa.fukushima.jp\0kariwa.niigata.jp\0aguni.okinawa.jp\0" +"webhop.me\0" +"staples\0" +"homelinux.com\0" +"ayagawa.kagawa.jp\0suzaka.nagano.jp\0" +"transporte.bo\0" +"free\0from-mi.com\0" +"cupcake.is\0" +"rest\0dattolocal.net\0storage.yandexcloud.net\0" +"cn.ua\0goip.de\0" +"mp.br\0iz.hr\0" +"izumizaki.fukushima.jp\0taku.saga.jp\0" +"in-berlin.de\0myspreadshop.se\0" +"barreau.bj\0" +"leangaviika.no\0" +"tranibarlettaandria.it\0hannan.osaka.jp\0" +"onion\0" +"mj\xc3\xb8ndalen.no\0misconfused.org\0" +"nishihara.okinawa.jp\0okinoshima.shimane.jp\0" +"archi\0" +"kids.us\0" +"kashima.saga.jp\0" +"macapa.br\0" +"game-server.cc\0" +"from-ct.com\0" +"dyroy.no\0" +"kashiwazaki.niigata.jp\0" +"rishiri.hokkaido.jp\0" +"sjc.br\0" +"instances.spawn.cc\0" +"yuu.yamaguchi.jp\0" +"dp.ua\0" +"caxias.br\0cng.br\0" +"t\xc3\xb8nsberg.no\0bitbucket.io\0dh.bytemark.co.uk\0edugit.io\0" +"imperia.it\0" +"cn.vu\0" +"arendal.no\0" +"etajima.hiroshima.jp\0" +"kiwi\0is-a-bookkeeper.com\0" +"physio\0" +"tonaki.okinawa.jp\0iwade.wakayama.jp\0" +"stufftoread.com\0" +"lu.eu.org\0me.eu.org\0" +"cesenaforl\xc3\xac.it\0myfast.host\0" +"its.me\0" +"arna.no\0lahppi.no\0" +"miyoshi.saitama.jp\0skoczow.pl\0" +"worse-than.tv\0" +"dyndns-office.com\0" +"campinas.br\0*.code.run\0" +"\xe7\xa6\x8f\xe4\xba\x95.jp\0" +"smile\0" +"le.it\0nagato.yamaguchi.jp\0" +"coldwar.museum\0" +"ac.gov.br\0" +"balsfjord.no\0" +"tomobe.ibaraki.jp\0komatsu.ishikawa.jp\0" +"americanantiques.museum\0" +"hiranai.aomori.jp\0fukagawa.hokkaido.jp\0" +"lv.eu.org\0" +"tsuruta.aomori.jp\0sakura.tochigi.jp\0" +"gbiz\0" +"\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0" +"linkyard-cloud.ch\0" +"entomology.museum\0bridgestone\0" +"opole.pl\0" +"madrid.museum\0s3-ap-northeast-2.amazonaws.com\0" +"aquila.it\0hiroo.hokkaido.jp\0izumi.kagoshima.jp\0" +"slg.br\0" +"kvinnherad.no\0" +"florence.it\0radom.pl\0" +"guovdageaidnu.no\0" +"takarazuka.hyogo.jp\0familyds.net\0" +"flatanger.no\0" +"media.museum\0gucci\0" +"properties\0leadpages.co\0" +"my.id\0nakai.kanagawa.jp\0" +"and.museum\0cyber.museum\0lk3.ru\0" +"marshalls\0" +"aizumisato.fukushima.jp\0pisz.pl\0fr-1.paas.massivegrid.net\0" +"elasticbeanstalk.com\0" +"analytics\0" +"kagoshima.kagoshima.jp\0" +"hongo.hiroshima.jp\0" +"sa.au\0britishcolumbia.museum\0" +"tanabe.wakayama.jp\0" +"game.tw\0" +"miura.kanagawa.jp\0" +"wif.gov.pl\0" +"birthplace.museum\0" +"nord-odal.no\0gv.vc\0kaas.gg\0" +"yamakita.kanagawa.jp\0onna.okinawa.jp\0koganei.tokyo.jp\0" +"navigation.aero\0" +"sagamihara.kanagawa.jp\0taiji.wakayama.jp\0" +"suifu.ibaraki.jp\0definima.net\0" +"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" +"sa.cr\0" +"nagara.chiba.jp\0" +"hamaroy.no\0" +"acct.pro\0" +"shimogo.fukushima.jp\0rankoshi.hokkaido.jp\0supabase.net\0" +"valley.museum\0" +"cc.wy.us\0" +"kanan.osaka.jp\0" +"toyota\0" +"tc.br\0" +"myspreadshop.es\0" +"ot.it\0pd.it\0wedeploy.sh\0" +"trentin-sud-tirol.it\0hashbang.sh\0" +"myspreadshop.fi\0" +"freeddns.org\0" +"kitaakita.akita.jp\0blog.gt\0" +"qld.au\0" +"gangwon.kr\0" +"ogori.fukuoka.jp\0tsuga.tochigi.jp\0" +"myspreadshop.fr\0" +"beta.bounty-full.com\0" +"aver\xc3\xb8y.no\0" +"carrier.museum\0" +"bahn.museum\0" +"langev\xc3\xa5g.no\0kr.eu.org\0" +"nango.fukushima.jp\0" +"copenhagen.museum\0russia.museum\0barsycenter.com\0" +"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" +"pv.it\0zushi.kanagawa.jp\0" +"delaware.museum\0dnipropetrovsk.ua\0s3.ap-south-1.amazonaws.com\0gotdns.com\0" +"gj\xc3\xb8vik.no\0lib.al.us\0" +"hazu.aichi.jp\0" +"h.se\0science\0fuettertdasnetz.de\0" +"tomigusuku.okinawa.jp\0nikko.tochigi.jp\0" +"mobi\0" +"enterprises\0" +"utah.museum\0" +"ens.tn\0" +"\xe6\xb8\xb8\xe6\x88\x8f\0" +"myspreadshop.ie\0" +"blog.bo\0docs\0" +"blog.br\0" +"b\xc3\xa1hcavuotna.no\0es.eu.org\0" +"echizen.fukui.jp\0gushikami.okinawa.jp\0" +"steiermark.museum\0ravendb.community\0" +"git-repos.de\0" +"epson\0" +"otoyo.kochi.jp\0oe.yamagata.jp\0a.run.app\0myspreadshop.at\0" +"cody.museum\0moda\0myspreadshop.be\0" +"l\xc3\xb8""dingen.no\0\xc3\xb8vre-eiker.no\0lib.az.us\0" +"sakai.ibaraki.jp\0ny-2.paas.massivegrid.net\0" +"z.se\0" +"higashishirakawa.gifu.jp\0" +"from-md.com\0fin.ci\0" +"hamar.no\0pccw\0duckdns.org\0" +"campidanomedio.it\0" +"naturhistorisches.museum\0cipriani\0photography\0myspreadshop.ca\0" +"sa.it\0semboku.akita.jp\0" +"dyn-o-saur.com\0" +"lib.as.us\0" +"basilicata.it\0piacenza.it\0myspreadshop.ch\0" +"fie.ee\0""12hp.de\0" +"tonosho.kagawa.jp\0" +"gouv.fr\0" +"skien.no\0" +"myspreadshop.de\0" +"fin.ec\0" +"tarui.gifu.jp\0zachpomor.pl\0" +"vagsoy.no\0myspreadshop.dk\0" +"kaneyama.yamagata.jp\0" +"servebbs.org\0" +"atami.shizuoka.jp\0" +"asn.au\0" +"boavista.br\0" +"ss.it\0shimoda.shizuoka.jp\0" +"lib.ca.us\0" +"valdaosta.it\0maebashi.gunma.jp\0""12hp.at\0" +"act.edu.au\0" +"dell-ogliastra.it\0realestate.pl\0web.app\0" +"likes-pie.com\0" +"za.org\0" +"gouv.ht\0" +"hapmir.no\0" +"culturalcenter.museum\0chrome\0myforum.community\0" +"est.pr\0" +"midtre-gauldal.no\0nord-aurdal.no\0" +"nabari.mie.jp\0kamitonda.wakayama.jp\0""12hp.ch\0" +"southcarolina.museum\0dyn.cosidns.de\0" +"muos\xc3\xa1t.no\0" +"vall\xc3\xa9""eaoste.it\0" +"dscloud.mobi\0" +"gouv.bj\0" +"lib.co.us\0\xd2\x9b\xd0\xb0\xd0\xb7\0" +"time.museum\0" +"net.eu.org\0" +"friuli-venezia-giulia.it\0nagano.jp\0" +"serveexchange.com\0" +"kutchan.hokkaido.jp\0" +"savannahga.museum\0wedeploy.me\0" +"okagaki.fukuoka.jp\0" +"gouv.ci\0" +"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" +"evenes.no\0" +"higashi.fukuoka.jp\0isehara.kanagawa.jp\0" +"kamisu.ibaraki.jp\0homelinux.net\0" +"iwaizumi.iwate.jp\0" +"hob\xc3\xb8l.no\0ok.us\0" +"atsuma.hokkaido.jp\0shinkamigoto.nagasaki.jp\0" +"progressive\0\xd7\xa7\xd7\x95\xd7\x9d\0ezproxy.kuleuven.be\0" +"al.gov.br\0center\0" +"nanjo.okinawa.jp\0matsubara.osaka.jp\0" +"boutique\0" +"mitou.yamaguchi.jp\0" +"from-tx.com\0" +"bas.it\0nakama.fukuoka.jp\0ariake.saga.jp\0" +"shiwa.iwate.jp\0haga.tochigi.jp\0dentist\0" +"skygearapp.com\0" +"mg.leg.br\0" +"flor\xc3\xb8.no\0grane.no\0ventures\0" +"is-a-techie.com\0" +"!city.kitakyushu.jp\0nanbu.yamanashi.jp\0" +"database.museum\0cherkasy.ua\0s3.dualstack.us-east-2.amazonaws.com\0sphinx.mythic-beasts.com\0" +"aomori.aomori.jp\0in-the-band.net\0" +"trentinosued-tirol.it\0" +"independent-inquest.uk\0" +"umi.fukuoka.jp\0iwanuma.miyagi.jp\0netlify.app\0" +"saskatchewan.museum\0" +"\xe9\x95\xb7\xe9\x87\x8e.jp\0group\0" +"paris.museum\0mcdir.me\0" +"\xe5\xae\xae\xe5\x9f\x8e.jp\0chikujo.fukuoka.jp\0cloudaccess.net\0" +"s3-us-west-2.amazonaws.com\0" +"\xc3\xb8rskog.no\0\xce\xb5\xce\xbb\0" +"insurance\0" +"ipifony.net\0" +"farmers.museum\0" +"\xce\xb5\xcf\x85\0" +"friulivegiulia.it\0morotsuka.miyazaki.jp\0" +"\xc3\xa5""fjord.no\0kvitsoy.no\0romskog.no\0lib.hi.us\0" +"mragowo.pl\0" +"fi.eu.org\0" +"blog.vu\0" +"hemnes.no\0" +"kazo.saitama.jp\0hangout\0" +"bauern.museum\0" +"foz.br\0" +"monzabrianza.it\0karatsu.saga.jp\0" +"friulivenezia-giulia.it\0" +"skole.museum\0is-an-artist.com\0" +"awsmppl.com\0" +"accident-prevention.aero\0safety.aero\0" +"*.ex.ortsinfo.at\0" +"jeju.kr\0" +"tinn.no\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0" +"iwanai.hokkaido.jp\0" +"austin.museum\0" +"asn.lv\0" +"odessa.ua\0" +"eidskog.no\0hopto.org\0" +"trondheim.no\0" +"kawakami.nagano.jp\0" +"biz.bb\0" +"is-very-good.org\0" +"imabari.ehime.jp\0biz.at\0" +"finland.museum\0bashkiria.ru\0" +"soccer\0" +"abiko.chiba.jp\0kanonji.kagawa.jp\0" +"biz.az\0" +"paragliding.aero\0" +"shiroishi.miyagi.jp\0" +"mormon\0" +"hvaler.no\0" +"toyota.aichi.jp\0shimane.shimane.jp\0" +"is-a-rockstar.com\0bashkiria.su\0" +"takamori.nagano.jp\0" +"air-surveillance.aero\0" +"airguard.museum\0hembygdsforbund.museum\0" +"feira.br\0" +"cyon.link\0" +"moto\0" +"nikaho.akita.jp\0" +"biz.cy\0" +"biz.dk\0azimuth.network\0" +"muroto.kochi.jp\0" +"chiropractic.museum\0kommunalforbund.se\0vote\0" +"on-the-web.tv\0" +"taiki.mie.jp\0kumenan.okayama.jp\0scrapper-site.net\0" +"promo\0" +"toya.hokkaido.jp\0toyonaka.osaka.jp\0" +"fin.tn\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0" +"kerrylogistics\0voto\0" +"usdecorativearts.museum\0" +"fishing\0*.sys.qcx.io\0" +"trentino-aadige.it\0urausu.hokkaido.jp\0kawahara.tottori.jp\0*.sensiosite.cloud\0" +"asmatart.museum\0" +"\xc3\xa5s.no\0roan.no\0shiftcrypto.io\0wedeploy.io\0" +"kamioka.akita.jp\0" +"santacruz.museum\0" +"gratis\0" +"biz.et\0buzen.fukuoka.jp\0miasa.nagano.jp\0yufu.oita.jp\0kakegawa.shizuoka.jp\0" +"torino.museum\0" +"knowsitall.info\0" +"corsica\0" +"biz.fj\0" +"lib.la.us\0" +"dsmynas.com\0" +"kanegasaki.iwate.jp\0principe.st\0" +"farmequipment.museum\0" +"experts-comptables.fr\0" +"mcdir.ru\0servehttp.com\0" +"dellogliastra.it\0kamimine.saga.jp\0" +"kongsvinger.no\0" +"oki.fukuoka.jp\0miki.hyogo.jp\0nishiwaki.hyogo.jp\0target\0biz.gl\0" +"utsunomiya.tochigi.jp\0" +"virtuel.museum\0troitsk.su\0" +"ena.gifu.jp\0ooshika.nagano.jp\0" +"tozsde.hu\0blogsyte.com\0" +"vlaanderen\0" +"hornindal.no\0v\xc3\xa6r\xc3\xb8y.no\0wi.us\0" +"lebork.pl\0gdansk.pl\0" +"mod.gi\0orsites.com\0" +"etnedal.no\0cc.ca.us\0" +"ascoli-piceno.it\0" +"biz.id\0trentino.it\0parma.it\0hasama.oita.jp\0kai.yamanashi.jp\0merckmsd\0" +"york.museum\0" +"hoylandet.no\0" +"muni.il\0kusatsu.shiga.jp\0" +"lib.mt.us\0lib.nd.us\0" +"gouv.sn\0" +"oga.akita.jp\0" +"skjak.no\0k12.dc.us\0" +"freesite.host\0lon-1.paas.massivegrid.net\0" +"awsglobalaccelerator.com\0" +"forsand.no\0" +"indiana.museum\0" +"cc.dc.us\0" +"salerno.it\0yokote.akita.jp\0\xe6\x9c\xba\xe6\x9e\x84\0" +"blog.kg\0" +"tabitorder.co.il\0" +"azurewebsites.net\0" +"biz.ki\0trust.museum\0" +"ggf.br\0" +"sykkylven.no\0" +"iheya.okinawa.jp\0" +"hammerfest.no\0" +"shari.hokkaido.jp\0" +"lasalle\0" +"nhlfan.net\0" +"tosashimizu.kochi.jp\0oseto.nagasaki.jp\0" +"giving\0" +"nagiso.nagano.jp\0" +"biz.ls\0" +"tateyama.chiba.jp\0" +"deno-staging.dev\0" +"damnserver.com\0" +"blog\0" +"orland.no\0" +"togitsu.nagasaki.jp\0habikino.osaka.jp\0lubin.pl\0" +"is-an-engineer.com\0" +"hinode.tokyo.jp\0" +"biz.mv\0" +"biz.mw\0gs.oslo.no\0eidsvoll.no\0" +"kanazawa.ishikawa.jp\0" +"biz.my\0biz.ni\0" +"tatar\0" +"familyds.org\0" +"chieti.it\0kanagawa.jp\0hichiso.gifu.jp\0" +"ah.cn\0" +"biz.nr\0" +"eero.online\0" +"zapto.xyz\0" +"steam.museum\0" +"norton\0republican\0" +"frosta.no\0" +"accountant\0" +"touch.museum\0azure\0" +"ikawa.akita.jp\0" +"4u.com\0pages.wiardweb.com\0" +"k12.ga.us\0" +"akita.akita.jp\0onomichi.hiroshima.jp\0pippu.hokkaido.jp\0szczecin.pl\0ts.net\0" +"datsun\0" +"mukawa.hokkaido.jp\0" +"biz.pk\0" +"okawa.kochi.jp\0biz.pl\0dnsalias.net\0" +"bj.cn\0" +"restaurant\0" +"childrensgarden.museum\0" +"biz.pr\0" +"higashikagawa.kagawa.jp\0krasnik.pl\0" +"botanicgarden.museum\0watchandclock.museum\0" +"gouv.km\0textile.museum\0" +"izumo.shimane.jp\0cancerresearch\0" +"red.sv\0" +"krakow.pl\0" +"linz.museum\0*.ocp.customer-oci.com\0lynx.mythic-beasts.com\0" +"porsanger.no\0" +"mihama.fukui.jp\0sakuragawa.ibaraki.jp\0" +"grandrapids.museum\0" +"bahcavuotna.no\0q-a.eu.org\0" +"asti.it\0" +"dance\0" +"geek.nz\0" +"cards\0rogers\0" +"yoshioka.gunma.jp\0rich\0" +"blue\0" +"gouv.ml\0psse.gov.pl\0" +"balat.no\0cc.id.us\0" +"bnr.la\0" +"idrett.no\0biz.ss\0id.repl.co\0" +"sande.m\xc3\xb8re-og-romsdal.no\0" +"kyotamba.kyoto.jp\0global\0" +"s3-website-eu-west-1.amazonaws.com\0" +"biz.tj\0" +"misato.akita.jp\0credit\0" +"anthropology.museum\0ddnslive.com\0" +"habmer.no\0lexus\0" +"donostia.museum\0sibenik.museum\0biz.ua\0" +"biz.tr\0crafting.xyz\0" +"r\xc3\xb8yken.no\0" +"kagami.kochi.jp\0biz.tt\0" +"gemological.museum\0mycloud.by\0" +"kr\xc3\xb8""dsherad.no\0" +"lib.tx.us\0" +"!city.kobe.jp\0" +"jab.br\0" +"seika.kyoto.jp\0nichinan.tottori.jp\0" +"info.gu\0" +"homelinux.org\0" +"aq.it\0ba.it\0daiwa.hiroshima.jp\0nieruchomosci.pl\0" +"franziskaner.museum\0*.frusky.de\0" +"armenia.su\0" +"kvalsund.no\0" +"biz.vn\0cc.hn\0" +"info.ht\0oirase.aomori.jp\0soja.okayama.jp\0kita.osaka.jp\0" +"info.hu\0" +"livorno.it\0mup.gov.pl\0" +"lincoln.museum\0" +"lincoln\0" +"ddnss.org\0" +"olbia-tempio.it\0" +"hu.com\0" +"tokyo\0" +"info.et\0katsuura.chiba.jp\0" +"daplie.me\0hs.zone\0" +"fi.cr\0" +"k12.ky.us\0" +"bs.it\0takayama.gifu.jp\0de.gt\0" +"info.fj\0" +"miyakonojo.miyazaki.jp\0" +"is-a-liberal.com\0" +"bando.ibaraki.jp\0" +"cc.la.us\0" +"hamada.shimane.jp\0" +"cl.it\0" +"\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" +"moroyama.saitama.jp\0inagi.tokyo.jp\0" +"bible\0" +"gov.ac\0k12.ec\0lib.vt.us\0" +"obihiro.hokkaido.jp\0rzeszow.pl\0" +"gov.ae\0vantaa.museum\0s3-website.ca-central-1.amazonaws.com\0rhcloud.com\0" +"gov.af\0santamaria.br\0" +"ah.no\0" +"of.london\0" +"villas\0" +"gov.al\0info.cx\0" +"own.pm\0" +"gov.ba\0" +"gov.ar\0gov.bb\0volkswagen\0" +"gov.as\0""0.bg\0is-a-candidate.org\0" +"fastvps.host\0serveblog.net\0*.svc.firenet.ch\0" +"gov.au\0biz.zm\0" +"gov.bf\0" +"info.ec\0" +"gov.bh\0masaki.ehime.jp\0erimo.hokkaido.jp\0furubira.hokkaido.jp\0" +"gov.az\0ulsan.kr\0" +"minami.tokushima.jp\0" +"gov.bm\0is-not-certified.com\0" +"gov.bn\0" +"windows\0" +"gorizia.it\0date.hokkaido.jp\0fastlylb.net\0" +"gov.br\0" +"9.bg\0gov.bs\0" +"gov.bt\0gov.cd\0itako.ibaraki.jp\0glogow.pl\0" +"shouji\0" +"info.bb\0" +"obanazawa.yamagata.jp\0info.at\0" +"info.au\0gov.by\0cc.na\0directory\0ddnss.de\0" +"gov.bz\0" +"stat.no\0sauherad.no\0k12.ne.us\0" +"gov.cl\0kuroiso.tochigi.jp\0" +"gov.cm\0" +"info.az\0gov.cn\0" +"gov.co\0" +"ujitawara.kyoto.jp\0pila.pl\0wien.funkfeuer.at\0" +"vodka\0from-ga.com\0tuva.su\0" +"info.bo\0netbank\0" +"tottori.jp\0yamaga.kumamoto.jp\0" +"gov.cu\0name\0" +"cc.ne.us\0" +"gov.cx\0fund\0supersale.jp\0" +"gov.cy\0" +"pol.dz\0" +"k12.oh.us\0\xd0\xb1\xd0\xb5\xd0\xbb\0\xe5\x95\x86\xe6\xa0\x87\0jp.eu.org\0de.ls\0" +"chino.nagano.jp\0de.md\0" +"gov.dm\0" +"gov.do\0loten.no\0" +"info.co\0gov.ec\0" +"gov.ee\0" +"gov.eg\0secaas.hk\0" +"gent\0" +"bloxcms.com\0" +"cim.br\0gov.dz\0" +"k12.il\0fi.it\0kawaminami.miyazaki.jp\0irish\0" +"gov.et\0yamada.fukuoka.jp\0" +"holtalen.no\0wang\0" +"gov.fj\0" +"leirfjord.no\0k12.or.us\0" +"fr.it\0ichinoseki.iwate.jp\0" +"bushey.museum\0" +"wegrow.pl\0" +"casino.hu\0burghof.museum\0space\0eu.meteorapp.com\0" +"spjelkavik.no\0" "gov.gd\0" "gov.ge\0" -"gov.gh\0" +"gov.gh\0saitama.jp\0" "gov.gi\0" -"izena.okinawa.jp\0kirovograd.ua\0audi\0vologda.su\0" -"monster\0" -"mediocampidano.it\0shiogama.miyagi.jp\0endofinternet.net\0" -"gov.gn\0powiat.pl\0rec.ro\0" -"rel.ht\0s\xc3\xb8r-varanger.no\0" -"degree\0" -"gov.gr\0pimienta.org\0blog.kg\0" -"qld.edu.au\0" -"elasticbeanstalk.com\0" -"gov.gu\0ujiie.tochigi.jp\0exeter.museum\0" -"firm.co\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0" -"gov.gy\0\xe5\xb2\xa9\xe6\x89\x8b.jp\0newmexico.museum\0" -"kunisaki.oita.jp\0" -"gov.hk\0star\0" -"yusuhara.kochi.jp\0lib.la.us\0" -"shinkamigoto.nagasaki.jp\0sandoy.no\0minisite.ms\0" -"dating\0" -"hirata.fukushima.jp\0chattanooga.museum\0ltd.ua\0small-web.org\0" -"beer\0" -"media.museum\0firm.dk\0" -"gov.ie\0" -"palace.museum\0plumbing\0" -"taka.hyogo.jp\0" -"kami.kochi.jp\0chrome\0" -"gov.il\0ltd.uk\0" +"k12.pa.us\0" +"adachi.tokyo.jp\0" +"gov.gn\0" +"forte.id\0" +"plantation.museum\0" +"gov.gr\0" +"f.bg\0\xe6\x95\x99\xe8\x82\xb2.hk\0gs.sf.no\0" +"pol.ht\0" +"gov.gu\0" +"cust.dev.thingdust.io\0" +"gov.gy\0" +"gov.hk\0" +"carrara-massa.it\0" +"nanyo.yamagata.jp\0" +"woodside\0" +"o.bg\0romsa.no\0blogdns.org\0myftp.org\0" +"sardinia.it\0" +"pri.ee\0gov.ie\0" +"upaas.kazteleport.kz\0" +"cc.pr.us\0" +"shinshiro.aichi.jp\0" +"gov.il\0" "gov.in\0" -"yakage.okayama.jp\0" -"toyo.kochi.jp\0vadso.no\0" -"gov.iq\0kvitsoy.no\0" +"trentinsudtirol.it\0" +"gov.iq\0trade\0" "gov.ir\0" -"gov.is\0" -"gov.it\0" -"priv.hu\0" -"hiraizumi.iwate.jp\0" -"fi.cr\0mi.it\0aurland.no\0passagens\0istmein.de\0" -"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0" -"nonoichi.ishikawa.jp\0" -"ac.gov.br\0kagawa.jp\0" -"lanxess\0\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" -"gov.jo\0\xe7\xa7\xbb\xe5\x8a\xa8\0" -"trentinsued-tirol.it\0" -"geisei.kochi.jp\0lighting\0" -"rec.ve\0" -"ato.br\0gov.kg\0" -"guardian\0" +"x.bg\0gov.is\0" +"gov.it\0abira.hokkaido.jp\0jaworzno.pl\0" +"prof.pr\0" +"naustdal.no\0" +"kunohe.iwate.jp\0yugawara.kanagawa.jp\0" +"cc.ua\0" +"pueblo.bo\0froya.no\0az.us\0" +"gov.jo\0egersund.no\0adimo.co.uk\0" +"witd.gov.pl\0" +"plo.ps\0\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0" +"yamatokoriyama.nara.jp\0" +"gov.kg\0\xc3\xa5mli.no\0" +"como.it\0" "gov.ki\0" -"security\0stockholm\0" -"\xe6\x89\x8b\xe6\x9c\xba\0" -"diet\0unusualperson.com\0" -"gov.km\0surnadal.no\0" -"gov.kn\0bnpparibas\0" -"gov.kp\0bloger.id\0" -"gov.la\0sebastopol.ua\0shouji\0*.tst.site\0" -"gov.lb\0group\0" -"gov.lc\0g\xc3\xa1ls\xc3\xa1.no\0zone\0" -"gratis\0" -"tsushima.nagasaki.jp\0gov.kw\0" -"maringa.br\0" -"gov.ky\0" +"izumozaki.niigata.jp\0fuchu.tokyo.jp\0" +"gov.km\0" +"gov.kn\0" +"airline.aero\0" +"kasamatsu.gifu.jp\0gov.kp\0" +"gov.la\0g\xc3\xbcnstigbestellen.de\0" +"gov.lb\0" +"gov.lc\0" +"yokoshibahikari.chiba.jp\0" +"platter-app.com\0" +"\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0no-ip.biz\0" +"gov.kw\0github.io\0" +"\xe6\xbe\xb3\xe9\x96\x80\0" "gov.kz\0" -"slg.br\0gov.lk\0l\xc3\xb8ten.no\0" -"newspaper.museum\0contact\0" -"k12.va.us\0" -"grosseto.it\0trogstad.no\0piw.gov.pl\0" -"noheji.aomori.jp\0rocher\0" -"gov.ma\0stordal.no\0trust\0" -"nb.ca\0gov.lr\0duckdns.org\0" -"nagaoka.niigata.jp\0gov.ls\0" -"gov.lt\0is-a-landscaper.com\0tuva.su\0" +"gov.lk\0" +"boston.museum\0labor.museum\0" +"ngrok.io\0io.kg\0" +"gov.ma\0" +"gov.lr\0" +"gov.ls\0" +"kumano.mie.jp\0gov.lt\0vxl.sh\0" "gov.me\0" "gov.lv\0" -"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0gov.mg\0" -"gov.ly\0" -"echizen.fukui.jp\0gov.mk\0" -"fukuchiyama.kyoto.jp\0gov.ml\0" -"gov.mn\0norton\0dynalias.org\0" -"gov.mo\0" -"history.museum\0deno.dev\0" -"gov.mr\0cincinnati.museum\0" -"tr.it\0gov.ms\0" -"kiyama.saga.jp\0mypsx.net\0" +"recreation.aero\0gov.mg\0leikanger.no\0" +"koriyama.fukushima.jp\0\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0" +"gov.ly\0dn.ua\0s3-ap-southeast-1.amazonaws.com\0" +"gov.mk\0\xc3\xa5lesund.no\0de.us\0" +"gov.ml\0" +"gov.mn\0" +"gov.mo\0lunner.no\0" +"hiraya.nagano.jp\0" +"pvh.br\0gov.mr\0" +"gov.ms\0orkanger.no\0" "gov.mu\0" -"gov.mv\0schulserver.de\0" -"gov.mw\0gov.ng\0" -"tsuchiura.ibaraki.jp\0" -"gov.my\0" -"gov.mz\0ollo\0" -"r\xc3\xb8yrvik.no\0" -"africa\0" -"n\xc3\xb8tter\xc3\xb8y.no\0" +"gov.mv\0olayan\0" +"pb.ao\0gov.mw\0gov.ng\0hm.no\0" +"gov.my\0navy\0" +"gov.mz\0" +"or.at\0" +"aosta.it\0minamiyamashiro.kyoto.jp\0" +"or.bi\0philadelphiaarea.museum\0js.wpenginepowered.com\0" "gov.nr\0" -"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" -"kikonai.hokkaido.jp\0mifune.kumamoto.jp\0johana.toyama.jp\0" -"hs.zone\0" -"academy.museum\0priv.at\0" -"rel.pl\0pgfog.com\0applinzi.com\0" -"tokorozawa.saitama.jp\0" -"banamex\0" -"gov.om\0channelsdvr.net\0" -"tateyama.chiba.jp\0r\xc3\xb8st.no\0babia-gora.pl\0" -"whaling.museum\0" -"\xce\xb5\xce\xbb\0ownprovider.com\0" -"observer\0diadem.cloud\0" -"kragero.no\0gov.ph\0" -"a.bg\0fhsk.se\0" -"fi.it\0monza.it\0ginoza.okinawa.jp\0gov.pk\0\xce\xb5\xcf\x85\0" -"gov.pl\0" -"gdansk.pl\0" -"gov.pn\0meteorapp.com\0" -"minowa.nagano.jp\0" -"tabayama.yamanashi.jp\0" -"gov.qa\0" -"samukawa.kanagawa.jp\0gov.pr\0" -"gov.ps\0nodum.co\0" -"pz.it\0gov.pt\0" -"mitake.gifu.jp\0" -"infiniti\0lincoln\0" -"heroy.more-og-romsdal.no\0gov.py\0" -"dontexist.org\0" -"airforce\0jele.site\0" -"bifuka.hokkaido.jp\0" -"somna.no\0" -"carrara-massa.it\0" -"orsta.no\0" -"shiroishi.saga.jp\0" -"school\0" -"buyshouses.net\0" -"joetsu.niigata.jp\0" -"kembuchi.hokkaido.jp\0" -"seg.br\0" -"tr.no\0firm.ve\0" -"*.backyards.banzaicloud.io\0" -"gen.in\0tateshina.nagano.jp\0gov.sa\0" -"gov.sb\0" -"gov.rs\0gov.sc\0ens.tn\0nodum.io\0" -"toga.toyama.jp\0naval.museum\0gov.sd\0author\0" -"mutsu.aomori.jp\0gov.ru\0" -"himeji.hyogo.jp\0gov.rw\0gov.sg\0" -"kitakami.iwate.jp\0gov.sh\0" -"certification.aero\0" -"koga.fukuoka.jp\0" -"dnsdojo.org\0" -"ca.it\0gov.sl\0" -"gov.so\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0eu.org\0" -"qpon\0" -"moka.tochigi.jp\0salon\0pokrovsk.su\0" -"gov.ss\0" -"gov.sx\0" -"treviso.it\0gov.sy\0" -"soeda.fukuoka.jp\0takasu.hokkaido.jp\0gov.tj\0" -"balsan-sudtirol.it\0" -"gov.tl\0" -"mi.th\0gov.tm\0" -"gov.tn\0" -"arao.kumamoto.jp\0gov.to\0" -"askoy.no\0framer.app\0" -"langev\xc3\xa5g.no\0gov.ua\0" -"gov.tr\0" -"gov.tt\0" -"friulive-giulia.it\0ulsan.kr\0gov.tw\0" -"gov.uk\0" -"rsc.cdn77.org\0" -"kotohira.kagawa.jp\0hirakata.osaka.jp\0cyou\0" -"suedtirol.it\0myoko.niigata.jp\0k12.ky.us\0" -"podzone.org\0" -"minamitane.kagoshima.jp\0gov.vc\0" -"iz.hr\0cc.fl.us\0" -"gov.ve\0" -"googlecode.com\0" -"mi.us\0" -"tarui.gifu.jp\0k12.vt.us\0" -"kitagawa.miyazaki.jp\0notteroy.no\0" -"gov.vn\0au.eu.org\0be.eu.org\0" -"minakami.gunma.jp\0" -"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0" -"kinokawa.wakayama.jp\0kudamatsu.yamaguchi.jp\0usa.museum\0" -"best\0" -"suisse.museum\0s3.dualstack.eu-west-1.amazonaws.com\0" -"firm.ro\0" -"ca.na\0" -"nishio.aichi.jp\0gen.ng\0" -"eidfjord.no\0malopolska.pl\0" -"pruszkow.pl\0in.net\0" -"mizusawa.iwate.jp\0" -"community.museum\0" -"auto\0" -"arteducation.museum\0mircloud.host\0" -"koge.tottori.jp\0oster\xc3\xb8y.no\0gov.ws\0" -"hazu.aichi.jp\0" -"team\0" -"\xd1\x81\xd0\xbe\xd1\x87\xd0\xb8.\xd1\x80\xd1\x83\xd1\x81\0" -"ogasawara.tokyo.jp\0" -"anquan\0channel\0hughes\0" -"gen.nz\0" -"futtsu.chiba.jp\0" -"mr.no\0dish\0" -"nikaho.akita.jp\0" -"uk.kg\0" -"swiftcover\0" -"profesional.bo\0" -"gov.ye\0" -"shinyoshitomi.fukuoka.jp\0" -"nakasatsunai.hokkaido.jp\0" -"nosegawa.nara.jp\0caravan\0" -"s3.dualstack.ap-southeast-1.amazonaws.com\0" -"wellbeingzone.co.uk\0" -"shimodate.ibaraki.jp\0mo-i-rana.no\0cc.ne.us\0" -"brasil.museum\0\xc3\xb8stre-toten.no\0" -"gov.za\0tech\0" -"kamifurano.hokkaido.jp\0" -"takatsuki.shiga.jp\0filatelia.museum\0" -"j.bg\0" -"fr.it\0" -"stalowa-wola.pl\0mckinsey\0" -"haga.tochigi.jp\0hyundai\0bplaced.com\0" -"now-dns.org\0" -"barcelona.museum\0ap-south-1.elasticbeanstalk.com\0" -"js.cn\0hokkaido.jp\0" -"gov.zm\0" -"bg.eu.org\0pa.leg.br\0" -"firm.nf\0vapor.cloud\0" -"rc.it\0firm.ng\0" -"firebaseapp.com\0" -"padova.it\0" -"gov.zw\0s3-us-west-1.amazonaws.com\0myfritz.net\0" -"kibichuo.okayama.jp\0" -"from-nj.com\0api.stdlib.com\0" -"seto.aichi.jp\0" -"union.aero\0townnews-staging.com\0" -"yaese.okinawa.jp\0" -"s3.dualstack.sa-east-1.amazonaws.com\0" -"takaharu.miyazaki.jp\0" -"neyagawa.osaka.jp\0" -"matsumoto.kagoshima.jp\0" -"yakumo.shimane.jp\0" -"is-a-blogger.com\0" -"al.gov.br\0" -"vaga.no\0acct.pro\0pb.leg.br\0" -"lpages.co\0" -"yanagawa.fukuoka.jp\0" -"fvg.it\0" -"sejny.pl\0raid\0" -"2.bg\0" -"bz.it\0alipay\0no-ip.co.uk\0" -"lillehammer.no\0" -"virtualserver.io\0" -"yamagata.jp\0" -"mini\0" -"londrina.br\0" -"lodi.it\0health-carereform.com\0" -"sogndal.no\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0" -"gen.tr\0traeumtgerade.de\0" -"khplay.nl\0" -"kikuchi.kumamoto.jp\0mint\0" -"nagasu.kumamoto.jp\0" -"equipment.aero\0*.elb.amazonaws.com.cn\0" -"barsyonline.co.uk\0" -"tomari.hokkaido.jp\0" -"asakuchi.okayama.jp\0" -"asahi.nagano.jp\0locus\0" -"akita.jp\0" -"bosch\0insure\0" -"my-gateway.de\0" -"ca.us\0" -"inabe.mie.jp\0webthings.io\0" -"nt.au\0" -"brunel.museum\0neat-url.com\0" -"kvam.no\0" -"arvo.network\0" -"lubartow.pl\0" -"massacarrara.it\0from-wy.com\0" -"yorkshire.museum\0" -"lamer\0" -"glogow.pl\0vps.mcdir.ru\0" -"nt.ca\0" -"usdecorativearts.museum\0" -"hr.eu.org\0" -"narviika.no\0" -"miyakonojo.miyazaki.jp\0kitayama.wakayama.jp\0" -"children.museum\0" -"kimitsu.chiba.jp\0" -"a.se\0" -"js.org\0synology-ds.de\0" -"kamo.kyoto.jp\0" -"nahari.kochi.jp\0" -"takahashi.okayama.jp\0curv.dev\0" -"priv.pl\0" -"u2-local.xnbay.com\0" -"tranoy.no\0" -"tajimi.gifu.jp\0" -"trentino-sudtirol.it\0" -"urakawa.hokkaido.jp\0" -"readmyblog.org\0" -"k12.id.us\0dyn-ip24.de\0" -"\xd1\x8f.\xd1\x80\xd1\x83\xd1\x81\0" -"kunimi.fukushima.jp\0williamsburg.museum\0" -"raisa.no\0from-ma.com\0" -"barrell-of-knowledge.info\0scrysec.com\0" -"awaji.hyogo.jp\0" -"luxury\0" -"yugawa.fukushima.jp\0" -"sund.no\0" -"synology-diskstation.de\0" -"kamikawa.saitama.jp\0miasta.pl\0" -"barueri.br\0" -"stj\xc3\xb8rdal.no\0is-a-photographer.com\0" -"trentinsuedtirol.it\0priv.no\0" -"s.bg\0" -"gaular.no\0" -"taa.it\0hizen.saga.jp\0" -"oguni.yamagata.jp\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0" -"slattum.no\0" -"hyllestad.no\0" -"tsushima.aichi.jp\0" -"\xe4\xb8\x89\xe9\x87\x8d.jp\0" -"seidat.net\0" -"intelligence.museum\0" -"is-very-nice.org\0" -"awsglobalaccelerator.com\0" -"air-traffic-control.aero\0davvesiida.no\0" -"k12.fl.us\0hk.com\0" -"lib.mt.us\0lib.nd.us\0barsy.me\0" -"takatsuki.osaka.jp\0" -"priv.me\0" -"rotorcraft.aero\0" -"cahcesuolo.no\0playstation\0" -"healthcare\0" -"trentinoalto-adige.it\0kaminokawa.tochigi.jp\0" -"trentinsudtirol.it\0" -"niikappu.hokkaido.jp\0" -"usercontent.jp\0" -"cs.it\0is-a-libertarian.com\0" -"ragusa.it\0" -"x.mythic-beasts.com\0" -"kunitomi.miyazaki.jp\0juedisches.museum\0" -"caltanissetta.it\0koryo.nara.jp\0langevag.no\0" -"satx.museum\0etnedal.no\0" -"database.museum\0" -"muroran.hokkaido.jp\0" -"denmark.museum\0" -"presse.km\0" -"chocolate.museum\0" -"dyroy.no\0" -"uchinomi.kagawa.jp\0" -"surf\0" -"science-fiction.museum\0\xc3\xb8ksnes.no\0" -"kazimierz-dolny.pl\0" -"eastus2.azurestaticapps.net\0" -"dali.museum\0rl.no\0fairwinds\0" -"media.hu\0" -"trentino-s\xc3\xbc""dtirol.it\0" -"\xe6\x84\x9b\xe7\x9f\xa5.jp\0sykkylven.no\0" -"kwpsp.gov.pl\0" -"getmyip.com\0" -"santamaria.br\0" -"taishin.fukushima.jp\0bygland.no\0" -"latina.it\0modum.no\0" -"shinjuku.tokyo.jp\0" -"izumozaki.niigata.jp\0presse.ml\0" -"mitsue.nara.jp\0tendo.yamagata.jp\0r\xc3\xa5holt.no\0" -"properties\0" -"fetsund.no\0myasustor.com\0" -"pistoia.it\0verona.it\0githubusercontent.com\0jcloud.kz\0" -"\xe6\x85\x88\xe5\x96\x84\0pi.leg.br\0" -"dazaifu.fukuoka.jp\0environmentalconservation.museum\0" -"kounosu.saitama.jp\0*.on-k3s.io\0" -"khmelnytskyi.ua\0" -"exnet.su\0" -"fuoisku.no\0" -"tos.it\0" -"imakane.hokkaido.jp\0" -"adult\0endofinternet.org\0" -"visa\0" -"workinggroup.aero\0higashisumiyoshi.osaka.jp\0isa-hockeynut.com\0" -"gob.ar\0nagara.chiba.jp\0colonialwilliamsburg.museum\0" -"m\xc4\x81ori.nz\0" -"is-into-anime.com\0" -"nt.no\0webspace.rocks\0" -"oizumi.gunma.jp\0furniture\0hsbc\0icbc\0" -"teva\0" -"padua.it\0" -"ponpes.id\0" -"settsu.osaka.jp\0voagat.no\0test-iserv.de\0azimuth.network\0" -"gob.bo\0showtime\0" -"rygge.no\0\xd8\xa7\xd9\x84\xd8\xa8\xd8\xad\xd8\xb1\xd9\x8a\xd9\x86\0" -"iwakuni.yamaguchi.jp\0" -"wodzislaw.pl\0" -"ut.us\0" -"koto.tokyo.jp\0alvdal.no\0" -"gob.cl\0" -"hostyhosting.io\0" -"yokoze.saitama.jp\0sauda.no\0is-a-doctor.com\0" -"sado.niigata.jp\0" -"\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0" -"mazeplay.com\0" -"amami.kagoshima.jp\0vegas\0barsy.uk\0" -"oxford.museum\0u.channelsdvr.net\0" -"chirurgiens-dentistes.fr\0kasuga.fukuoka.jp\0" -"wpdevcloud.com\0" -"jelastic.tsukaeru.net\0mysecuritycamera.net\0" -"nakagawa.fukuoka.jp\0" -"gob.do\0seven\0" -"viva\0" -"authgear-staging.com\0" -"mus.br\0" -"gob.ec\0" -"valleedaoste.it\0" -"tomakomai.hokkaido.jp\0" -"oita.oita.jp\0dnsdojo.net\0" -"futsu.nagasaki.jp\0" -"is-a-techie.com\0" -"tas.au\0" -"kumenan.okayama.jp\0" -"vivo\0alp1.ae.flow.ch\0" -"l\xc3\xb8""dingen.no\0" -"storj.farm\0" -"gob.es\0maori.nz\0" -"nt.ro\0" -"pagespeedmobilizer.com\0" -"akabira.hokkaido.jp\0" -"lakas.hu\0" -"oarai.ibaraki.jp\0berlevag.no\0" -"cagliari.it\0" -"goodyear\0bplaced.net\0" -"hakusan.ishikawa.jp\0" -"pavia.it\0nichinan.tottori.jp\0selje.no\0media.pl\0" -"restaurant\0" -"apps.fbsbx.com\0" -"racing\0" -"sekigahara.gifu.jp\0" -"hamatonbetsu.hokkaido.jp\0" -"sn.cn\0" -"lucania.it\0" -"toyooka.hyogo.jp\0cyber.museum\0" -"\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0" -"tagajo.miyagi.jp\0" -"gob.gt\0togitsu.nagasaki.jp\0" -"cat.ax\0" -"square.museum\0" -"jls-sto3.elastx.net\0" -"koya.wakayama.jp\0" -"cadaques.museum\0od.ua\0global.ssl.fastly.net\0" -"joboji.iwate.jp\0" -"pe.leg.br\0" -"gob.hn\0" -"moonscale.net\0pagexl.com\0" -"coal.museum\0" -"mikasa.hokkaido.jp\0" -"dc.us\0" -"tsk.tr\0" -"sakawa.kochi.jp\0" -"yamaguchi.jp\0" -"ostre-toten.no\0weber\0" -"is-into-cartoons.com\0" -"bulsan-s\xc3\xbc""dtirol.it\0" -"ikaruga.nara.jp\0smart\0" -"tottori.tottori.jp\0" -"tychy.pl\0us-4.evennode.com\0" -"dyndns.org\0" -"\xeb\x8b\xb7\xeb\x84\xb7\0" -"skoczow.pl\0hasura-app.io\0" -"makurazaki.kagoshima.jp\0" -"filegear-de.me\0" -"salem.museum\0" -"le.it\0" -"arezzo.it\0\xe5\xb2\x90\xe9\x98\x9c.jp\0" -"ad.jp\0nanto.toyama.jp\0" -"il.eu.org\0" -"lillesand.no\0s.se\0ru.com\0bar1.net\0*.sensiosite.cloud\0" -"online.th\0" -"vv.it\0glitch.me\0" -"jdf.br\0jpmorgan\0" -"bir.ru\0" -"ybo.party\0" -"chuo.fukuoka.jp\0" -"jaguar\0" -"k12.in.us\0is-by.us\0" -"email\0" -"wiih.gov.pl\0blogspot.vn\0" -"cim.br\0" -"am.br\0chikuzen.fukuoka.jp\0" -"siracusa.it\0" -"tateyama.toyama.jp\0vega.no\0co.financial\0" -"yaita.tochigi.jp\0tj\xc3\xb8me.no\0hu.eu.org\0ie.eu.org\0" -"mulhouse.museum\0" -"homeftp.org\0" -"food\0" -"finland.museum\0selbu.no\0lenug.su\0" -"anan.nagano.jp\0" -"oamishirasato.chiba.jp\0" -"rivne.ua\0voorloper.cloud\0" -"inawashiro.fukushima.jp\0" -"is-a-personaltrainer.com\0" -"ln.cn\0alsace\0us-3.evennode.com\0" -"pvh.br\0kumano.mie.jp\0*.r.appspot.com\0" -"matsukawa.nagano.jp\0" -"\xe6\x94\xbf\xe5\xba\x9c\0authgearapps.com\0" -"001www.com\0" -"dnsalias.com\0" -"gob.mx\0" -"gob.ni\0" -"realm.cz\0" -"myvnc.com\0" -"mihama.chiba.jp\0" -"lib.de.us\0" -"ribeirao.br\0yamazoe.nara.jp\0" -"utsunomiya.tochigi.jp\0" -"co.education\0" -"takayama.gunma.jp\0" -"is-very-good.org\0" -"toyotsu.fukuoka.jp\0blogspot.re\0" -"iglesias-carbonia.it\0hichiso.gifu.jp\0" -"gorizia.it\0gob.pa\0" -"hamar.no\0ford\0" -"is-an-anarchist.com\0\xd0\xbc\xd0\xb8\xd1\x80.\xd1\x80\xd1\x83\xd1\x81\0gda.pl\0" -"hashimoto.wakayama.jp\0" -"gob.pe\0" -"\xe6\x95\x99\xe8\x82\xb2.hk\0" -"birkenes.no\0blogspot.ro\0" -"ishikari.hokkaido.jp\0mel\xc3\xb8y.no\0" -"gob.pk\0cc.wi.us\0gehirn.ne.jp\0" -"cafjs.com\0blogspot.rs\0" -"blogspot.ru\0blogspot.se\0" -"shiriuchi.hokkaido.jp\0blogspot.sg\0" -"wif.gov.pl\0" -"blogspot.si\0" -"barsy.bg\0" -"blogspot.sk\0" -"blogspot.sn\0on-web.fr\0" -"abkhazia.su\0" -"kharkiv.ua\0barsy.ca\0blogspot.td\0" -"forl\xc3\xac""cesena.it\0fujikawa.yamanashi.jp\0us-2.evennode.com\0" -"stat.no\0" -"deatnu.no\0" -"hm.no\0j\xc3\xb8lster.no\0mus.mi.us\0" -"isla.pr\0" -"ogawa.nagano.jp\0" -"mandal.no\0" -"pors\xc3\xa1\xc5\x8bgu.no\0pr.leg.br\0" -"city.hu\0" -"k12.ne.us\0" -"blogspot.tw\0blogspot.ug\0" -"barsy.de\0" -"aguni.okinawa.jp\0" -"latino\0" -"aizumisato.fukushima.jp\0" -"habikino.osaka.jp\0" -"blogspot.mr\0" -"isen.kagoshima.jp\0" -"bozen-suedtirol.it\0blogspot.mx\0" -"yoshida.shizuoka.jp\0saarland\0blogspot.my\0" -"ravendb.me\0" -"botanical.museum\0blogspot.nl\0" -"gob.sv\0" -"blogspot.no\0" -"barsy.eu\0" -"aukra.no\0" -"gifu.jp\0prime\0" -"brussels.museum\0decorativearts.museum\0schaeffler\0" -"network\0" -"yomitan.okinawa.jp\0niepce.museum\0penza.su\0" -"kunitachi.tokyo.jp\0" -"and.mom\0" -"koshu.yamanashi.jp\0richardli\0blogspot.pe\0" -"us-1.evennode.com\0" -"presse.ci\0" -"valdaosta.it\0" -"lib.sc.us\0" -"gob.ve\0" -"shiraoi.hokkaido.jp\0" -"blogspot.qa\0" -"ivgu.no\0" -"kopervik.no\0dedyn.io\0" -"gr.eu.org\0blogspot.pt\0" -"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0" -"orskog.no\0" -"circus.museum\0" -"filegear-gb.me\0" -"h\xc3\xb8nefoss.no\0" -"dagestan.ru\0" -"okinoshima.shimane.jp\0winb.gov.pl\0" -"med.pro\0blogspot.is\0" -"blogspot.it\0" -"does-it.net\0ryd.wafaicloud.com\0" -"scienceandhistory.museum\0" -"nishi.osaka.jp\0" -"yatsuka.shimane.jp\0" -"fukui.jp\0kunstsammlung.museum\0homedns.org\0" -"v\xc3\xa5ler.hedmark.no\0" -"dagestan.su\0" -"jessheim.no\0andasuolo.no\0" -"blogspot.jp\0" -"abira.hokkaido.jp\0barsy.in\0" -"east-kazakhstan.su\0barsy.io\0ciscofreak.com\0" -"vall\xc3\xa9""e-d-aoste.it\0appspot.com\0" -"furano.hokkaido.jp\0" -"namsskogan.no\0" -"takasaki.gunma.jp\0" -"shop.ht\0traniandriabarletta.it\0meiwa.gunma.jp\0kushima.miyazaki.jp\0karpacz.pl\0" -"shop.hu\0" -"aki.kochi.jp\0" -"asahi.chiba.jp\0review\0blogspot.kr\0" -"kumatori.osaka.jp\0" -"computer.museum\0" -"cc.ma.us\0" -"takagi.nagano.jp\0" -"kvits\xc3\xb8y.no\0" -"arts.museum\0" -"blogspot.li\0" -"nikko.tochigi.jp\0\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0" -"usantiques.museum\0" -"en.it\0historisches.museum\0gok.pk\0" -"communications.museum\0int.eu.org\0" -"saves-the-whales.com\0" -"abc.br\0" -"compare\0blogspot.lt\0blogspot.md\0" -"psi.br\0beats\0blogspot.lu\0unicloud.pl\0" -"empresa.bo\0dyndns-mail.com\0us.platform.sh\0" -"po.it\0" -"in-dsl.org\0" -"imageandsound.museum\0us.eu.org\0blogspot.mk\0" -"rennebu.no\0" -"broadway\0j.scaleforce.net\0" -"is-very-bad.org\0" -"aya.miyazaki.jp\0" -"britishcolumbia.museum\0" -"co.place\0" -"faith\0" -"mol.it\0blogspot.fi\0" -"hidora.com\0" -"lib.ks.us\0" -"judygarland.museum\0" -"dyn.ddnss.de\0onthewifi.com\0" -"k12.oh.us\0design\0blogspot.fr\0" -"asahi.yamagata.jp\0dontexist.com\0" -"cng.br\0agrinet.tn\0" -"ecologia.bo\0" -"direct\0" -"lon-1.paas.massivegrid.net\0" -"av.it\0open\0" -"koganei.tokyo.jp\0" -"blogspot.gr\0" -"try-snowplow.com\0" -"bunkyo.tokyo.jp\0stathelle.no\0" -"riik.ee\0" -"pharmacy.museum\0" -"med.br\0is-a-republican.com\0" -"blogspot.hk\0" -"qh.cn\0t\xc3\xb8nsberg.no\0" -"namikata.ehime.jp\0*.hosting.myjino.ru\0""4lima.de\0" -"reggio-emilia.it\0yugawara.kanagawa.jp\0mallorca.museum\0" -"yuu.yamaguchi.jp\0" -"blogspot.hr\0" -"kawatana.nagasaki.jp\0volyn.ua\0" -"solund.no\0blogspot.hu\0blogspot.ie\0" -"webredirect.org\0" -"grondar.za\0" -"*.compute.amazonaws.com\0" -"dsmynas.com\0" -"ichihara.chiba.jp\0from-mo.com\0" -"blogspot.in\0" -"blogspot.ba\0" -"kv\xc3\xa6""fjord.no\0" -"tomigusuku.okinawa.jp\0blogspot.be\0" -"loppa.no\0blogspot.bg\0" -"lanbib.se\0company\0" -"nobeoka.miyazaki.jp\0" -"blogspot.bj\0" -"med.ec\0living\0" -"med.ee\0" -"4lima.at\0" -"civilwar.museum\0cc.pr.us\0" -"panasonic\0blogspot.ca\0" -"mp.br\0nakijin.okinawa.jp\0mircloud.us\0" -"yamatsuri.fukushima.jp\0" -"blogspot.cf\0" -"bolt.hu\0kagamiishi.fukushima.jp\0is-a-hunter.com\0mysecuritycamera.org\0" -"knowsitall.info\0blogspot.ch\0" -"laz.it\0nakagawa.nagano.jp\0" -"b-data.io\0" -"manchester.museum\0" -"fujikawaguchiko.yamanashi.jp\0blogspot.cl\0" -"aknoluokta.no\0" -"trading.aero\0" -"s3-ap-southeast-1.amazonaws.com\0" -"tp.it\0alibaba\0irish\0""4lima.ch\0" -"s3-website-ap-northeast-1.amazonaws.com\0" -"tashkent.su\0" -"blogspot.de\0" -"ushuaia.museum\0blogspot.cv\0" -"vall\xc3\xa9""edaoste.it\0asaminami.hiroshima.jp\0" -"if.ua\0blogspot.cz\0" -"urawa.saitama.jp\0blogspot.dk\0" -"io.kg\0storage.yandexcloud.net\0" -"tobishima.aichi.jp\0jls-sto1.elastx.net\0" -"corvette.museum\0" -"jeonbuk.kr\0is-a-hard-worker.com\0" -"gyeongnam.kr\0hoyanger.no\0" -"mytis.ru\0" -"games.hu\0" -"finn\xc3\xb8y.no\0" -"utwente.io\0" -"*.alces.network\0wbq.me\0" -"is-a-democrat.com\0" -"alwaysdata.net\0" -"melbourne\0" -"schmidt\0" -"publishproxy.com\0" -"\xe5\xae\xae\xe5\x9f\x8e.jp\0" -"hirado.nagasaki.jp\0" -"astronomy.museum\0" -"iwata.shizuoka.jp\0" -"fg.it\0" -"med.ht\0bike\0" -"trentin-sued-tirol.it\0" -"tagami.niigata.jp\0" -"ichinomiya.chiba.jp\0" -"ieee\0id.repl.co\0" -"austevoll.no\0" -"res.in\0mircloud.ru\0" -"izunokuni.shizuoka.jp\0" -"catering.aero\0austrheim.no\0" -"toolforge.org\0" -"servebeer.com\0" -"aoki.nagano.jp\0tjmaxx\0" -"lib.wy.us\0" -"blogspot.ae\0" -"sortland.no\0*.triton.zone\0" -"ito.shizuoka.jp\0" -"pittsburgh.museum\0leikanger.no\0" -"bo.it\0" -"blogspot.al\0" -"merckmsd\0tunes\0blogspot.am\0" -"newport.museum\0bing\0" -"minamidaito.okinawa.jp\0" -"kinghost.net\0" -"rovigo.it\0\xe7\xa7\x8b\xe7\x94\xb0.jp\0" -"mielno.pl\0" -"navuotna.no\0" -"maintenance.aero\0vennesla.no\0" -"missile.museum\0" -"living.museum\0kinder\0" -"av.tr\0" -"zaporizhzhe.ua\0" -"manno.kagawa.jp\0odda.no\0" -"med.ly\0" -"soni.nara.jp\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0" -"mizumaki.fukuoka.jp\0vestre-toten.no\0" -"*.nagoya.jp\0contemporaryart.museum\0soccer\0software\0theater\0" -"ofunato.iwate.jp\0hidaka.kochi.jp\0homeftp.net\0" -"\xd2\x9b\xd0\xb0\xd0\xb7\0" -"sth.ac.at\0" -"folldal.no\0paas.beebyte.io\0" -"mup.gov.pl\0" -"hof.no\0" -"moriguchi.osaka.jp\0" -"b\xc3\xa5tsfjord.no\0" -"tsuru.yamanashi.jp\0" -"gose.nara.jp\0lajolla.museum\0lesja.no\0" -"minamiashigara.kanagawa.jp\0" -"v\xc3\xa6r\xc3\xb8y.no\0" -"yamada.iwate.jp\0" -"ota.gunma.jp\0" -"kawahara.tottori.jp\0med.om\0" -"tokai.aichi.jp\0mozilla-iot.org\0" -"tatsuno.nagano.jp\0med.pa\0" -"game\0" -"read\0s3-website.eu-west-3.amazonaws.com\0" -"historisch.museum\0" -"chichibu.saitama.jp\0" -"statebank\0us-west-2.elasticbeanstalk.com\0" -"xz.cn\0dynamisches-dns.de\0" -"skjak.no\0med.pl\0" -"\xe7\xbd\x91\xe7\xbb\x9c.cn\0" -"mangyshlak.su\0" -"vacations\0" -"lombardia.it\0""16-b.it\0" -"dep.no\0" -"atm.pl\0" -"shop.th\0" -"mie.jp\0is-not-certified.com\0" -"wzmiuw.gov.pl\0" -"yamato.kanagawa.jp\0lyngen.no\0" -"ono.hyogo.jp\0cc.ms.us\0cc.nc.us\0s3.dualstack.eu-west-2.amazonaws.com\0" -"macapa.br\0" -"v\xc3\xa5ler.\xc3\xb8stfold.no\0tiaa\0" -"online.museum\0" -"tecnologia.bo\0" -"no-ip.info\0" -"h.bg\0louvre.museum\0aver\xc3\xb8y.no\0namsos.no\0" -"parti.se\0" -"med.sa\0" -"monmouth.museum\0" -"med.sd\0" -"idrett.no\0" -"ra.it\0kindle\0" -"abarth\0" -"date.hokkaido.jp\0" -"*.frusky.de\0" -"aaa\0" -"page\0" -"parachuting.aero\0" -"bronnoy.no\0worse-than.tv\0shop.ro\0" -"valle-daosta.it\0" -"shisui.chiba.jp\0durham.museum\0*.telebit.xyz\0" -"9guacu.br\0" -"saskatchewan.museum\0online\0" -"info.gu\0" -"lib.ma.us\0abb\0" -"nombre.bo\0abc\0" -"leclerc\0is-a-nascarfan.com\0" -"helsinki.museum\0k12.or.us\0protection\0" -"tawaramoto.nara.jp\0" -"my.id\0freemasonry.museum\0" -"\xe7\xbd\x91\xe7\xbb\x9c.hk\0kitaakita.akita.jp\0os.hordaland.no\0blogspot.com\0" -"info.ht\0\xe6\x9d\xb1\xe4\xba\xac.jp\0" -"info.hu\0ishikawa.okinawa.jp\0kamitonda.wakayama.jp\0beta.bounty-full.com\0" -"0.bg\0trolley.museum\0shop.pl\0" -"ch.it\0rokunohe.aomori.jp\0eu.meteorapp.com\0" -"qld.au\0zgorzelec.pl\0" -"steigen.no\0" -"tarumizu.kagoshima.jp\0cloudns.asia\0" -"chonan.chiba.jp\0aco\0" -"info.et\0s3-website.eu-central-1.amazonaws.com\0" -"gs.nl.no\0" -"is-gone.com\0" -"seljord.no\0" -"info.fj\0urbinopesaro.it\0hirokawa.fukuoka.jp\0" -"edugit.org\0" -"alt.za\0" -"shizukuishi.iwate.jp\0" -"rost.no\0" -"kanoya.kagoshima.jp\0\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0" -"chikugo.fukuoka.jp\0hongo.hiroshima.jp\0" -"foggia.it\0" -"guide\0" -"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" -"ads\0" -"film.hu\0" -"evenassi.no\0" -"aeg\0free\0" -"toshima.tokyo.jp\0kurobe.toyama.jp\0" -"tajiri.osaka.jp\0" -"fosnes.no\0" -"yosemite.museum\0" -"tynset.no\0" -"naka.ibaraki.jp\0nakano.nagano.jp\0freebox-os.fr\0" -"k12.wa.us\0" -"daigo.ibaraki.jp\0" -"nishiarita.saga.jp\0bardu.no\0info.cx\0" -"bibai.hokkaido.jp\0sannan.hyogo.jp\0sochi.su\0" -"rexroth\0" -"muni.il\0furukawa.miyagi.jp\0reit\0vladikavkaz.ru\0" -"cq.cn\0lutsk.ua\0" -"takamori.nagano.jp\0" -"afl\0" -"nara.jp\0" -"vads\xc3\xb8.no\0" -"info.ec\0northwesternmutual\0g\xc3\xbcnstigbestellen.de\0" -"storfjord.no\0" -"mitsuke.niigata.jp\0supplies\0ms.leg.br\0" -"inagi.tokyo.jp\0fly.dev\0" -"shibetsu.hokkaido.jp\0" -"vb.it\0szczytno.pl\0" -"hidaka.wakayama.jp\0of.fashion\0" -"vladikavkaz.su\0" -"iki.fi\0" -"info.bb\0" -"olayangroup\0" -"rieti.it\0gs.jan-mayen.no\0info.at\0" -"info.au\0czest.pl\0" -"atlanta.museum\0environment.museum\0oya.to\0wblog.id\0" -"haibara.shizuoka.jp\0" -"info.az\0oto.fukuoka.jp\0" -"hirono.iwate.jp\0" -"info.bo\0" -"nishinoshima.shimane.jp\0service.one\0sites.static.land\0" -"adult.ht\0pointto.us\0" -"on-the-web.tv\0" -"kodaira.tokyo.jp\0" -"fr.eu.org\0mt.leg.br\0" -"chippubetsu.hokkaido.jp\0in-dsl.net\0" -"tsukigata.hokkaido.jp\0hospital\0" -"hobol.no\0" -"aig\0" -"yamanashi.yamanashi.jp\0" -"info.co\0dealer\0ukco.me\0" -"tamano.okayama.jp\0przeworsk.pl\0is-a-painter.com\0" -"iveland.no\0bedzin.pl\0" -"q.bg\0" -"supply\0" -"from-ks.com\0" -"koto.shiga.jp\0" -"niyodogawa.kochi.jp\0soundandvision.museum\0" -"santoandre.br\0\xe4\xbd\x90\xe8\xb3\x80.jp\0" -"kasama.ibaraki.jp\0christiansburg.museum\0" -"minoh.osaka.jp\0" -"gbiz\0gives\0" -"imari.saga.jp\0jaworzno.pl\0" -"futbol\0browsersafetymark.io\0" -"uryu.hokkaido.jp\0" -"arte.bo\0" -"minamiizu.shizuoka.jp\0" -"de.com\0" -"elk.pl\0" -"aircraft.aero\0rent\0" -"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0" -"*.ocs.customer-oci.com\0" -"osoyro.no\0" -"kitaaiki.nagano.jp\0*.otap.co\0" -"\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0" -"per.la\0" -"k12.pa.us\0" -"openair.museum\0hb.cldmail.ru\0" -"bronnoysund.no\0" -"odate.akita.jp\0yuki.ibaraki.jp\0" -"tamayu.shimane.jp\0" -"komagane.nagano.jp\0freedesktop.org\0" -"wales.museum\0kiwi\0" -"app.render.com\0" -"aoste.it\0recipes\0" -"shitara.aichi.jp\0can.museum\0" -"9.bg\0dyndns.ddnss.de\0" -"kochi.jp\0" -"pars\0" -"ch.tc\0idnblogger.com\0" -"hb.cn\0umbria.it\0haram.no\0" -"torino.museum\0custom.metacentrum.cz\0" -"mc.eu.org\0" -"kochi.kochi.jp\0lexus\0" -"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0" -"sc.cn\0" -"zappos\0" -"sakai.ibaraki.jp\0" -"ichikawa.hyogo.jp\0" -"broke-it.net\0" -"per.nf\0flt.cloud.muni.cz\0" -"aizumi.tokushima.jp\0rzeszow.pl\0" -"udono.mie.jp\0" -"k12.ar.us\0today\0" -"wafflecell.com\0" -"tysvar.no\0lib.in.us\0" -"niihama.ehime.jp\0" -"trentinosuedtirol.it\0education\0" -"shioya.tochigi.jp\0k12.mi.us\0theatre\0" -"v\xc3\xa5gs\xc3\xb8y.no\0lohmus.me\0" -"texas.museum\0est.pr\0" -"uri.arpa\0readthedocs.io\0" -"nakatane.kagoshima.jp\0susono.shizuoka.jp\0lt.eu.org\0" -"anz\0" -"togo.aichi.jp\0starachowice.pl\0" -"yaizu.shizuoka.jp\0aol\0" -"kvalsund.no\0" -"epilepsy.museum\0tips\0" -"br\xc3\xb8nn\xc3\xb8y.no\0" -"trentinoaltoadige.it\0" -"fujimino.saitama.jp\0grane.no\0cloudcontrolled.com\0" -"is-a-celticsfan.org\0" -"rest\0" -"ontario.museum\0clothing\0" -"mortgage\0" -"eidsberg.no\0" -"h.se\0app\0" -"detroit.museum\0couchpotatofries.org\0" -"cesena-forli.it\0dattolocal.com\0" -"tozsde.hu\0carraramassa.it\0fredrikstad.no\0" -"vm.bytemark.co.uk\0" -"ringebu.no\0" -"s\xc3\xb8gne.no\0cn.com\0" -"kepno.pl\0" -"shimonoseki.yamaguchi.jp\0" -"ustka.pl\0" -"audio\0docs\0rag-cloud-ch.hosteur.com\0" -"postman-echo.com\0" -"trentins\xc3\xbc""dtirol.it\0kameyama.mie.jp\0bar\0" -"bbc\0" -"lindas.no\0" -"bialystok.pl\0k12.ia.us\0" -"karuizawa.nagano.jp\0cc.ct.us\0" -"ab.ca\0" -"bounceme.net\0" -"ui.nabu.casa\0" -"blogdns.org\0" -"virtuel.museum\0" -"davvenj\xc3\xa1rga.no\0\xd7\xa7\xd7\x95\xd7\x9d\0" -"undersea.museum\0art\0bbt\0sells-for-u.com\0" -"per.sg\0bcg\0" -"z.bg\0" -"gr.it\0" -"goshiki.hyogo.jp\0bcn\0" -"matsushige.tokushima.jp\0carrier.museum\0s\xc3\xb8rreisa.no\0dental\0" -"vik.no\0stada\0" -"info.ve\0" -"onion\0" -"revista.bo\0osaka\0" -"gr.jp\0" -"karacol.su\0" -"gs.sf.no\0andebu.no\0" -"info.vn\0" -"from-me.org\0" -"\xc3\xa5snes.no\0from-nm.com\0" -"is-found.org\0that.win\0" -"sc.ke\0" -"tobetsu.hokkaido.jp\0" -"g\xc3\xa1\xc5\x8bgaviika.no\0molde.no\0" -"lib.mo.us\0" -"hamura.tokyo.jp\0" -"h\xc3\xa6gebostad.no\0accountant\0betainabox.com\0" -"name.hr\0" -"sc.kr\0" -"edeka\0" -"bet\0" -"place\0from-ky.com\0" -"huissier-justice.fr\0takikawa.hokkaido.jp\0" -"movimiento.bo\0hagi.yamaguchi.jp\0" -"info.tn\0" -"hachijo.tokyo.jp\0kaufen\0from-ct.com\0" -"cz.it\0" -"\xe5\xa5\x88\xe8\x89\xaf.jp\0" -"higashiyamato.tokyo.jp\0info.tr\0indie.porn\0" -"daegu.kr\0schule\0" -"info.tt\0goldpoint\0" -"sch.ae\0hk.cn\0vpnplus.to\0" -"serveftp.net\0" -"name.et\0kanonji.kagawa.jp\0sc.ls\0" -"countryestate.museum\0eu-west-1.elasticbeanstalk.com\0" -"sardinia.it\0nowaruda.pl\0info.tz\0" -"name.fj\0yono.saitama.jp\0" -"omuta.fukuoka.jp\0muenchen.museum\0" -"cloudfunctions.net\0" -"matsumae.hokkaido.jp\0apps.lair.io\0" -"valer.ostfold.no\0axa\0" -"space.museum\0aws\0" -"*.futurecms.at\0" -"fortworth.museum\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0" -"nagano.nagano.jp\0" -"\xc3\xb8ystre-slidre.no\0" -"gouv.fr\0l\xc3\xa4ns.museum\0info.ro\0fastvps.host\0" -"aizuwakamatsu.fukushima.jp\0riodejaneiro.museum\0" -"ashibetsu.hokkaido.jp\0info.sd\0dynu.net\0" -"sasebo.nagasaki.jp\0pantheonsite.io\0" -"asuke.aichi.jp\0yonabaru.okinawa.jp\0cc.gu.us\0lib.ut.us\0bid\0" -"seaport.museum\0\xd0\xb1\xd0\xb5\xd0\xbb\0dyndns-at-home.com\0" -"name.cy\0" -"ocelot.mythic-beasts.com\0" -"chuo.osaka.jp\0" -"bio\0" -"mobi\0" -"run.app\0" -"*.webhare.dev\0" -"name.eg\0lc.it\0\xe6\xb8\xb8\xe6\x88\x8f\0" -"info.pk\0no.com\0" -"s\xc3\xa1lat.no\0info.pl\0" -"2ix.at\0" -"biz\0railway.museum\0shoparena.pl\0" -"gouv.ht\0" -"info.pr\0ddnsfree.com\0" -"vt.it\0" -"enf.br\0from-nh.com\0" -"in-vpn.de\0" -"tanabe.kyoto.jp\0aktyubinsk.su\0" -"rawa-maz.pl\0boutique\0" -"campinas.br\0" -"moda\0" -"name.az\0" -"tickets\0" -"fujiidera.osaka.jp\0" -"bip.sh\0" -"info.na\0""2ix.ch\0" -"gunma.jp\0" -"jelenia-gora.pl\0" -"shimada.shizuoka.jp\0" -"okutama.tokyo.jp\0info.mv\0info.nf\0jele.cloud\0" -"gouv.bj\0" -"info.ni\0" -"from-md.com\0" -"2ix.de\0" -"production.aero\0" -"chuo.yamanashi.jp\0" -"info.nr\0" -"sp.gov.br\0" -"leg.br\0" -"gouv.ci\0" -"togura.nagano.jp\0bc.platform.sh\0" -"sekd1.beebyteapp.io\0" -"susaki.kochi.jp\0palmsprings.museum\0" -"altoadige.it\0higashinaruse.akita.jp\0" -"consulting.aero\0mk.eu.org\0" -"services.aero\0" -"columbia.museum\0" -"info.la\0s3.eu-west-2.amazonaws.com\0" -"tadotsu.kagawa.jp\0" -"hayashima.okayama.jp\0" -"kaas.gg\0" -"higashiagatsuma.gunma.jp\0bms\0" -"firenze.it\0" -"pccw\0" -"goto.nagasaki.jp\0" -"bmw\0wedeploy.sh\0" -"hasura.app\0" -"rishirifuji.hokkaido.jp\0" -"info.ls\0" -"journal.aero\0sch.id\0" -"kunohe.iwate.jp\0" -"id.au\0press.museum\0" -"sc.ug\0" -"kawakami.nara.jp\0" -"sc.tz\0" -"satsumasendai.kagoshima.jp\0" -"realestate.pl\0bom\0" -"sch.ir\0" -"boo\0" -"serveirc.com\0" -"sc.us\0" -"bot\0" -"vic.gov.au\0" -"motegi.tochigi.jp\0box\0" -"so.gov.pl\0" -"sch.jo\0" -"users.scale.virtualcloud.com.br\0" -"ot.it\0pd.it\0info.ke\0" -"cab\0from-ok.com\0" -"misato.saitama.jp\0" -"info.ki\0" -"is-a-therapist.com\0" -"kuchinotsu.nagasaki.jp\0muosat.no\0crimea.ua\0" -"lu.eu.org\0me.eu.org\0" -"rikubetsu.hokkaido.jp\0" -"kunst.museum\0" -"nowruz\0" -"kawai.nara.jp\0cal\0" -"cam\0demo.datacenter.fi\0" -"beauxarts.museum\0quebec.museum\0" -"gjovik.no\0cba\0" -"car\0" -"utazas.hu\0ehime.jp\0ricoh\0" -"cat\0kawamata.fukushima.jp\0" -"vicenza.it\0kayabe.hokkaido.jp\0schokokeks.net\0" -"sch.lk\0cloudns.eu\0clan.rip\0" -"k12.ms.us\0k12.nc.us\0" -"cbn\0" -"farm.museum\0black\0" -"magazine.aero\0davvenjarga.no\0zagan.pl\0cbs\0" -"ok.us\0geekgalaxy.com\0" -"sch.ly\0svelvik.no\0" -"tomiya.miyagi.jp\0" -"naoshima.kagawa.jp\0lv.eu.org\0" -"\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0" -"s\xc3\xb8ndre-land.no\0barcelona\0" -"trust.museum\0lifeinsurance\0" -"steam.museum\0\xe3\x82\xa2\xe3\x83\x9e\xe3\x82\xbe\xe3\x83\xb3\0" -"gsj.bz\0" -"zao.miyagi.jp\0fujitsu\0" -"civilization.museum\0" -"village.museum\0tennis\0whoswho\0" -"ecn.br\0sch.ng\0*.code.run\0" -"armenia.su\0" -"z.se\0jozi.biz\0" -"sagamihara.kanagawa.jp\0" -"makinohara.shizuoka.jp\0automotive.museum\0ac.leg.br\0" -"field.museum\0dynamic-dns.info\0" -"stavern.no\0" -"ks.ua\0" -"habmer.no\0" -"orkanger.no\0" -"tsuiki.fukuoka.jp\0" -"hannan.osaka.jp\0" -"medical.museum\0*.ocp.customer-oci.com\0" -"photos\0" -"adobeaemcloud.net\0" -"ceo\0" -"cloudns.in\0" -"cfa\0" -"honai.ehime.jp\0bytom.pl\0" -"cfd\0app.os.stg.fedoraproject.org\0" -"ks.us\0" -"sanagochi.tokushima.jp\0" -"urayasu.chiba.jp\0tmall\0" -"gujo.gifu.jp\0" -"buy\0" -"booking\0" -"airline.aero\0overhalla.no\0unicom\0" -"nordkapp.no\0sch.qa\0" -"okayama.jp\0vt.us\0" -"id.ir\0" -"from-nv.com\0ca.reclaim.cloud\0" -"lapy.pl\0grocery\0cloudns.cc\0" -"tamamura.gunma.jp\0" -"on-aptible.com\0" -"sumita.iwate.jp\0machida.tokyo.jp\0from-ga.com\0" -"e4.cz\0" -"te.it\0tranby.no\0" -"izumi.kagoshima.jp\0name.vn\0" -"b\xc3\xa1hccavuotna.no\0" -"uonuma.niigata.jp\0rennes\xc3\xb8y.no\0" -"bandai.fukushima.jp\0" -"wedeploy.me\0" -"repair\0cn-northwest-1.eb.amazonaws.com.cn\0*.awdev.ca\0" -"pacific.museum\0" -"tempurl.host\0noip.us\0" -"exchange.aero\0sch.sa\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" -"misconfused.org\0" -"shiroishi.miyagi.jp\0capetown\0for.men\0" -"gjerdrum.no\0" -"barclays\0" -"asahi.mie.jp\0" -"a.prod.fastly.net\0" -"kutno.pl\0chernivtsi.ua\0" -"jfk.museum\0" -"name.tj\0" -"sch.so\0" -"dupont\0" -"web.app\0" -"sch.ss\0shoes\0ar.com\0" -"katsuyama.fukui.jp\0" -"name.tr\0" -"dolls.museum\0name.tt\0" -"id.lv\0" -"kazuno.akita.jp\0" -"numazu.shizuoka.jp\0id.ly\0bzh\0" -"sr.gov.pl\0tec.mi.us\0" -"dgca.aero\0at-band-camp.net\0" -"blog\0" -"siljan.no\0" -"es.eu.org\0" -"logoip.de\0" -"onagawa.miyagi.jp\0" -"dellogliastra.it\0kr.eu.org\0" +"stranda.no\0" +"accenture\0" +"aju.br\0" "mango\0" -"oirm.gov.pl\0" -"andriatranibarletta.it\0" -"glas.museum\0" -"namegata.ibaraki.jp\0bieszczady.pl\0eu.ax\0" -"press.cy\0lon.wafaicloud.com\0" -"moto\0\xe6\x9c\xba\xe6\x9e\x84\0" -"biella.it\0k12.nv.us\0" -"yamatotakada.nara.jp\0rissa.no\0" -"lecco.it\0kiev.ua\0" -"soo.kagoshima.jp\0" -"s3-ap-south-1.amazonaws.com\0" -"higashine.yamagata.jp\0" -"\xe5\x95\x86\xe6\xa0\x87\0nym.by\0" -"nym.bz\0" -"earth\0" -"at.it\0" -"sasayama.hyogo.jp\0" -"gouv.sn\0" -"*.kitakyushu.jp\0" -"hirara.okinawa.jp\0" -"sor-varanger.no\0" -"lu.it\0me.it\0" -"name.qa\0" -"chofu.tokyo.jp\0name.pr\0builders\0" -"kannami.shizuoka.jp\0" -"suzu.ishikawa.jp\0bar2.net\0" -"frontdoor\0target\0" -"\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0" -"shiki.saitama.jp\0" -"nym.ec\0" -"abiko.chiba.jp\0" -"laakesvuemie.no\0" -"manaus.br\0me.ke\0" -"name.na\0" -"trieste.it\0folkebibl.no\0" -"cust.testing.thingdust.io\0" -"kanzaki.saga.jp\0ch.trendhosting.cloud\0" -"caserta.it\0rikuzentakata.iwate.jp\0himeshima.oita.jp\0fukaya.saitama.jp\0name.mv\0" -"name.ng\0repair.men\0" -"name.my\0lorenskog.no\0ak.us\0" -"doomdns.org\0" -"lugs.org.uk\0" -"com\0" -"florida.museum\0nore-og-uvdal.no\0" -"coldwar.museum\0router.management\0" -"cpa\0" -"freeboxos.com\0" -"lenvik.no\0at.md\0" -"livinghistory.museum\0" -"ug.gov.pl\0info.zm\0sch.zm\0blue\0" -"website\0s3.dualstack.eu-central-1.amazonaws.com\0" -"hanamaki.iwate.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0" -"hida.gifu.jp\0kosei.shiga.jp\0" -"im.it\0" -"marumori.miyagi.jp\0" -"shintoku.hokkaido.jp\0tjeldsund.no\0" -"dad\0hosting-cluster.nl\0" -"barsy.info\0dynserv.org\0" -"ikawa.akita.jp\0" -"tn.it\0pages.dev\0" -"nym.gr\0" -"ltd.co.im\0" -"webhop.me\0" -"shinjo.nara.jp\0" -"donna.no\0" -"health\0" -"kashiwara.osaka.jp\0nym.gy\0" -"nym.hk\0" -"cloudns.us\0" -"miyazaki.jp\0brasilia.me\0" -"modern.museum\0" -"takaoka.toyama.jp\0te.ua\0day\0logoip.com\0" -"name.mk\0" -"berlin\0" -"nym.ie\0" -"lib.or.us\0" -"id.us\0" -"crs\0csc\0s3-website-us-west-1.amazonaws.com\0reserve-online.net\0" -"maceio.br\0" -"tcm.museum\0" -"dyndns-home.com\0" -"mjondalen.no\0noip.me\0" -"agano.niigata.jp\0" -"name.jo\0" -"fe.it\0utsira.no\0cc.wy.us\0" -"woodside\0" -"osaka.jp\0shiroi.chiba.jp\0nakanojo.gunma.jp\0" -"pv.it\0" -"kashiwa.chiba.jp\0kiyose.tokyo.jp\0" -"bingo\0" -"tw.cn\0wedeploy.io\0" -"inf.br\0" -"ardal.no\0" -"dds\0" -"friuliv-giulia.it\0gouv.km\0" -"\xe1\x83\x92\xe1\x83\x94\0" -"aquarium.museum\0vote\0" -"nym.la\0" -"pstmn.io\0" -"nym.lc\0" -"nym.li\0" -"inf.cu\0aramco\0voto\0nym.kz\0" -"munakata.fukuoka.jp\0r\xc3\xa5""de.no\0bd.se\0dev\0" -"alessandria.it\0" -"cuisinella\0al.leg.br\0" -"pubtls.org\0" -"blogdns.net\0nym.lt\0playstation-cloud.com\0" -"sogne.no\0nym.lu\0nym.me\0" -"wakayama.wakayama.jp\0" -"carboniaiglesias.it\0" -"fi.eu.org\0" -"fuefuki.yamanashi.jp\0gouv.ml\0" -"association.aero\0nym.mn\0" -"mitou.yamaguchi.jp\0" -"me.so\0" -"mn.it\0" -"me.ss\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0me.tc\0" -"kunstunddesign.museum\0nym.mx\0" -"science.museum\0dunlop\0" -"collection.museum\0" -"\xc3\xa5mli.no\0" -"yawara.ibaraki.jp\0*.stolos.io\0" -"lancia\0" -"trentin-sud-tirol.it\0kamishihoro.hokkaido.jp\0" -"dhl\0" -"labour.museum\0makeup\0" -"search\0" -"shimamaki.hokkaido.jp\0jondal.no\0" -"sweden.museum\0nym.nz\0" -"kozagawa.wakayama.jp\0me.tz\0" +"joetsu.niigata.jp\0lezajsk.pl\0" +"info.ve\0law.za\0" +"lc.it\0trento.it\0" +"gov.om\0" +"jele.io\0" +"taka.hyogo.jp\0" +"or.ci\0krasnodar.su\0" +"info.vn\0" +"accesscam.org\0" +"\xe6\x96\xb0\xe6\xbd\x9f.jp\0nayoro.hokkaido.jp\0" +"is-a-democrat.com\0*.r.appspot.com\0" +"osen.no\0dnsupdate.info\0" +"gov.ph\0" +"from-in.com\0" +"or.cr\0" +"gov.pk\0" +"tokamachi.niigata.jp\0gov.pl\0myeffect.net\0" +"pasadena.museum\0" +"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0gov.pn\0" +"iraq.museum\0gov.qa\0lamborghini\0" +"gov.pr\0k12.tr\0" +"gov.ps\0" +"ginan.gifu.jp\0wazuka.kyoto.jp\0gov.pt\0" +"gov.py\0" +"lu.it\0me.it\0miyagi.jp\0nerima.tokyo.jp\0shunan.yamaguchi.jp\0capital\0" +"morena.br\0" +"batsfjord.no\0" +"fortworth.museum\0isteingeek.de\0" +"info.tn\0" +"info.tr\0" +"akkeshi.hokkaido.jp\0info.tt\0" +"farmstead.museum\0k12.vi\0" +"sn\xc3\xa5sa.no\0" +"mn.it\0nakanojo.gunma.jp\0omiya.saitama.jp\0" +"me.ke\0yosemite.museum\0" +"info.tz\0" +"\xe6\xbe\xb3\xe9\x97\xa8\0" +"gov.sa\0servebbs.com\0" +"gov.sb\0" +"gov.rs\0gov.sc\0" +"anjo.aichi.jp\0tobe.ehime.jp\0oguni.yamagata.jp\0gov.sd\0" +"handson.museum\0gov.ru\0" +"gov.rw\0gov.sg\0" +"hanawa.fukushima.jp\0gov.sh\0" +"simple-url.com\0herokuapp.com\0" +"salvador.br\0" +"susono.shizuoka.jp\0misasa.tottori.jp\0gov.sl\0" +"dattoweb.com\0quicksytes.com\0" +"sorocaba.br\0" +"floro.no\0gov.so\0" +"vic.gov.au\0from-fl.com\0" +"pol.tr\0" +"info.ro\0gov.ss\0" +"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0narita.chiba.jp\0yabuki.fukushima.jp\0" +"ubank\0" +"info.sd\0gov.sx\0" +"gov.sy\0" +"gov.tj\0" +"wlocl.pl\0gov.tl\0" +"gov.tm\0\xd1\x81\xd0\xbf\xd0\xb1.\xd1\x80\xd1\x83\xd1\x81\0" +"gov.tn\0frontdoor\0" +"gov.to\0" +"gov.ua\0" +"gov.tr\0" +"potenza.it\0starachowice.pl\0gov.tt\0" +"africa.com\0sells-for-u.com\0" +"gov.tw\0crd.co\0" +"rokunohe.aomori.jp\0" +"if.ua\0" +"gov.uk\0" +"or.id\0" +"aviation.museum\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0" +"klepp.no\0info.pk\0" +"info.pl\0" +"*.compute.amazonaws.com\0" +"gov.vc\0" +"takinoue.hokkaido.jp\0tobetsu.hokkaido.jp\0" +"tas.edu.au\0gov.ve\0" +"sh.cn\0info.pr\0" +"n\xc3\xa1vuotna.no\0" +"napoli.it\0shinanomachi.nagano.jp\0" +"or.it\0" +"naturbruksgymn.se\0" +"gov.vn\0" +"oygarden.no\0" +"mizusawa.iwate.jp\0hyuga.miyazaki.jp\0makeup\0" +"assassination.museum\0school.museum\0" +"otari.nagano.jp\0sejny.pl\0" +"iron.museum\0info.na\0\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0" +"hotel.tz\0" +"or.jp\0chiyoda.gunma.jp\0" +"ukco.me\0" +"info.mv\0info.nf\0" +"nesodden.no\0" +"or.ke\0info.ni\0" +"nflfan.org\0" +"beep.pl\0" +"cuiaba.br\0" +"gov.ws\0" +"chocolate.museum\0" +"tj.cn\0info.nr\0" +"katori.chiba.jp\0" +"onrender.com\0" +"or.kr\0" +"csx.cc\0" +"pt.it\0" +"arts.museum\0" +"scholarships\0pantheonsite.io\0" +"f.se\0" +"doctor\0" +"info.la\0gov.ye\0" +"resindevice.io\0" +"ryugasaki.ibaraki.jp\0" +"jewelry\0" +"mifune.kumamoto.jp\0*.northflank.app\0" +"berkeley.museum\0" +"other.nf\0" +"o.se\0gov.za\0" +"kawajima.saitama.jp\0sano.tochigi.jp\0" +"bellevue.museum\0" +"busan.kr\0" +"info.ls\0dynserv.org\0ybo.review\0" +"shimokawa.hokkaido.jp\0" +"or.na\0ks.ua\0" +"is.eu.org\0gitlab.io\0" +"or.mu\0gov.zm\0lacaixa\0*.digitaloceanspaces.com\0" +"construction\0" +"x.se\0us-4.evennode.com\0" +"ntdll.top\0" +"presse.km\0ivano-frankivsk.ua\0ro.im\0" +"vevelstad.no\0me.so\0gov.zw\0myphotos.cc\0" +"fermo.it\0yamagata.nagano.jp\0" +"ggee\0" +"des.br\0" +"me.ss\0ks.us\0me.tc\0" +"ro.it\0chikuho.fukuoka.jp\0" +"portlligat.museum\0bofa\0enterprisecloud.nu\0" +"tamakawa.fukushima.jp\0takasaki.gunma.jp\0" +"mysecuritycamera.com\0" +"chikuhoku.nagano.jp\0" +"*.compute.estate\0" +"inderoy.no\0skj\xc3\xa5k.no\0dnsalias.org\0" +"tsuno.kochi.jp\0*.cryptonomic.net\0" +"info.ke\0" +"plurinacional.bo\0it.eu.org\0" +"info.ki\0marylhurst.museum\0" +"sk\xc3\xa5nland.no\0" +"bulsan-suedtirol.it\0" +"usarts.museum\0from-ak.com\0navoi.su\0" +"me.tz\0" "me.uk\0" -"risor.no\0" -"at.vg\0" -"dh.bytemark.co.uk\0" -"riobranco.br\0servecounterstrike.com\0" -"kawakita.ishikawa.jp\0yamanobe.yamagata.jp\0me.us\0*.linodeobjects.com\0nym.pe\0" -"plc.co.im\0" -"passenger-association.aero\0montreal.museum\0" -"usuki.oita.jp\0" -"kamogawa.chiba.jp\0secure\0" -"wv.us\0" -"nordeste-idc.saveincloud.net\0" -"user.party.eus\0" -"diy\0" -"nym.pt\0" -"fr\xc3\xa6na.no\0for.mom\0" -"to.gov.br\0me.vu\0" -"emiliaromagna.it\0" -"suldal.no\0" -"juif.museum\0" -"kamimine.saga.jp\0kharkov.ua\0" -"serveftp.org\0" -"siteleaf.net\0" -"miki.hyogo.jp\0kawagoe.mie.jp\0lans.museum\0" -"s3-website-ap-southeast-1.amazonaws.com\0" -"msk.ru\0" -"hammerfest.no\0\xd0\xb1\xd0\xb3\0" -"sciencesnaturelles.museum\0" -"\xe7\xb5\x84\xe7\xb9\x94.hk\0boxfuse.io\0dopaas.com\0pages.torproject.net\0" -"hasama.oita.jp\0bielawa.pl\0associates\0" -"enna.it\0" -"valled-aosta.it\0k12.gu.us\0" -"higashiyodogawa.osaka.jp\0nym.ro\0" -"mil.ac\0myftp.org\0" -"bologna.it\0kita.kyoto.jp\0" -"mil.ae\0" -"msk.su\0" -"hanawa.fukushima.jp\0" -"b\xc3\xb8.telemark.no\0" -"judaica.museum\0eidsvoll.no\0cookingchannel\0" -"sakura\0" -"mil.al\0ong.br\0" -"asti.it\0bremanger.no\0" -"malbork.pl\0solar\0nym.sk\0enterprisecloud.nu\0" -"nishigo.fukushima.jp\0saito.miyazaki.jp\0" -"mil.ba\0" -"mil.ar\0tn.us\0" -"matsuno.ehime.jp\0s3-website.eu-west-2.amazonaws.com\0cloudns.pw\0lug.org.uk\0" -"okuma.fukushima.jp\0" -"f.bg\0" -"nym.su\0" -"mil.az\0app.banzaicloud.io\0" -"nym.sx\0" -"futaba.fukushima.jp\0castres.museum\0" -"mil.bo\0kashiwazaki.niigata.jp\0" -"fund\0" -"mil.br\0chigasaki.kanagawa.jp\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0" -"cesenaforli.it\0tadaoka.osaka.jp\0" -"embetsu.hokkaido.jp\0" -"mad.museum\0\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0wpmudev.host\0" -"microlight.aero\0mil.by\0" -"nym.tw\0" -"dnp\0" -"mil.cl\0obama.fukui.jp\0otsu.shiga.jp\0press.se\0" -"lib.ar.us\0" -"mil.cn\0myhome-server.de\0" -"mil.co\0" -"malselv.no\0gent\0linkyard-cloud.ch\0" -"karasjohka.no\0dog\0xx.gl\0" -"inf.mk\0" -"town.museum\0rad\xc3\xb8y.no\0bharti\0" -"s\xc3\xb8r-aurdal.no\0" -"is-a-bulls-fan.com\0" -"deloitte\0gg.ax\0" -"valle-aosta.it\0rich\0" -"krasnodar.su\0" -"\xe4\xba\xac\xe9\x83\xbd.jp\0" -"como.it\0" -"laquila.it\0musashimurayama.tokyo.jp\0" -"mil.do\0tatebayashi.gunma.jp\0dot\0express\0" -"bialowieza.pl\0" -"mizunami.gifu.jp\0" -"mil.ec\0yoro.gifu.jp\0sanok.pl\0" -"toyota.aichi.jp\0hiranai.aomori.jp\0" -"mil.eg\0higashikawa.hokkaido.jp\0is-an-artist.com\0" -"boomla.net\0" -"anpachi.gifu.jp\0" -"trading\0" -"ginowan.okinawa.jp\0\xe4\xbd\x9b\xe5\xb1\xb1\0" -"\xd0\xb5\xd1\x8e\0dyndns.info\0" -"from-ca.com\0" -"co.ae\0logistics.aero\0komatsushima.tokushima.jp\0" -"co.ag\0" -"higashi.okinawa.jp\0" -"mil.fj\0feste-ip.net\0" +"takatsuki.shiga.jp\0presse.ml\0" +"osasco.br\0" +"salat.no\0" +"barefoot\0" +"vinnytsia.ua\0" +"me.us\0" +"ta.it\0hiraizumi.iwate.jp\0sukumo.kochi.jp\0williamhill\0" +"or.pw\0" +"uwu.ai\0" +"fredrikstad.no\0ardal.no\0" +"nanmoku.gunma.jp\0" +"hotel.lk\0" +"liguria.it\0nankoku.kochi.jp\0tome.miyagi.jp\0" +"\xe4\xba\x9a\xe9\xa9\xac\xe9\x80\x8a\0" +"mn.us\0" +"tateyama.toyama.jp\0" +"cherkassy.ua\0college\0me.vu\0" +"shinto.gunma.jp\0teshikaga.hokkaido.jp\0bar0.net\0" +"us-3.evennode.com\0ddns.me\0" +"biev\xc3\xa1t.no\0stord.no\0" +"\xe4\xbd\x9b\xe5\xb1\xb1\0" +"ts.it\0prochowice.pl\0" +"*.transurl.be\0" +"urasoe.okinawa.jp\0" +"kyiv.ua\0" +"vision\0" +"is-a-lawyer.com\0" +"saogonca.br\0" +"tsukumi.oita.jp\0" +"yk.ca\0public.museum\0" +"airbus\0backplaneapp.io\0in.eu.org\0" +"campania.it\0ono.hyogo.jp\0mihara.kochi.jp\0tabayama.yamanashi.jp\0" +"v\xc3\xa1rgg\xc3\xa1t.no\0\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" +"bolzano-altoadige.it\0hayashima.okayama.jp\0nose.osaka.jp\0koza.wakayama.jp\0or.th\0" +"hokksund.no\0" +"kakogawa.hyogo.jp\0" +"decorativearts.museum\0sochi.su\0" +"fbx-os.fr\0" +"sor-varanger.no\0" +"ashoro.hokkaido.jp\0" +"paas.hosted-by-previder.com\0" +"ny.us\0" +"ve.it\0swinoujscie.pl\0" +"florida.museum\0" +"k\xc3\xa5""fjord.no\0or.ug\0" +"or.tz\0dscloud.biz\0" +"vard\xc3\xb8.no\0" +"nishinomiya.hyogo.jp\0" +"uhren.museum\0" +"or.us\0" +"online.th\0" +"e164.arpa\0loyalist.museum\0" +"fnd.br\0\xe5\xbe\xae\xe5\x8d\x9a\0" +"music\0read-books.org\0" +"umaji.kochi.jp\0ishigaki.okinawa.jp\0" +"hotel.hu\0us-2.evennode.com\0termez.su\0" +"steigen.no\0" +"ternopil.ua\0" +"gov.nc.tr\0" +"sellsyourhome.org\0" +"daigo.ibaraki.jp\0" +"*.transurl.eu\0" +"aircraft.aero\0magazine.aero\0dovre.no\0" +"sardegna.it\0hasami.nagasaki.jp\0bond\0" +"berlevag.no\0" +"nisshin.aichi.jp\0shizuoka.shizuoka.jp\0" +"wiki.bo\0viajes\0" +"cn.com\0" +"wiki.br\0" +"lea\xc5\x8bgaviika.no\0" +"gateway.museum\0" +"hakodate.hokkaido.jp\0kin.okinawa.jp\0" +"book\0apps.lair.io\0" +"*.linodeobjects.com\0" +"consulting.aero\0fhs.no\0" +"s3-sa-east-1.amazonaws.com\0" +"port.fr\0" +"fed.us\0" +"kitagawa.miyazaki.jp\0hidaka.wakayama.jp\0" +"karate.museum\0" +"sosa.chiba.jp\0" +"tsubata.ishikawa.jp\0" +"dyn.home-webserver.de\0eu-4.evennode.com\0" +"toolforge.org\0" +"iizuna.nagano.jp\0handcrafted.jp\0" +"ontario.museum\0" +"ichikawa.hyogo.jp\0cs.keliweb.cloud\0" +"cincinnati.museum\0us-1.evennode.com\0" +"pa.leg.br\0" +"fetsund.no\0" +"kunitachi.tokyo.jp\0warszawa.pl\0" +"orangecloud.tn\0" +"oshima.yamaguchi.jp\0" +"e12.ve\0fidelity\0tashkent.su\0" +"s3.dualstack.ap-southeast-2.amazonaws.com\0from-va.com\0north-kazakhstan.su\0" +"cog.mi.us\0sandcats.io\0" +"kochi.jp\0" +"harvestcelebration.museum\0" +"realm.cz\0" +"cityeats\0" +"hitachi.ibaraki.jp\0kitayama.wakayama.jp\0tn.oxa.cloud\0" +"frankfurt.museum\0is-into-cars.com\0" +"cust.disrec.thingdust.io\0" +"catania.it\0forl\xc3\xac-cesena.it\0fukuchi.fukuoka.jp\0inabe.mie.jp\0ureshino.mie.jp\0" +"ulvik.no\0" +"isumi.chiba.jp\0" +"williamsburg.museum\0" +"owariasahi.aichi.jp\0katsuyama.fukui.jp\0kurogi.fukuoka.jp\0tomioka.gunma.jp\0" +"pb.leg.br\0" +"sanjo.niigata.jp\0" +"crafts.museum\0livinghistory.museum\0oceanographic.museum\0" +"bio.br\0" +"moss.no\0" +"otaru.hokkaido.jp\0boomla.net\0" +"dyndns.dappnode.io\0" +"flynnhosting.net\0us.reclaim.cloud\0" +"club.aero\0" +"joinville.br\0" +"ftpaccess.cc\0asso.eu.org\0" +"detroit.museum\0" +"of.fashion\0" +"omotego.fukushima.jp\0ginoza.okinawa.jp\0" +"eu-3.evennode.com\0" +"mombetsu.hokkaido.jp\0karumai.iwate.jp\0bialowieza.pl\0vanguard\0" +"texas.museum\0" +"muncie.museum\0paleo.museum\0satx.museum\0kherson.ua\0" +"enebakk.no\0graphox.us\0" +"sannohe.aomori.jp\0" +"narvik.no\0k12.ak.us\0" +"suwalki.pl\0feste-ip.net\0" +"labour.museum\0is-a-player.com\0" +"aaa\0" +"sakaki.nagano.jp\0yomitan.okinawa.jp\0kozagawa.wakayama.jp\0" +"youth.museum\0info.zm\0" +"lawyer\0" +"hurum.no\0" +"omi.nagano.jp\0*.transurl.nl\0" +"satte.saitama.jp\0" +"entertainment.aero\0" +"\xe5\x85\xb5\xe5\xba\xab.jp\0" +"abb\0for-more.biz\0" +"abc\0" +"hara.nagano.jp\0blogdns.net\0" +"geelvinck.museum\0" +"\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"drangedal.no\0tranoy.no\0" +"aogaki.hyogo.jp\0suwa.nagano.jp\0" +"penza.su\0remotewd.com\0" +"mayfirst.org\0" +"vn.ua\0s3-us-gov-west-1.amazonaws.com\0*.uberspace.de\0" +"svelvik.no\0" +"okawa.fukuoka.jp\0ham-radio-op.net\0" +"windmill.museum\0aktyubinsk.su\0" +"chungbuk.kr\0" +"mjondalen.no\0lib.ks.us\0" +"shingu.wakayama.jp\0" +"careers\0" +"schulserver.de\0" +"eu-2.evennode.com\0" +"siljan.no\0aco\0" +"association.museum\0" +"val-d-aosta.it\0" +"tuscany.it\0taiki.hokkaido.jp\0" +"bbs.tr\0" +"bo.nordland.no\0" +"virginia.museum\0" +"floripa.br\0town\0" +"b\xc3\xa1hccavuotna.no\0" +"miyako.iwate.jp\0" +"dyndns.tv\0" +"lib.ma.us\0ads\0*.s5y.io\0" +"toscana.it\0isen.kagoshima.jp\0kawaiishop.jp\0from-az.net\0cloudapp.net\0" +"aeg\0" +"shonai.yamagata.jp\0" +"yamanobe.yamagata.jp\0edu.krd\0" +"drr.ac\0" +"shibetsu.hokkaido.jp\0" +"s\xc3\xa1l\xc3\xa1t.no\0" +"fujikawa.shizuoka.jp\0akiruno.tokyo.jp\0freetls.fastly.net\0" +"is-an-anarchist.com\0storebase.store\0" +"0e.vc\0" +"undersea.museum\0hockey\0" +"afl\0" +"wy.us\0" +"lib.mo.us\0toys\0" +"kushima.miyazaki.jp\0iobb.net\0" +"kawaue.gifu.jp\0" +"countryestate.museum\0" +"yatsuka.shimane.jp\0" +"eu-1.evennode.com\0" +"fjaler.no\0tools\0dyndns.ws\0small-web.org\0" +"udine.it\0" +"servesarcasm.com\0" +"wiw.gov.pl\0" +"presse.ci\0" +"guide\0appchizi.com\0" +"gyeongnam.kr\0" +"vaapste.no\0" +"matsushima.miyagi.jp\0chuo.tokyo.jp\0" +"tselinograd.su\0mein-iserv.de\0" +"kushiro.hokkaido.jp\0" +"aig\0kpmg\0myddns.rocks\0" +"slupsk.pl\0email\0" +"conf.au\0krym.ua\0sebastopol.ua\0technology\0from-tn.com\0smushcdn.com\0cloud.interhostsolutions.be\0" +"comcast\0" +"rana.no\0vpnplus.to\0" +"!city.sapporo.jp\0itoman.okinawa.jp\0appengine.flow.ch\0" +"hb.cldmail.ru\0" +"lib.or.us\0" +"trani-andria-barletta.it\0" +"storage\0" +"federation.aero\0" +"workshop.museum\0" +"sumita.iwate.jp\0omi.niigata.jp\0nishi.osaka.jp\0" +"vs.mythic-beasts.com\0" +"johana.toyama.jp\0" +"in-vpn.org\0" +"guitars\0" +"shiki.saitama.jp\0higashiyamato.tokyo.jp\0ddns.net\0" "sowa.ibaraki.jp\0" -"rentals\0" -"co.am\0dreamhosters.com\0" -"co.ao\0szkola.pl\0eat\0" -"southwest.museum\0is-an-accountant.com\0" -"chikusei.ibaraki.jp\0gotemba.shizuoka.jp\0dynvpn.de\0" -"co.bb\0gs.svalbard.no\0edu.scot\0" -"co.at\0" -"mil.ge\0" +"service.one\0" +"ecologia.bo\0l\xc3\xb8ten.no\0surnadal.no\0" +"malselv.no\0" +"tobishima.aichi.jp\0misawa.aomori.jp\0limanowa.pl\0global.ssl.fastly.net\0" +"pi.leg.br\0" +"landrover\0" +"shimonita.gunma.jp\0citadel\0" +"\xe6\x97\xb6\xe5\xb0\x9a\0" +"myasustor.com\0net-freaks.com\0" +"lib.ri.us\0" +"ogawara.miyagi.jp\0" +"\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0firewall-gateway.com\0" +"santafe.museum\0" +"trd.br\0" +"mus.mi.us\0" +"nakatane.kagoshima.jp\0netflix\0" +"abu.yamaguchi.jp\0" +"abudhabi\0" +"tgory.pl\0" +"horology.museum\0xen.prgmr.com\0" +"friuli-veneziagiulia.it\0" +"tagajo.miyagi.jp\0" +"melbourne\0" +"sp.gov.br\0" +"cc.hi.us\0" +"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0" +"natal.br\0anz\0" +"k12.id.us\0hepforge.org\0" +"ube.yamaguchi.jp\0aol\0" +"jelastic.regruhosting.ru\0" +"imdb\0" +"ask\xc3\xb8y.no\0" +"gorlice.pl\0" +"appudo.net\0" +"press.cy\0ddnsking.com\0" +"cooking\0" +"pics\0" +"kamo.kyoto.jp\0" +"assn.lk\0" +"lombardia.it\0app\0" +"us-west-1.elasticbeanstalk.com\0vladikavkaz.ru\0lcube-server.de\0" +"juniper\0" +"friuli-vgiulia.it\0ginowan.okinawa.jp\0" +"cafe\0" +"chungnam.kr\0reisen\0" +"krager\xc3\xb8.no\0" +"consultant.aero\0k12.in.us\0" +"iide.yamagata.jp\0" +"viking.museum\0\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0" +"repbody.aero\0loab\xc3\xa1t.no\0pt.eu.org\0" +"vladikavkaz.su\0" +"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0bar\0" +"karlsoy.no\0bbc\0" +"okinawa.okinawa.jp\0" +"baths.museum\0" +"bokn.no\0" +"nakano.tokyo.jp\0health\0" +"americanfamily\0codespot.com\0" +"os.hordaland.no\0" +"ao.it\0kitakata.fukushima.jp\0gift\0" +"dali.museum\0" +"london\0weather\0repl.run\0" +"inc.hk\0" +"minamisanriku.miyagi.jp\0so.gov.pl\0*.kunden.ortsinfo.at\0westus2.azurestaticapps.net\0" +"bari.it\0wassamu.hokkaido.jp\0art\0bbt\0" +"builtwithdark.com\0" +"amli.no\0bcg\0" +"izumiotsu.osaka.jp\0" +"coupon\0" +"nombre.bo\0" +"cam.it\0ayase.kanagawa.jp\0" +"erotika.hu\0" +"bcn\0" +"gokase.miyazaki.jp\0" +"abc.br\0pe.leg.br\0for.men\0" +"okayama.jp\0waw.pl\0" +"wales\0" +"ca.it\0omachi.nagano.jp\0faith\0" +"family.museum\0" +"bilbao.museum\0" +"gob.ar\0" +"gs.nl.no\0lib.va.us\0royal-commission.uk\0" +"showa.gunma.jp\0fukusaki.hyogo.jp\0kawasaki.miyagi.jp\0tondabayashi.osaka.jp\0" +"trading\0" +"toei.aichi.jp\0hiji.oita.jp\0omaezaki.shizuoka.jp\0" +"sandnessj\xc3\xb8""en.no\0" +"bz.it\0aisho.shiga.jp\0" +"education.museum\0" +"gob.bo\0" +"capebreton.museum\0" +"poa.br\0eurovision\0" +"business\0" +"yono.saitama.jp\0bet\0nz.basketball\0" +"servecounterstrike.com\0" +"tvedestrand.no\0" +"lukow.pl\0" +"k12.mi.us\0" +"gob.cl\0cs.it\0kami.kochi.jp\0hiphop\0" +"trentinosuedtirol.it\0minamiawaji.hyogo.jp\0uk.primetel.cloud\0" +"blogspot.vn\0" +"olayangroup\0" +"hb.cn\0weir\0" +"cc.ma.us\0" +"uvic.museum\0" +"sveio.no\0living\0" +"call\0" +"id.au\0beauxarts.museum\0from-nj.com\0" +"gob.do\0" +"axa\0" +"7.bg\0gob.ec\0aws\0readthedocs.io\0spdns.org\0" +"njs.jelastic.vps-host.net\0" +"jdf.br\0hk.cn\0" +"fukushima.hokkaido.jp\0" +"ca.na\0oracle\0is-a-teacher.com\0freemyip.com\0" +"k12.ms.us\0k12.nc.us\0\xe8\x87\xba\xe7\x81\xa3\0" +"camp\0" +"modern.museum\0draydns.de\0" +"gob.es\0h\xc3\xb8nefoss.no\0tynset.no\0gives\0freedesktop.org\0" +"ichinohe.iwate.jp\0kmpsp.gov.pl\0bid\0ca.reclaim.cloud\0" +"rovno.ua\0" +"webhop.biz\0" +"r\xc3\xb8ros.no\0cc.ms.us\0cc.nc.us\0" +"nagasaki.jp\0" +"k12.nv.us\0immo\0nid.io\0" +"en.it\0kira.aichi.jp\0minamiminowa.nagano.jp\0misato.saitama.jp\0" +"telekommunikation.museum\0" +"r\xc3\xa5""de.no\0bio\0" +"trentins\xc3\xbc""dtirol.it\0yoshida.shizuoka.jp\0*.statics.cloud\0mymediapc.net\0" +"i234.me\0" +"saijo.ehime.jp\0kisofukushima.nagano.jp\0iwata.shizuoka.jp\0augustow.pl\0land\0" +"\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0" +"seg.br\0" +"asahi.nagano.jp\0matsuzaki.shizuoka.jp\0nordeste-idc.saveincloud.net\0" +"blogspot.re\0conf.se\0" +"biz\0" +"fg.it\0yamanouchi.nagano.jp\0edogawa.tokyo.jp\0social\0" +"office\0getmyip.com\0" +"ping\0" +"chuo.fukuoka.jp\0" +"pink\0blogspot.ro\0" +"gob.gt\0" +"blogspot.rs\0" +"mazury.pl\0" +"blogspot.ru\0blogspot.se\0test-iserv.de\0" +"rotorcraft.aero\0blogspot.sg\0" +"scienceandindustry.museum\0blogspot.si\0" +"enf.br\0avoues.fr\0gob.hn\0" +"blogspot.sk\0" +"my-router.de\0" +"blogspot.sn\0" +"kayabe.hokkaido.jp\0tainai.niigata.jp\0" +"commune.am\0cafjs.com\0is-a-cubicle-slave.com\0" +"maringa.br\0*.cloud.metacentrum.cz\0" +"abruzzo.it\0hisayama.fukuoka.jp\0blogspot.td\0" +"dvag\0" +"manx.museum\0hostedpi.com\0magnet.page\0" +"engineering\0" +"fujiidera.osaka.jp\0sr.gov.pl\0" +"d.bg\0alvdal.no\0" +"cloud.jelastic.open.tim.it\0" +"care\0" +"jx.cn\0" +"s\xc3\xb8rum.no\0dyndns.org\0" +"ikaruga.nara.jp\0" +"theater.museum\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0" +"k12.pr.us\0blogspot.tw\0blogspot.ug\0" +"gr.it\0" +"airforce\0casa\0" +"psi.br\0" +"m.bg\0barum.no\0bms\0cars\0" +"bosch\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0" +"mykolaiv.ua\0case\0wpdevcloud.com\0" +"blogspot.mr\0pr.leg.br\0" +"bmw\0" +"gr.jp\0onagawa.miyagi.jp\0nosegawa.nara.jp\0cash\0" +"riodejaneiro.museum\0" +"gsj.bz\0" +"tone.ibaraki.jp\0hirono.iwate.jp\0blogspot.mx\0" +"blogspot.my\0" +"1337.pictures\0" +"lecce.it\0blogspot.nl\0mc.ax\0" +"columbus.museum\0" +"xihuan\0" +"v.bg\0asnes.no\0blogspot.no\0" +"s3.ap-northeast-2.amazonaws.com\0" +"mmafan.biz\0" +"hattfjelldal.no\0express\0" +"chiryu.aichi.jp\0mishima.shizuoka.jp\0report\0" +"id.ir\0" +"moseushi.hokkaido.jp\0wblog.id\0" +"bom\0" +"boo\0pubtls.org\0" +"aland.fi\0" +"togura.nagano.jp\0bot\0" +"zoology.museum\0ip.linodeusercontent.com\0" +"moscow\0" +"box\0blackbaudcdn.net\0" +"blogspot.pe\0" +"ca.us\0" +"im.it\0shikokuchuo.ehime.jp\0" +"cab\0" +"her\xc3\xb8y.nordland.no\0" +"kred\0" +"nebraska.museum\0blogspot.qa\0""4lima.de\0" +"gob.mx\0blogspot.pt\0" +"gob.ni\0instance.datadetect.com\0" +"hyogo.jp\0cal\0" +"allstate\0cam\0is-an-actor.com\0alpha-myqnapcloud.com\0" +"himi.toyama.jp\0iwakuni.yamaguchi.jp\0" +"cba\0" +"car\0garden\0" +"\xe5\x80\x8b\xe4\xba\xba.hk\0gs.va.no\0" +"cat\0saiki.oita.jp\0okayama.okayama.jp\0" +"og.ao\0cc.sd.us\0blogspot.is\0" +"nishikatsura.yamanashi.jp\0blogspot.it\0" +"info\0dc.us\0" +"bologna.it\0forlicesena.it\0" +"id.lv\0cbn\0" +"is-lost.org\0" +"saigawa.fukuoka.jp\0ochi.kochi.jp\0ug.gov.pl\0" +"id.ly\0gob.pa\0press.se\0" +"cbs\0softbank\0" +"blogspot.jp\0""4lima.at\0" +"communication.museum\0gob.pe\0" +"trentinostirol.it\0rikuzentakata.iwate.jp\0" +"gob.pk\0christmas\0courses\0daemon.panel.gg\0" +"nagasaki.nagasaki.jp\0" +"fi.cloudplatform.fi\0" +"\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"trentin-sudtirol.it\0cesena-forl\xc3\xac.it\0yabu.hyogo.jp\0" +"and\xc3\xb8y.no\0" +"air.museum\0" +"blogspot.kr\0" +"news\0" +"4lima.ch\0" +"kr.com\0" +"conf.lv\0" +"gok.pk\0" +"gujo.gifu.jp\0tomika.gifu.jp\0" +"blogspot.li\0" +"\xe6\x94\xbf\xe5\xba\x9c.hk\0" +"mitoyo.kagawa.jp\0fra1-de.cloudjiffy.net\0" +"elburg.museum\0" +"holmestrand.no\0\xc3\xb8stre-toten.no\0" +"next\0blogspot.lt\0blogspot.md\0" +"blogspot.lu\0" +"esp.br\0" +"ceo\0blogspot.mk\0" +"isa.kagoshima.jp\0oita.oita.jp\0abarth\0" +"cfa\0s3.dualstack.ap-northeast-1.amazonaws.com\0" +"cfd\0" +"for.mom\0logoip.com\0pro.typeform.com\0" +"cc.tx.us\0" +"elk.pl\0" +"buy\0" +"k12.vi.us\0*.alces.network\0" +"lombardy.it\0mc.it\0nagaokakyo.kyoto.jp\0shirataka.yamagata.jp\0" +"blogspot.fi\0" +"eti.br\0\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" +"land-4-sale.us\0" +"ise.mie.jp\0" +"folkebibl.no\0fusa.no\0weeklylottery.org.uk\0" +"tsushima.nagasaki.jp\0kurashiki.okayama.jp\0" +"capitalone\0coffee\0dyndns-server.com\0" +"gob.sv\0blogspot.fr\0loginline.dev\0" +"\xc3\xa5lg\xc3\xa5rd.no\0cc.va.us\0" +"isernia.it\0mizuho.tokyo.jp\0" +"from-ne.com\0" +"j\xc3\xb8lster.no\0" +"ogawa.ibaraki.jp\0yamamoto.miyagi.jp\0" +"mcpre.ru\0" +"gjemnes.no\0vardo.no\0" +"uryu.hokkaido.jp\0" +"blogspot.gr\0" +"assabu.hokkaido.jp\0" +"fastly-terrarium.com\0" +"empresa.bo\0" +"sayo.hyogo.jp\0futsu.nagasaki.jp\0" +"press.ma\0servegame.com\0" +"r\xc3\xa5holt.no\0blogspot.hk\0" +"tsunan.niigata.jp\0" +"california.museum\0" +"walter\0" +"leclerc\0wmcloud.org\0" +"messina.it\0ashiya.fukuoka.jp\0chihayaakasaka.osaka.jp\0fussa.tokyo.jp\0" +"gob.ve\0apps.fbsbx.com\0" +"blogspot.hr\0" +"ne.jp\0financial\0cdn77-ssl.net\0" +"blogspot.hu\0blogspot.ie\0" +"masfjorden.no\0" +"ostrowwlkp.pl\0" +"ne.ke\0" +"jampa.br\0foundation\0" +"\xe9\x9d\x99\xe5\xb2\xa1.jp\0aisai.aichi.jp\0toon.ehime.jp\0ogawa.saitama.jp\0" +"servebeer.com\0" +"blogspot.in\0" +"balsan-s\xc3\xbc""dtirol.it\0ozora.hokkaido.jp\0ome.tokyo.jp\0nachikatsuura.wakayama.jp\0quest\0" +"blogspot.ba\0" +"\xe5\x85\xac\xe5\x8f\xb8.cn\0" +"\xe1\x83\x92\xe1\x83\x94\0bzh\0" +"blogspot.be\0static.observableusercontent.com\0" +"ne.kr\0" +"skaun.no\0blogspot.bg\0" +"og.it\0yasu.shiga.jp\0" +"blogspot.bj\0" +"toyokawa.aichi.jp\0kouzushima.tokyo.jp\0" +"\xe5\x85\xac\xe5\x8f\xb8.hk\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0" +"blogspot.ca\0g\xc3\xbcnstigliefern.de\0" +"valleedaoste.it\0hakata.fukuoka.jp\0" +"artcenter.museum\0" +"recife.br\0blogspot.cf\0" +"id.us\0" +"urbinopesaro.it\0blogspot.ch\0" +"indie.porn\0" +"blogspot.cl\0" +"leitungsen.de\0" +"flesberg.no\0" +"azumino.nagano.jp\0" +"blogspot.de\0" +"blogspot.cv\0" +"lom.it\0pi.it\0" +"blogspot.cz\0" +"blogspot.dk\0" +"shisui.chiba.jp\0" +"karmoy.no\0varggat.no\0" +"wildlife.museum\0cbre\0toray\0\xe8\xb4\xad\xe7\x89\xa9\0" +"to.gov.br\0sx.cn\0" +"s3-external-1.amazonaws.com\0radio.am\0" +"goupile.fr\0" +"pr.it\0" +"storfjord.no\0" +"osaka.jp\0niki.hokkaido.jp\0toba.mie.jp\0higashimatsuyama.saitama.jp\0" +"suli.hu\0d.se\0withgoogle.com\0" +"customer.speedpartner.de\0" +"trading.aero\0" +"kh.ua\0l-o-g-i-n.de\0barsy.online\0homelink.one\0" +"poivron.org\0oy.lc\0" +"west1-us.cloudjiffy.net\0" +"dnepropetrovsk.ua\0" +"radio.br\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0" +"nishinoomote.kagoshima.jp\0hidaka.saitama.jp\0in-vpn.net\0jelastic.tsukaeru.net\0us.ax\0" +"m.se\0" +"\xe5\x9f\xbc\xe7\x8e\x89.jp\0" +"com\0members.linode.com\0" +"ne.pw\0whoswho\0" +"channel\0" +"cpa\0" +"uchihara.ibaraki.jp\0exposed\0" +"stuff-4-sale.us\0" +"\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0" +"la.us\0" +"rm.it\0" +"x.mythic-beasts.com\0" +"workisboring.com\0" +"mihara.hiroshima.jp\0meguro.tokyo.jp\0dad\0pcloud.host\0" +"shell.museum\0" +"lom.no\0sunndal.no\0valer.hedmark.no\0" +"massacarrara.it\0" +"szex.hu\0broadway\0couk.me\0blogspot.ae\0" +"bayern\0" +"we.bs\0" +"matsumoto.nagano.jp\0" +"historisches.museum\0v.ua\0" +"krodsherad.no\0" +"from-la.net\0blogspot.al\0" +"blogspot.am\0" +"goiania.br\0" +"koya.wakayama.jp\0" +"coal.museum\0" +"arq.br\0" +"luster.no\0recht.pro\0*.on-rio.io\0" +"ogasawara.tokyo.jp\0" +"day\0radio.fm\0" +"ebiz.tw\0" +"so.it\0" +"oystre-slidre.no\0" +"crs\0" +"\xe5\xa5\x88\xe8\x89\xaf.jp\0" +"brunel.museum\0luzern.museum\0" +"trentino-s\xc3\xbc""d-tirol.it\0\xe5\xaf\x8c\xe5\xb1\xb1.jp\0ikeda.nagano.jp\0" +"dyn-vpn.de\0" +"nowruz\0" +"fly.dev\0" +"ne.ug\0doomdns.org\0" +"sekigahara.gifu.jp\0hitachinaka.ibaraki.jp\0oji.nara.jp\0miyashiro.saitama.jp\0school\0" +"ne.tz\0" +"\xe7\xae\x87\xe4\xba\xba.hk\0\xe5\x95\x86\xe6\xa5\xad.tw\0" +"kaneyama.fukushima.jp\0" +"ibaraki.osaka.jp\0" +"mex.com\0" +"ne.us\0" +"lib.dc.us\0forumz.info\0" +"hikari.yamaguchi.jp\0xy.ax\0" +"dds\0" +"donetsk.ua\0" +"fet.no\0nsupdate.info\0" +"bar1.net\0" +"siena.it\0kuriyama.hokkaido.jp\0" +"tec.br\0dev\0myftp.biz\0" +"sf.no\0" +"sagae.yamagata.jp\0" +"bergbau.museum\0" +"sor-aurdal.no\0" +"vc.it\0\xe9\xab\x98\xe7\x9f\xa5.jp\0" +"aerobatic.aero\0n4t.co\0" +"miho.ibaraki.jp\0*.ex.futurecms.at\0trafficplex.cloud\0" +"government.aero\0" +"shinjo.nara.jp\0edu.scot\0" +"costume.museum\0" +"davvenj\xc3\xa1rga.no\0us.kg\0" +"yoka.hyogo.jp\0" +"childrens.museum\0godaddy\0voyage\0" +"marnardal.no\0" +"valledaosta.it\0asahi.yamagata.jp\0" +"chicago.museum\0gentapps.com\0" +"g\xc3\xa1ivuotna.no\0" +"neustar\0" +"asakawa.fukushima.jp\0dhl\0" +"onred.one\0" +"catholic\0hobby-site.org\0" +"mugi.tokushima.jp\0" +"modum.no\0raisa.no\0aca.pro\0" +"emiliaromagna.it\0" +"jefferson.museum\0" +"prato.it\0higashiizu.shizuoka.jp\0" +"pr.us\0" +"czeladz.pl\0" +"virtual-user.de\0" +"industria.bo\0" +"is-a-guru.com\0" +"\xe5\xae\xb6\xe9\x9b\xbb\0" +"forde.no\0hemsedal.no\0loppa.no\0" +"pomorskie.pl\0" +"cultural.museum\0us.na\0diy\0" +"homesense\0" +"ami.ibaraki.jp\0katano.osaka.jp\0channelsdvr.net\0" +"cloud.goog\0" +"shingo.aomori.jp\0shika.ishikawa.jp\0ine.kyoto.jp\0poniatowa.pl\0" +"co.com\0" +"l\xc3\xa6rdal.no\0" +"sampa.br\0" +"\xe7\xbe\xa4\xe9\xa6\xac.jp\0fuchu.hiroshima.jp\0embaixada.st\0nerdpol.ovh\0" +"salem.museum\0" +"chikusei.ibaraki.jp\0" +"coupons\0" +"yokkaichi.mie.jp\0" +"rv.ua\0room\0" +"greta.fr\0" +"!city.kawasaki.jp\0yamagata.yamagata.jp\0" +"openair.museum\0" +"ass.km\0" +"l\xc3\xb8renskog.no\0" +"aomori.jp\0\xe4\xb8\x96\xe7\x95\x8c\0" +"\xe4\xb8\xad\xe4\xbf\xa1\0spb.ru\0" +"ua.rs\0" +"kamagaya.chiba.jp\0azurestaticapps.net\0" +"frana.no\0nordre-land.no\0\xd0\xb1\xd0\xb3\0commbank\0" +"loseyourip.com\0" +"spb.su\0" +"voting\0" +"ina.saitama.jp\0" +"\xe9\x80\x9a\xe8\xb2\xa9\0from-ut.com\0" +"insurance.aero\0" +"taki.mie.jp\0dnp\0" +"play\0" +"uwajima.ehime.jp\0" +"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0indowapblog.com\0wixsite.com\0" +"design.aero\0dog\0shop.brendly.rs\0" +"plants.museum\0is-a-financialadvisor.com\0" +"aioi.hyogo.jp\0aya.miyazaki.jp\0" +"impertrixcdn.com\0" +"lib.in.us\0ssl.origin.cdn77-secure.org\0" +"askvoll.no\0origins\0winners\0" +"dot\0" +"ms.leg.br\0" +"accident-investigation.aero\0vgs.no\0voss.no\0" +"newport.museum\0unicom\0" +"orkdal.no\0telebit.io\0" +"karikatur.museum\0" +"seoul.kr\0" +"\xe7\xbb\x84\xe7\xb9\x94.hk\0ostre-toten.no\0" +"ashibetsu.hokkaido.jp\0xerox\0" +"stj\xc3\xb8rdal.no\0samsung\0" +"sirdal.no\0" +"munakata.fukuoka.jp\0" +"accountants\0pl.eu.org\0" +"*.developer.app\0" +"direct.quickconnect.to\0" +"chuo.chiba.jp\0shintoku.hokkaido.jp\0eat\0" +"chernigov.ua\0uzhgorod.ua\0lenug.su\0" +"mt.leg.br\0" +"aibetsu.hokkaido.jp\0morimachi.shizuoka.jp\0" +"from-mn.com\0" +"jaguar\0" +"\xe7\xb6\xb2\xe8\xb7\xaf.tw\0we.tc\0" +"kerryproperties\0" +"yasuda.kochi.jp\0oyodo.nara.jp\0yoshida.saitama.jp\0" +"s3.eu-west-3.amazonaws.com\0is-an-actress.com\0" +"eigersund.no\0cc.ak.us\0" +"carboniaiglesias.it\0moriya.ibaraki.jp\0takanabe.miyazaki.jp\0" +"durham.museum\0kunst.museum\0" +"here-for-more.info\0" +"shimotsuma.ibaraki.jp\0" +"\xd0\xb5\xd1\x8e\0" +"vads\xc3\xb8.no\0" +"shiraoka.saitama.jp\0wloclawek.pl\0" +"medecin.km\0hamburg.museum\0myspreadshop.com\0" +"eco\0" +"equipment\0" +"\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0" +"tsu.mie.jp\0nagawa.nagano.jp\0" +"dev-myqnapcloud.com\0" +"for.one\0" +"jozi.biz\0" +"democracia.bo\0" +"kuki.saitama.jp\0adult\0" +"rag-cloud-ch.hosteur.com\0" +"drobak.no\0lundbeck\0" +"static-access.net\0" +"edu\0" +"dtv\0" +"hk.org\0" +"chirurgiens-dentistes.fr\0" +"wmflabs.org\0" +"ama.aichi.jp\0nagaoka.niigata.jp\0creditcard\0" +"lib.nh.us\0" +"heritage.museum\0" +"takamatsu.kagawa.jp\0" +"indian.museum\0" +"aeroport.fr\0\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0" +"andriatranibarletta.it\0gdynia.pl\0" +"gjesdal.no\0ruovat.no\0" +"sicily.it\0" +"dyndns-ip.com\0" +"dvr\0rehab\0hs.run\0" +"cc.co.us\0bci.dnstrace.pro\0" +"toshima.tokyo.jp\0" +"\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0" +"audnedaln.no\0x443.pw\0" +"turin.it\0koga.ibaraki.jp\0tamayu.shimane.jp\0" +"observer\0" +"nanto.toyama.jp\0endofinternet.net\0" +"vp4.me\0" +"davvenjarga.no\0lib.nv.us\0" +"torproject.net\0" +"blogspot.com.cy\0" +"webspace.rocks\0" +"shimane.jp\0kembuchi.hokkaido.jp\0akagi.shimane.jp\0t3l3p0rt.net\0" +"louvre.museum\0ras.ru\0mein-vigor.de\0" +"oster\xc3\xb8y.no\0" +"chichibu.saitama.jp\0misato.shimane.jp\0" +"astronomy.museum\0" +"north.museum\0blogspot.com.ee\0" +"blogspot.com.eg\0" +"hachijo.tokyo.jp\0unicloud.pl\0" }; static const quint16 tldChunkCount = 2; -static const quint32 tldChunks[] = {65530, 108837}; +static const quint32 tldChunks[] = {65521, 109928}; QT_END_NAMESPACE diff --git a/src/corelib/io/qwindowspipereader.cpp b/src/corelib/io/qwindowspipereader.cpp index c2090976..39e12997 100644 --- a/src/corelib/io/qwindowspipereader.cpp +++ b/src/corelib/io/qwindowspipereader.cpp @@ -193,11 +193,11 @@ void QWindowsPipeReader::notified(DWORD errorCode, DWORD numberOfBytesRead) actualReadBufferSize += numberOfBytesRead; readBuffer.truncate(actualReadBufferSize); - startAsyncRead(); if (!readyReadPending) { readyReadPending = true; emit _q_queueReadyRead(QWindowsPipeReader::QPrivateSignal()); } + startAsyncRead(); } /*! diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index 3a79c502..997a634e 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -3196,9 +3196,8 @@ bool QAbstractItemModel::beginMoveColumns(const QModelIndex &sourceParent, int s destinationChange.needsAdjust = destinationParent.isValid() && destinationParent.row() >= sourceLast && destinationParent.parent() == sourceParent; d->changes.push(destinationChange); - d->itemsAboutToBeMoved(sourceParent, sourceFirst, sourceLast, destinationParent, destinationChild, Qt::Horizontal); - emit columnsAboutToBeMoved(sourceParent, sourceFirst, sourceLast, destinationParent, destinationChild, QPrivateSignal()); + d->itemsAboutToBeMoved(sourceParent, sourceFirst, sourceLast, destinationParent, destinationChild, Qt::Horizontal); return true; } @@ -3231,7 +3230,6 @@ void QAbstractItemModel::endMoveColumns() adjustedSource = createIndex(adjustedSource.row(), adjustedSource.column() + numMoved, adjustedSource.internalPointer()); d->itemsMoved(adjustedSource, removeChange.first, removeChange.last, adjustedDestination, insertChange.first, Qt::Horizontal); - emit columnsMoved(adjustedSource, removeChange.first, removeChange.last, adjustedDestination, insertChange.first, QPrivateSignal()); } diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp index dc6379d9..3d7fe43c 100644 --- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp +++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp @@ -2601,9 +2601,12 @@ void QSortFilterProxyModel::sort(int column, Qt::SortOrder order) /*! \since 4.5 - \brief the column currently used for sorting + \return the column currently used for sorting - This returns the most recently used sort column. + This returns the most recently used sort column. The default value is -1, + which means that this proxy model does not sort. + + \sa sort() */ int QSortFilterProxyModel::sortColumn() const { @@ -2613,9 +2616,12 @@ int QSortFilterProxyModel::sortColumn() const /*! \since 4.5 - \brief the order currently used for sorting + \return the order currently used for sorting - This returns the most recently used sort order. + This returns the most recently used sort order. The default value is + Qt::AscendingOrder. + + \sa sort() */ Qt::SortOrder QSortFilterProxyModel::sortOrder() const { @@ -2890,6 +2896,8 @@ void QSortFilterProxyModel::setFilterFixedString(const QString &pattern) QComboBox. The default value is true. + + \sa sortColumn() */ bool QSortFilterProxyModel::dynamicSortFilter() const { diff --git a/src/corelib/kernel/qcore_mac.mm b/src/corelib/kernel/qcore_mac.mm index e774cebc..99ad4ce6 100644 --- a/src/corelib/kernel/qcore_mac.mm +++ b/src/corelib/kernel/qcore_mac.mm @@ -117,7 +117,7 @@ bool AppleUnifiedLogger::messageHandler(QtMsgType msgType, const QMessageLogCont const bool isDefault = !context.category || !strcmp(context.category, "default"); os_log_t log = isDefault ? OS_LOG_DEFAULT : - cachedLog(subsystem, QString::fromLatin1(context.category)); + os_log_create(subsystem.toLatin1().constData(), context.category); os_log_type_t logType = logTypeForMessageType(msgType); if (!os_log_type_enabled(log, logType)) @@ -153,29 +153,6 @@ os_log_type_t AppleUnifiedLogger::logTypeForMessageType(QtMsgType msgType) return OS_LOG_TYPE_DEFAULT; } -os_log_t AppleUnifiedLogger::cachedLog(const QString &subsystem, const QString &category) -{ - static QBasicMutex mutex; - const auto locker = qt_scoped_lock(mutex); - - static QHash, os_log_t> logs; - const auto cacheKey = qMakePair(subsystem, category); - os_log_t log = logs.value(cacheKey); - - if (!log) { - log = os_log_create(subsystem.toLatin1().constData(), - category.toLatin1().constData()); - logs.insert(cacheKey, log); - - // Technically we should release the os_log_t resource when done - // with it, but since we don't know when a category is disabled - // we keep all cached os_log_t instances until shutdown, where - // the OS will clean them up for us. - } - - return log; -} - #endif // QT_USE_APPLE_UNIFIED_LOGGING // ------------------------------------------------------------------------- diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index ca2864df..2a2dcc72 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -2052,6 +2052,8 @@ void QCoreApplication::quit() The function returns \c true on success and false on failure. + \note QCoreApplication does \e not take ownership of \a translationFile. + \sa removeTranslator(), translate(), QTranslator::load(), {Dynamic Translation} */ diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index e3326f00..b4975320 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -421,6 +421,8 @@ struct QBasicAtomicBitField { QBasicAtomicInteger next; QBasicAtomicInteger data[NumInts]; + constexpr QBasicAtomicBitField() = default; + bool allocateSpecific(int which) noexcept { QBasicAtomicInteger &entry = data[which / BitsPerInt]; @@ -461,7 +463,7 @@ struct QBasicAtomicBitField { typedef QBasicAtomicBitField UserEventTypeRegistry; -static UserEventTypeRegistry userEventTypeRegistry; +static UserEventTypeRegistry userEventTypeRegistry {}; static inline int registerEventTypeZeroBased(int id) noexcept { diff --git a/src/corelib/kernel/qelapsedtimer.cpp b/src/corelib/kernel/qelapsedtimer.cpp index 57825583..230bcac3 100644 --- a/src/corelib/kernel/qelapsedtimer.cpp +++ b/src/corelib/kernel/qelapsedtimer.cpp @@ -111,18 +111,6 @@ QT_BEGIN_NAMESPACE that the clock used is the same as QElapsedTimer (see QElapsedTimer::clockType()). - \section2 32-bit overflows - - Some of the clocks used by QElapsedTimer have a limited range and may - overflow after hitting the upper limit (usually 32-bit). QElapsedTimer - deals with this overflow issue and presents a consistent timing. However, - when extracting the time since reference from QElapsedTimer, two - different processes in the same machine may have different understanding - of how much time has actually elapsed. - - The information on which clocks types may overflow and how to remedy that - issue is documented along with the clock types. - \sa QTime, QTimer, QDeadlineTimer */ @@ -138,10 +126,13 @@ QT_BEGIN_NAMESPACE used. \value SystemTime The human-readable system time. This clock is not monotonic. - \value MonotonicClock The system's monotonic clock, usually found in Unix systems. This clock is monotonic and does not overflow. - \value TickCounter The system's tick counter, used on Windows systems. This clock may overflow. - \value MachAbsoluteTime The Mach kernel's absolute time (\macos and iOS). This clock is monotonic and does not overflow. - \value PerformanceCounter The high-resolution performance counter provided by Windows. This clock is monotonic and does not overflow. + \value MonotonicClock The system's monotonic clock, usually found in Unix systems. + This clock is monotonic. + \value TickCounter Not used anymore. + \value MachAbsoluteTime The Mach kernel's absolute time (\macos and iOS). + This clock is monotonic. + \value PerformanceCounter The performance counter provided by Windows. + This clock is monotonic. \section2 SystemTime @@ -159,26 +150,6 @@ QT_BEGIN_NAMESPACE arbitrary point in the past. This clock type is used on Unix systems which support POSIX monotonic clocks (\tt{_POSIX_MONOTONIC_CLOCK}). - This clock does not overflow. - - \section2 TickCounter - - The tick counter clock type is based on the system's or the processor's - tick counter, multiplied by the duration of a tick. This clock type is - used on Windows platforms. If the high-precision performance - counter is available on Windows, the \tt{PerformanceCounter} clock type - is used instead. - - The TickCounter clock type is the only clock type that may overflow. - Windows Vista and Windows Server 2008 support the extended 64-bit tick - counter, which allows avoiding the overflow. - - On Windows systems, the clock overflows after 2^32 milliseconds, which - corresponds to roughly 49.7 days. This means two processes' reckoning of - the time since the reference may be different by multiples of 2^32 - milliseconds. When comparing such values, it's recommended that the high - 32 bits of the millisecond count be masked off. - \section2 MachAbsoluteTime This clock type is based on the absolute time presented by Mach kernels, @@ -187,17 +158,14 @@ QT_BEGIN_NAMESPACE a POSIX monotonic clock with values differing from the Mach absolute time. - This clock is monotonic and does not overflow. + This clock is monotonic. \section2 PerformanceCounter This clock uses the Windows functions \tt{QueryPerformanceCounter} and - \tt{QueryPerformanceFrequency} to access the system's high-precision - performance counter. Since this counter may not be available on all - systems, QElapsedTimer will fall back to the \tt{TickCounter} clock - automatically, if this clock cannot be used. + \tt{QueryPerformanceFrequency} to access the system's performance counter. - This clock is monotonic and does not overflow. + This clock is monotonic. \sa clockType(), isMonotonic() */ diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index b249d37a..c9d0f036 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -275,6 +275,8 @@ LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPA void QEventDispatcherWin32Private::startPostedEventsTimer() { + // we received WM_QT_SENDPOSTEDEVENTS, so allow posting it again + wakeUps.storeRelaxed(0); if (sendPostedEventsTimerId == 0) { // Start a timer to deliver posted events when the message queue is emptied. sendPostedEventsTimerId = SetTimer(internalHwnd, SendPostedEventsTimerId, diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 1eb79138..d57bcc31 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -2460,6 +2460,7 @@ static bool check_method_code(int code, const QObject *object, return true; } +Q_DECL_COLD_FUNCTION static void err_method_notfound(const QObject *object, const char *method, const char *func) { @@ -2481,6 +2482,7 @@ static void err_method_notfound(const QObject *object, } +Q_DECL_COLD_FUNCTION static void err_info_about_objects(const char * func, const QObject * sender, const QObject * receiver) diff --git a/src/corelib/kernel/qsharedmemory_p.h b/src/corelib/kernel/qsharedmemory_p.h index e6e989ab..0c133750 100644 --- a/src/corelib/kernel/qsharedmemory_p.h +++ b/src/corelib/kernel/qsharedmemory_p.h @@ -56,14 +56,20 @@ #include #ifdef QT_NO_SHAREDMEMORY -# ifndef QT_NO_SYSTEMSEMAPHORE +# ifndef QT_NO_SYSTEMSEMAPHORE + +QT_BEGIN_NAMESPACE + namespace QSharedMemoryPrivate { int createUnixKeyFile(const QString &fileName); QString makePlatformSafeKey(const QString &key, const QString &prefix = QLatin1String("qipc_sharedmemory_")); } -#endif + +QT_END_NAMESPACE + +# endif #else #include "qsystemsemaphore.h" diff --git a/src/corelib/kernel/qsharedmemory_systemv.cpp b/src/corelib/kernel/qsharedmemory_systemv.cpp index 0ba5f656..b9adb430 100644 --- a/src/corelib/kernel/qsharedmemory_systemv.cpp +++ b/src/corelib/kernel/qsharedmemory_systemv.cpp @@ -109,7 +109,7 @@ key_t QSharedMemoryPrivate::handle() 0 already existed 1 created */ -int QSharedMemoryPrivate::createUnixKeyFile(const QString &fileName) +int QT_PREPEND_NAMESPACE(QSharedMemoryPrivate)::createUnixKeyFile(const QString &fileName) { int fd = qt_safe_open(QFile::encodeName(fileName).constData(), O_EXCL | O_CREAT | O_RDWR, 0640); diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index 25ce0c03..79c7b262 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -222,6 +222,8 @@ void QTimer::start() If \l singleShot is true, the timer will be activated only once. + \note Keeping the event loop busy with a zero-timer is bound to + cause trouble and highly erratic behavior of the UI. */ void QTimer::start(int msec) { diff --git a/src/corelib/mimetypes/qmimeglobpattern.cpp b/src/corelib/mimetypes/qmimeglobpattern.cpp index a81112d2..b1de8907 100644 --- a/src/corelib/mimetypes/qmimeglobpattern.cpp +++ b/src/corelib/mimetypes/qmimeglobpattern.cpp @@ -94,7 +94,7 @@ QMimeGlobPattern::PatternType QMimeGlobPattern::detectPatternType(const QString if (!patternLength) return OtherPattern; - const bool starCount = pattern.count(QLatin1Char('*')) == 1; + const int starCount = pattern.count(QLatin1Char('*')); const bool hasSquareBracket = pattern.indexOf(QLatin1Char('[')) != -1; const bool hasQuestionMark = pattern.indexOf(QLatin1Char('?')) != -1; @@ -106,10 +106,10 @@ QMimeGlobPattern::PatternType QMimeGlobPattern::detectPatternType(const QString // Patterns like "README*" (well this is currently the only one like that...) if (pattern.at(patternLength - 1) == QLatin1Char('*')) return PrefixPattern; - } - // Names without any wildcards like "README" - if (starCount == 0) + } else if (starCount == 0) { + // Names without any wildcards like "README" return LiteralPattern; + } } if (pattern == QLatin1String("[0-9][0-9][0-9].vdr")) diff --git a/src/corelib/mimetypes/qmimetype.cpp b/src/corelib/mimetypes/qmimetype.cpp index de450c68..0c0de639 100644 --- a/src/corelib/mimetypes/qmimetype.cpp +++ b/src/corelib/mimetypes/qmimetype.cpp @@ -529,3 +529,5 @@ QDebug operator<<(QDebug debug, const QMimeType &mime) #endif QT_END_NAMESPACE + +#include "moc_qmimetype.cpp" diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index 739947ce..5d2f0242 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -807,11 +807,11 @@ void QLibraryPrivate::updatePluginState() debug ? "debug" : "release"); } errorString = QLibrary::tr("The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]") - .arg(fileName) - .arg((qt_version&0xff0000) >> 16) - .arg((qt_version&0xff00) >> 8) - .arg(qt_version&0xff) - .arg(debug ? QLatin1String("debug") : QLatin1String("release")); + .arg(fileName, + QString::number((qt_version & 0xff0000) >> 16), + QString::number((qt_version & 0xff00) >> 8), + QString::number(qt_version & 0xff), + debug ? QLatin1String("debug") : QLatin1String("release")); #ifndef QT_NO_DEBUG_PLUGIN_CHECK } else if(debug != QLIBRARY_AS_DEBUG) { //don't issue a qWarning since we will hopefully find a non-debug? --Sam diff --git a/src/corelib/serialization/qbinaryjson.cpp b/src/corelib/serialization/qbinaryjson.cpp index 3d359f09..8c16178c 100644 --- a/src/corelib/serialization/qbinaryjson.cpp +++ b/src/corelib/serialization/qbinaryjson.cpp @@ -64,17 +64,17 @@ void MutableData::compact() Base *base = header->root(); int reserve = 0; - if (base->is_object) { + if (base->isObject()) { auto *o = static_cast(base); - for (uint i = 0; i < o->length; ++i) + for (uint i = 0; i < o->length(); ++i) reserve += o->entryAt(i)->usedStorage(o); } else { auto *a = static_cast(base); - for (uint i = 0; i < a->length; ++i) + for (uint i = 0; i < a->length(); ++i) reserve += a->at(i)->usedStorage(a); } - uint size = sizeof(Base) + reserve + base->length * sizeof(offset); + uint size = sizeof(Base) + reserve + base->length() * sizeof(offset); uint alloc = sizeof(Header) + size; auto *h = reinterpret_cast
(malloc(alloc)); Q_CHECK_PTR(h); @@ -82,16 +82,19 @@ void MutableData::compact() h->version = 1; Base *b = h->root(); b->size = size; - b->is_object = header->root()->is_object; - b->length = base->length; + if (header->root()->isObject()) + b->setIsObject(); + else + b->setIsArray(); + b->setLength(base->length()); b->tableOffset = reserve + sizeof(Array); uint offset = sizeof(Base); - if (b->is_object) { + if (b->isObject()) { const auto *o = static_cast(base); auto *no = static_cast(b); - for (uint i = 0; i < o->length; ++i) { + for (uint i = 0; i < o->length(); ++i) { no->table()[i] = offset; const Entry *e = o->entryAt(i); @@ -102,7 +105,7 @@ void MutableData::compact() uint dataSize = e->value.usedStorage(o); if (dataSize) { memcpy(reinterpret_cast(no) + offset, e->value.data(o), dataSize); - ne->value.value = offset; + ne->value.setValue(offset); offset += dataSize; } } @@ -110,14 +113,14 @@ void MutableData::compact() const auto *a = static_cast(base); auto *na = static_cast(b); - for (uint i = 0; i < a->length; ++i) { + for (uint i = 0; i < a->length(); ++i) { const Value *v = a->at(i); Value *nv = na->at(i); *nv = *v; uint dataSize = v->usedStorage(a); if (dataSize) { memcpy(reinterpret_cast(na) + offset, v->data(a), dataSize); - nv->value = offset; + nv->setValue(offset); offset += dataSize; } } @@ -137,7 +140,7 @@ bool ConstData::isValid() const const Base *root = header->root(); const uint maxSize = alloc - sizeof(Header); - return root->is_object + return root->isObject() ? static_cast(root)->isValid(maxSize) : static_cast(root)->isValid(maxSize); } @@ -145,14 +148,14 @@ bool ConstData::isValid() const QJsonDocument ConstData::toJsonDocument() const { const Base *root = header->root(); - return root->is_object + return root->isObject() ? QJsonDocument(static_cast(root)->toJsonObject()) : QJsonDocument(static_cast(root)->toJsonArray()); } uint Base::reserveSpace(uint dataSize, uint posInTable, uint numItems, bool replace) { - Q_ASSERT(posInTable <= length); + Q_ASSERT(posInTable <= length()); if (size + dataSize >= Value::MaxSize) { qWarning("QJson: Document too large to store in data structure %d %d %d", uint(size), dataSize, Value::MaxSize); @@ -162,10 +165,10 @@ uint Base::reserveSpace(uint dataSize, uint posInTable, uint numItems, bool repl offset off = tableOffset; // move table to new position if (replace) { - memmove(reinterpret_cast(table()) + dataSize, table(), length * sizeof(offset)); + memmove(reinterpret_cast(table()) + dataSize, table(), length() * sizeof(offset)); } else { memmove(reinterpret_cast(table() + posInTable + numItems) + dataSize, - table() + posInTable, (length - posInTable) * sizeof(offset)); + table() + posInTable, (length() - posInTable) * sizeof(offset)); memmove(reinterpret_cast(table()) + dataSize, table(), posInTable * sizeof(offset)); } tableOffset += dataSize; @@ -173,7 +176,7 @@ uint Base::reserveSpace(uint dataSize, uint posInTable, uint numItems, bool repl table()[posInTable + i] = off; size += dataSize; if (!replace) { - length += numItems; + setLength(length() + numItems); size += numItems * sizeof(offset); } return off; @@ -182,7 +185,7 @@ uint Base::reserveSpace(uint dataSize, uint posInTable, uint numItems, bool repl uint Object::indexOf(QStringView key, bool *exists) const { uint min = 0; - uint n = length; + uint n = length(); while (n > 0) { uint half = n >> 1; uint middle = min + half; @@ -193,7 +196,7 @@ uint Object::indexOf(QStringView key, bool *exists) const n -= half + 1; } } - if (min < length && *entryAt(min) == key) { + if (min < length() && *entryAt(min) == key) { *exists = true; return min; } @@ -204,7 +207,7 @@ uint Object::indexOf(QStringView key, bool *exists) const QJsonObject Object::toJsonObject() const { QJsonObject object; - for (uint i = 0; i < length; ++i) { + for (uint i = 0; i < length(); ++i) { const Entry *e = entryAt(i); object.insert(e->key(), e->value.toJsonValue(this)); } @@ -213,11 +216,11 @@ QJsonObject Object::toJsonObject() const bool Object::isValid(uint maxSize) const { - if (size > maxSize || tableOffset + length * sizeof(offset) > size) + if (size > maxSize || tableOffset + length() * sizeof(offset) > size) return false; QString lastKey; - for (uint i = 0; i < length; ++i) { + for (uint i = 0; i < length(); ++i) { if (table()[i] + sizeof(Entry) >= tableOffset) return false; const Entry *e = entryAt(i); @@ -237,18 +240,18 @@ QJsonArray Array::toJsonArray() const { QJsonArray array; const offset *values = table(); - for (uint i = 0; i < length; ++i) + for (uint i = 0; i < length(); ++i) array.append(reinterpret_cast(values + i)->toJsonValue(this)); return array; } bool Array::isValid(uint maxSize) const { - if (size > maxSize || tableOffset + length * sizeof(offset) > size) + if (size > maxSize || tableOffset + length() * sizeof(offset) > size) return false; const offset *values = table(); - for (uint i = 0; i < length; ++i) { + for (uint i = 0; i < length(); ++i) { if (!reinterpret_cast(values + i)->isValid(this)) return false; } @@ -258,14 +261,14 @@ bool Array::isValid(uint maxSize) const uint Value::usedStorage(const Base *b) const { uint s = 0; - switch (type) { + switch (type()) { case QJsonValue::Double: - if (!latinOrIntValue) + if (!isLatinOrIntValue()) s = sizeof(double); break; case QJsonValue::String: { const char *d = data(b); - s = latinOrIntValue + s = isLatinOrIntValue() ? (sizeof(ushort) + qFromLittleEndian(*reinterpret_cast(d))) : (sizeof(int) @@ -286,7 +289,7 @@ uint Value::usedStorage(const Base *b) const QJsonValue Value::toJsonValue(const Base *b) const { - switch (type) { + switch (type()) { case QJsonValue::Null: return QJsonValue(QJsonValue::Null); case QJsonValue::Bool: @@ -314,24 +317,24 @@ inline bool isValidValueOffset(uint offset, uint tableOffset) bool Value::isValid(const Base *b) const { - switch (type) { + switch (type()) { case QJsonValue::Null: case QJsonValue::Bool: return true; case QJsonValue::Double: - return latinOrIntValue || isValidValueOffset(value, b->tableOffset); + return isLatinOrIntValue() || isValidValueOffset(value(), b->tableOffset); case QJsonValue::String: - if (!isValidValueOffset(value, b->tableOffset)) + if (!isValidValueOffset(value(), b->tableOffset)) return false; - if (latinOrIntValue) - return asLatin1String(b).isValid(b->tableOffset - value); - return asString(b).isValid(b->tableOffset - value); + if (isLatinOrIntValue()) + return asLatin1String(b).isValid(b->tableOffset - value()); + return asString(b).isValid(b->tableOffset - value()); case QJsonValue::Array: - return isValidValueOffset(value, b->tableOffset) - && static_cast(base(b))->isValid(b->tableOffset - value); + return isValidValueOffset(value(), b->tableOffset) + && static_cast(base(b))->isValid(b->tableOffset - value()); case QJsonValue::Object: - return isValidValueOffset(value, b->tableOffset) - && static_cast(base(b))->isValid(b->tableOffset - value); + return isValidValueOffset(value(), b->tableOffset) + && static_cast(base(b))->isValid(b->tableOffset - value()); default: return false; } diff --git a/src/corelib/serialization/qbinaryjson_p.h b/src/corelib/serialization/qbinaryjson_p.h index 132c36f2..6502f1fb 100644 --- a/src/corelib/serialization/qbinaryjson_p.h +++ b/src/corelib/serialization/qbinaryjson_p.h @@ -136,11 +136,15 @@ using qle_ushort = q_littleendian; using qle_int = q_littleendian; using qle_uint = q_littleendian; -template -using qle_bitfield = QLEIntegerBitfield; +template +using qle_bitfield = QLEIntegerBitfieldUnion; template -using qle_signedbitfield = QLEIntegerBitfield; +using qle_bitfield_accessor + = QSpecialIntegerAccessor, pos, width>; +template +using qle_signedbitfield_accessor + = QSpecialIntegerAccessor, pos, width, int>; using offset = qle_uint; @@ -316,19 +320,24 @@ static inline void copyString(char *dest, QStringView str, bool compress) */ class Base { +private: + using IsObjectAccessor = qle_bitfield_accessor<0, 1>; + using LengthAccessor = qle_bitfield_accessor<1, 31>; public: qle_uint size; - union { - uint _dummy; - qle_bitfield<0, 1> is_object; - qle_bitfield<1, 31> length; - }; + qle_bitfield isObjectAndLength; offset tableOffset; // content follows here - bool isObject() const { return !!is_object; } + void setIsObject() { isObjectAndLength.set(1); } + bool isObject() const { return !!isObjectAndLength.get(); } + + void setIsArray() { isObjectAndLength.set(0); } bool isArray() const { return !isObject(); } + void setLength(uint length) { isObjectAndLength.set(length); } + uint length() const { return isObjectAndLength.get(); } + offset *table() { return reinterpret_cast(reinterpret_cast(this) + tableOffset); @@ -372,39 +381,46 @@ public: class Value { +private: + using TypeAccessor = qle_bitfield_accessor<0, 3>; + using LatinOrIntValueAccessor = qle_bitfield_accessor<3, 1>; + using LatinKeyAccessor = qle_bitfield_accessor<4, 1>; + using ValueAccessor = qle_bitfield_accessor<5, 27>; + using IntValueAccessor = qle_signedbitfield_accessor<5, 27>; + qle_bitfield< + TypeAccessor, + LatinOrIntValueAccessor, + LatinKeyAccessor, + ValueAccessor, + IntValueAccessor + > m_data; + int intValue() const { return m_data.get(); } + public: enum { MaxSize = (1 << 27) - 1 }; - union { - uint _dummy; - qle_bitfield<0, 3> type; - qle_bitfield<3, 1> latinOrIntValue; - qle_bitfield<4, 1> latinKey; - qle_bitfield<5, 27> value; - qle_signedbitfield<5, 27> int_value; - }; inline const char *data(const Base *b) const { - return reinterpret_cast(b) + value; + return reinterpret_cast(b) + value(); } uint usedStorage(const Base *b) const; bool toBoolean() const { - Q_ASSERT(type == QJsonValue::Bool); - return value != 0; + Q_ASSERT(type() == QJsonValue::Bool); + return value() != 0; } double toDouble(const Base *b) const { - Q_ASSERT(type == QJsonValue::Double); - if (latinOrIntValue) - return int_value; + Q_ASSERT(type() == QJsonValue::Double); + if (isLatinOrIntValue()) + return intValue(); - auto i = qFromLittleEndian(reinterpret_cast(b) + value); + auto i = qFromLittleEndian(reinterpret_cast(b) + value()); double d; memcpy(&d, &i, sizeof(double)); return d; @@ -412,26 +428,26 @@ public: QString toString(const Base *b) const { - return latinOrIntValue + return isLatinOrIntValue() ? asLatin1String(b).toString() : asString(b).toString(); } String asString(const Base *b) const { - Q_ASSERT(type == QJsonValue::String && !latinOrIntValue); + Q_ASSERT(type() == QJsonValue::String && !isLatinOrIntValue()); return String(data(b)); } Latin1String asLatin1String(const Base *b) const { - Q_ASSERT(type == QJsonValue::String && latinOrIntValue); + Q_ASSERT(type() == QJsonValue::String && isLatinOrIntValue()); return Latin1String(data(b)); } const Base *base(const Base *b) const { - Q_ASSERT(type == QJsonValue::Array || type == QJsonValue::Object); + Q_ASSERT(type() == QJsonValue::Array || type() == QJsonValue::Object); return reinterpret_cast(data(b)); } @@ -441,6 +457,15 @@ public: static uint requiredStorage(const QBinaryJsonValue &v, bool *compressed); static uint valueToStore(const QBinaryJsonValue &v, uint offset); static void copyData(const QBinaryJsonValue &v, char *dest, bool compressed); + + void setIsLatinKey(bool isLatinKey) { m_data.set(isLatinKey); } + bool isLatinKey() const { return m_data.get(); } + void setIsLatinOrIntValue(bool v) { m_data.set(v); } + bool isLatinOrIntValue() const { return m_data.get(); } + void setType(uint type) { m_data.set(type); } + uint type() const { return m_data.get(); } + void setValue(uint value) { m_data.set(value); } + uint value() const { return m_data.get(); } }; class Entry { @@ -452,7 +477,7 @@ public: uint size() const { uint s = sizeof(Entry); - if (value.latinKey) + if (value.isLatinKey()) s += shallowLatin1Key().byteSize(); else s += shallowKey().byteSize(); @@ -466,19 +491,19 @@ public: String shallowKey() const { - Q_ASSERT(!value.latinKey); + Q_ASSERT(!value.isLatinKey()); return String(reinterpret_cast(this) + sizeof(Entry)); } Latin1String shallowLatin1Key() const { - Q_ASSERT(value.latinKey); + Q_ASSERT(value.isLatinKey()); return Latin1String(reinterpret_cast(this) + sizeof(Entry)); } QString key() const { - return value.latinKey + return value.isLatinKey() ? shallowLatin1Key().toString() : shallowKey().toString(); } @@ -488,21 +513,21 @@ public: if (maxSize < sizeof(Entry)) return false; maxSize -= sizeof(Entry); - return value.latinKey + return value.isLatinKey() ? shallowLatin1Key().isValid(maxSize) : shallowKey().isValid(maxSize); } bool operator ==(QStringView key) const { - return value.latinKey + return value.isLatinKey() ? (shallowLatin1Key().toQLatin1String() == key) : (shallowKey() == key); } bool operator >=(QStringView key) const { - return value.latinKey + return value.isLatinKey() ? (shallowLatin1Key().toQLatin1String() >= key) : (shallowKey().toString() >= key); } @@ -560,9 +585,12 @@ public: header->version = 1; Base *b = header->root(); b->size = sizeof(Base); - b->is_object = (valueType == QJsonValue::Object); + if (valueType == QJsonValue::Object) + b->setIsObject(); + else + b->setIsArray(); b->tableOffset = sizeof(Base); - b->length = 0; + b->setLength(0); } ~MutableData() diff --git a/src/corelib/serialization/qbinaryjsonarray.cpp b/src/corelib/serialization/qbinaryjsonarray.cpp index 68937fe1..dfbe94db 100644 --- a/src/corelib/serialization/qbinaryjsonarray.cpp +++ b/src/corelib/serialization/qbinaryjsonarray.cpp @@ -63,7 +63,7 @@ QBinaryJsonArray QBinaryJsonArray::fromJsonArray(const QJsonArray &array) void QBinaryJsonArray::append(const QBinaryJsonValue &value) { - const uint i = a ? a->length : 0; + const uint i = a ? a->length() : 0; bool compressed; uint valueSize = QBinaryJsonPrivate::Value::requiredStorage(value, &compressed); @@ -71,7 +71,7 @@ void QBinaryJsonArray::append(const QBinaryJsonValue &value) if (!detach(valueSize + sizeof(QBinaryJsonPrivate::Value))) return; - if (!a->length) + if (!a->length()) a->tableOffset = sizeof(QBinaryJsonPrivate::Array); uint valueOffset = a->reserveSpace(valueSize, i, 1, false); @@ -79,10 +79,10 @@ void QBinaryJsonArray::append(const QBinaryJsonValue &value) return; QBinaryJsonPrivate::Value *v = a->at(i); - v->type = (value.t == QJsonValue::Undefined ? QJsonValue::Null : value.t); - v->latinOrIntValue = compressed; - v->latinKey = false; - v->value = QBinaryJsonPrivate::Value::valueToStore(value, valueOffset); + v->setType(value.t == QJsonValue::Undefined ? QJsonValue::Null : value.t); + v->setIsLatinOrIntValue(compressed); + v->setIsLatinKey(false); + v->setValue(QBinaryJsonPrivate::Value::valueToStore(value, valueOffset)); if (valueSize) { QBinaryJsonPrivate::Value::copyData(value, reinterpret_cast(a) + valueOffset, compressed); diff --git a/src/corelib/serialization/qbinaryjsonobject.cpp b/src/corelib/serialization/qbinaryjsonobject.cpp index 3186ab60..a9e83022 100644 --- a/src/corelib/serialization/qbinaryjsonobject.cpp +++ b/src/corelib/serialization/qbinaryjsonobject.cpp @@ -74,7 +74,7 @@ void QBinaryJsonObject::insert(const QString &key, const QBinaryJsonValue &value if (!detach(requiredSize + sizeof(QBinaryJsonPrivate::offset))) // offset for the new index entry return; - if (!o->length) + if (!o->length()) o->tableOffset = sizeof(QBinaryJsonPrivate::Object); bool keyExists = false; @@ -87,18 +87,18 @@ void QBinaryJsonObject::insert(const QString &key, const QBinaryJsonValue &value return; QBinaryJsonPrivate::Entry *e = o->entryAt(pos); - e->value.type = value.t; - e->value.latinKey = latinKey; - e->value.latinOrIntValue = latinOrIntValue; - e->value.value = QBinaryJsonPrivate::Value::valueToStore( - value, reinterpret_cast(e) - reinterpret_cast(o) + valueOffset); + e->value.setType(value.t); + e->value.setIsLatinKey(latinKey); + e->value.setIsLatinOrIntValue(latinOrIntValue); + e->value.setValue(QBinaryJsonPrivate::Value::valueToStore( + value, reinterpret_cast(e) - reinterpret_cast(o) + valueOffset)); QBinaryJsonPrivate::copyString(reinterpret_cast(e + 1), key, latinKey); if (valueSize) { QBinaryJsonPrivate::Value::copyData(value, reinterpret_cast(e) + valueOffset, latinOrIntValue); } - if (d->compactionCounter > 32U && d->compactionCounter >= unsigned(o->length) / 2U) + if (d->compactionCounter > 32U && d->compactionCounter >= unsigned(o->length()) / 2U) compact(); } diff --git a/src/corelib/serialization/qbinaryjsonvalue.cpp b/src/corelib/serialization/qbinaryjsonvalue.cpp index 5e3a01ad..b1636b33 100644 --- a/src/corelib/serialization/qbinaryjsonvalue.cpp +++ b/src/corelib/serialization/qbinaryjsonvalue.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE QBinaryJsonValue::QBinaryJsonValue(QBinaryJsonPrivate::MutableData *data, QBinaryJsonPrivate::Base *parent, const QBinaryJsonPrivate::Value &v) - : t(QJsonValue::Type(uint(v.type))) + : t(QJsonValue::Type(uint(v.type()))) { switch (t) { case QJsonValue::Undefined: diff --git a/src/corelib/serialization/qjsonparser.cpp b/src/corelib/serialization/qjsonparser.cpp index 17e6f111..2e40b6c8 100644 --- a/src/corelib/serialization/qjsonparser.cpp +++ b/src/corelib/serialization/qjsonparser.cpp @@ -379,10 +379,30 @@ error: return QCborValue(); } +// We need to retain the _last_ value for any duplicate keys and we need to deref containers. +// Therefore the manual implementation of std::unique(). +template +static Iterator customAssigningUniqueLast(Iterator first, Iterator last, + Compare compare, Assign assign) +{ + first = std::adjacent_find(first, last, compare); + if (first == last) + return last; + + Iterator result = first; + while (++first != last) { + if (!compare(*result, *first)) + ++result; + if (result != first) + assign(*result, *first); + } + + return ++result; +} + static void sortContainer(QCborContainerPrivate *container) { using Forward = QJsonPrivate::KeyIterator; - using Reverse = std::reverse_iterator; using Value = Forward::value_type; auto compare = [container](const Value &a, const Value &b) @@ -420,17 +440,31 @@ static void sortContainer(QCborContainerPrivate *container) } }; - std::sort(Forward(container->elements.begin()), Forward(container->elements.end()), - [&compare](const Value &a, const Value &b) { return compare(a, b) < 0; }); + // The elements' containers are owned by the outer container, not by the elements themselves. + auto move = [](Forward::reference target, Forward::reference source) + { + QtCbor::Element &targetValue = target.value(); - // We need to retain the _last_ value for any duplicate keys. Therefore the reverse dance here. - auto it = std::unique(Reverse(container->elements.end()), Reverse(container->elements.begin()), - [&compare](const Value &a, const Value &b) { - return compare(a, b) == 0; - }).base().elementsIterator(); + // If the target has a container, deref it before overwriting, so that we don't leak. + if (targetValue.flags & QtCbor::Element::IsContainer) + targetValue.container->deref(); - // The erase from beginning is expensive but hopefully rare. - container->elements.erase(container->elements.begin(), it); + // Do not move, so that we can clear the value afterwards. + target = source; + + // Clear the source value, so that we don't store the same container twice. + source.value() = QtCbor::Element(); + }; + + std::stable_sort( + Forward(container->elements.begin()), Forward(container->elements.end()), + [&compare](const Value &a, const Value &b) { return compare(a, b) < 0; }); + + Forward result = customAssigningUniqueLast( + Forward(container->elements.begin()), Forward(container->elements.end()), + [&compare](const Value &a, const Value &b) { return compare(a, b) == 0; }, move); + + container->elements.erase(result.elementsIterator(), container->elements.end()); } diff --git a/src/corelib/serialization/qjsonvalue.h b/src/corelib/serialization/qjsonvalue.h index 3b5c0545..92dddfaf 100644 --- a/src/corelib/serialization/qjsonvalue.h +++ b/src/corelib/serialization/qjsonvalue.h @@ -232,6 +232,11 @@ public: Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonValue) +inline bool operator==(const QJsonValueRef &lhs, const QJsonValueRef &rhs) +{ return QJsonValue(lhs) == QJsonValue(rhs); } +inline bool operator!=(const QJsonValueRef &lhs, const QJsonValueRef &rhs) +{ return !(lhs == rhs); } + Q_CORE_EXPORT uint qHash(const QJsonValue &value, uint seed = 0); #if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp index b2f84654..7cd457ba 100644 --- a/src/corelib/serialization/qxmlstream.cpp +++ b/src/corelib/serialization/qxmlstream.cpp @@ -980,7 +980,7 @@ inline uint QXmlStreamReaderPrivate::peekChar() bool QXmlStreamReaderPrivate::scanUntil(const char *str, short tokenToInject) { int pos = textBuffer.size(); - int oldLineNumber = lineNumber; + const auto oldLineNumber = lineNumber; uint c; while ((c = getChar()) != StreamEOF) { diff --git a/src/corelib/serialization/qxmlstream.g b/src/corelib/serialization/qxmlstream.g index b623de95..4321fed6 100644 --- a/src/corelib/serialization/qxmlstream.g +++ b/src/corelib/serialization/qxmlstream.g @@ -557,6 +557,7 @@ bool QXmlStreamReaderPrivate::parse() setType(QXmlStreamReader::EndElement); Tag &tag = tagStack_pop(); namespaceUri = tag.namespaceDeclaration.namespaceUri; + prefix = tag.namespaceDeclaration.prefix; name = tag.name; qualifiedName = tag.qualifiedName; isEmptyElement = false; @@ -1617,6 +1618,7 @@ etag ::= LANGLE SLASH qname space_opt RANGLE; Tag &tag = tagStack_pop(); namespaceUri = tag.namespaceDeclaration.namespaceUri; + prefix = tag.namespaceDeclaration.prefix; name = tag.name; qualifiedName = tag.qualifiedName; if (qualifiedName != symName(3)) diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h index 103b123b..e5bde7b9 100644 --- a/src/corelib/serialization/qxmlstream_p.h +++ b/src/corelib/serialization/qxmlstream_p.h @@ -1046,6 +1046,7 @@ bool QXmlStreamReaderPrivate::parse() setType(QXmlStreamReader::EndElement); Tag &tag = tagStack_pop(); namespaceUri = tag.namespaceDeclaration.namespaceUri; + prefix = tag.namespaceDeclaration.prefix; name = tag.name; qualifiedName = tag.qualifiedName; isEmptyElement = false; @@ -1798,6 +1799,7 @@ bool QXmlStreamReaderPrivate::parse() namespaceUri = tag.namespaceDeclaration.namespaceUri; name = tag.name; qualifiedName = tag.qualifiedName; + prefix = tag.namespaceDeclaration.prefix; if (qualifiedName != symName(3)) raiseWellFormedError(QXmlStream::tr("Opening and ending tag mismatch.")); } break; diff --git a/src/corelib/text/qbytearraymatcher.h b/src/corelib/text/qbytearraymatcher.h index f5f9bef7..54a385d6 100644 --- a/src/corelib/text/qbytearraymatcher.h +++ b/src/corelib/text/qbytearraymatcher.h @@ -140,6 +140,7 @@ template class QStaticByteArrayMatcher : QStaticByteArrayMatcherBase { char m_pattern[N]; + // N includes the terminating '\0'! Q_STATIC_ASSERT_X(N > 2, "QStaticByteArrayMatcher makes no sense for finding a single-char pattern"); public: explicit Q_DECL_RELAXED_CONSTEXPR QStaticByteArrayMatcher(const char (&patternToMatch)[N]) noexcept diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index 3e88ab48..8deeae47 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -12312,7 +12312,7 @@ static qsizetype qLastIndexOf(Haystack haystack0, qsizetype from, const auto needle = needle0.data(); const auto *end = haystack; haystack += from; - const std::size_t sl_minus_1 = sl - 1; + const std::size_t sl_minus_1 = sl ? sl - 1 : 0; const auto *n = needle + sl_minus_1; const auto *h = haystack + sl_minus_1; std::size_t hashNeedle = 0, hashHaystack = 0; diff --git a/src/corelib/text/qstringview.h b/src/corelib/text/qstringview.h index cd5bd334..5a317479 100644 --- a/src/corelib/text/qstringview.h +++ b/src/corelib/text/qstringview.h @@ -141,7 +141,7 @@ private: } template - static qsizetype lengthHelperPointer(const Char *str) noexcept + static Q_DECL_RELAXED_CONSTEXPR qsizetype lengthHelperPointer(const Char *str) noexcept { #if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) if (__builtin_constant_p(*str)) { diff --git a/src/corelib/thread/qfuturewatcher.cpp b/src/corelib/thread/qfuturewatcher.cpp index 06bc4740..ecde665e 100644 --- a/src/corelib/thread/qfuturewatcher.cpp +++ b/src/corelib/thread/qfuturewatcher.cpp @@ -511,9 +511,15 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event) Starts watching the given \a future. - One of the signals might be emitted for the current state of the - \a future. For example, if the future is already stopped, the - finished signal will be emitted. + If \a future has already started, the watcher will initially emit signals + that bring their listeners up to date about the future's state. The + following signals will, if applicable, be emitted in the given order: + started(), progressRangeChanged(), progressValueChanged(), + progressTextChanged(), resultsReadyAt(), resultReadyAt(), paused(), + canceled(), and finished(). Of these, resultsReadyAt() and + resultReadyAt() may be emitted several times to cover all available + results. progressValueChanged() and progressTextChanged() will only be + emitted once for the latest available progress value and text. To avoid a race condition, it is important to call this function \e after doing the connections. diff --git a/src/corelib/thread/qorderedmutexlocker_p.h b/src/corelib/thread/qorderedmutexlocker_p.h index 9a9aaefa..30941317 100644 --- a/src/corelib/thread/qorderedmutexlocker_p.h +++ b/src/corelib/thread/qorderedmutexlocker_p.h @@ -91,9 +91,9 @@ public: } QOrderedMutexLocker(QOrderedMutexLocker &&other) noexcept - : mtx1(std::exchange(other.mtx1, nullptr)) - , mtx2(std::exchange(other.mtx2, nullptr)) - , locked(std::exchange(other.locked, false)) + : mtx1(qExchange(other.mtx1, nullptr)) + , mtx2(qExchange(other.mtx2, nullptr)) + , locked(qExchange(other.locked, false)) {} ~QOrderedMutexLocker() diff --git a/src/corelib/thread/qreadwritelock.cpp b/src/corelib/thread/qreadwritelock.cpp index 8c28507d..63637ae0 100644 --- a/src/corelib/thread/qreadwritelock.cpp +++ b/src/corelib/thread/qreadwritelock.cpp @@ -155,7 +155,7 @@ QReadWriteLock::QReadWriteLock(RecursionMode recursionMode) */ QReadWriteLock::~QReadWriteLock() { - auto d = d_ptr.loadRelaxed(); + auto d = d_ptr.loadAcquire(); if (isUncontendedLocked(d)) { qWarning("QReadWriteLock: destroying locked QReadWriteLock"); return; @@ -445,7 +445,7 @@ void QReadWriteLock::unlock() /*! \internal Helper for QWaitCondition::wait */ QReadWriteLock::StateForWaitCondition QReadWriteLock::stateForWaitCondition() const { - QReadWriteLockPrivate *d = d_ptr.loadRelaxed(); + QReadWriteLockPrivate *d = d_ptr.loadAcquire(); switch (quintptr(d) & StateMask) { case StateLockedForRead: return LockedForRead; case StateLockedForWrite: return LockedForWrite; diff --git a/src/corelib/thread/qsemaphore.cpp b/src/corelib/thread/qsemaphore.cpp index 1d01fc1b..3ecdee37 100644 --- a/src/corelib/thread/qsemaphore.cpp +++ b/src/corelib/thread/qsemaphore.cpp @@ -354,7 +354,12 @@ void QSemaphore::release(int n) quintptr nn = unsigned(n); if (futexHasWaiterCount) nn |= quint64(nn) << 32; // token count replicated in high word - quintptr prevValue = u.fetchAndAddRelease(nn); + quintptr prevValue = u.loadRelaxed(); + quintptr newValue; + do { // loop just to ensure the operations are done atomically + newValue = prevValue + nn; + newValue &= (futexNeedsWakeAllBit - 1); + } while (!u.testAndSetRelease(prevValue, newValue, prevValue)); if (futexNeedsWake(prevValue)) { #ifdef FUTEX_OP if (futexHasWaiterCount) { @@ -376,7 +381,6 @@ void QSemaphore::release(int n) quint32 oparg = 0; quint32 cmp = FUTEX_OP_CMP_NE; quint32 cmparg = 0; - u.fetchAndAndRelease(futexNeedsWakeAllBit - 1); futexWakeOp(*futexLow32(&u), n, INT_MAX, *futexHigh32(&u), FUTEX_OP(op, oparg, cmp, cmparg)); return; } @@ -388,7 +392,6 @@ void QSemaphore::release(int n) // its acquisition anyway, so it has to wait; // 2) it did not see the new counter value, in which case its // futexWait will fail. - u.fetchAndAndRelease(futexNeedsWakeAllBit - 1); if (futexHasWaiterCount) { futexWakeAll(*futexLow32(&u)); futexWakeAll(*futexHigh32(&u)); diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h index b2d1628e..f32f6f04 100644 --- a/src/corelib/thread/qthread_p.h +++ b/src/corelib/thread/qthread_p.h @@ -174,7 +174,7 @@ public: int returnCode; uint stackSize; - QThread::Priority priority; + std::underlying_type::type priority; static QThread *threadForId(int id); @@ -213,6 +213,13 @@ public: QCoreApplication::instance()->postEvent(q_ptr, new QEvent(QEvent::Quit)); } } + +#ifndef Q_OS_INTEGRITY +private: + // Used in QThread(Private)::start to avoid racy access to QObject::objectName, + // unset afterwards. On INTEGRITY we set the thread name before starting it. + QString objectName; +#endif }; #else // QT_CONFIG(thread) diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index 56a8e0a0..f6499b38 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -278,6 +278,29 @@ static void setCurrentThreadName(const char *name) } #endif +namespace { +template +void terminate_on_exception(T &&t) +{ +#ifndef QT_NO_EXCEPTIONS + try { +#endif + std::forward(t)(); +#ifndef QT_NO_EXCEPTIONS +#ifdef __GLIBCXX__ + // POSIX thread cancellation under glibc is implemented by throwing an exception + // of this type. Do what libstdc++ is doing and handle it specially in order not to + // abort the application if user's code calls a cancellation function. + } catch (abi::__forced_unwind &) { + throw; +#endif // __GLIBCXX__ + } catch (...) { + qTerminate(); + } +#endif // QT_NO_EXCEPTIONS +} +} // unnamed namespace + void *QThreadPrivate::start(void *arg) { #if !defined(Q_OS_ANDROID) @@ -285,10 +308,7 @@ void *QThreadPrivate::start(void *arg) #endif pthread_cleanup_push(QThreadPrivate::finish, arg); -#ifndef QT_NO_EXCEPTIONS - try -#endif - { + terminate_on_exception([&] { QThread *thr = reinterpret_cast(arg); QThreadData *data = QThreadData::get2(thr); @@ -296,7 +316,7 @@ void *QThreadPrivate::start(void *arg) QMutexLocker locker(&thr->d_func()->mutex); // do we need to reset the thread priority? - if (int(thr->d_func()->priority) & ThreadPriorityResetFlag) { + if (thr->d_func()->priority & ThreadPriorityResetFlag) { thr->d_func()->setPriority(QThread::Priority(thr->d_func()->priority & ~ThreadPriorityResetFlag)); } @@ -316,10 +336,10 @@ void *QThreadPrivate::start(void *arg) // Sets the name of the current thread. We can only do this // when the thread is starting, as we don't have a cross // platform way of setting the name of an arbitrary thread. - if (Q_LIKELY(thr->objectName().isEmpty())) + if (Q_LIKELY(thr->d_func()->objectName.isEmpty())) setCurrentThreadName(thr->metaObject()->className()); else - setCurrentThreadName(thr->objectName().toLocal8Bit()); + setCurrentThreadName(std::exchange(thr->d_func()->objectName, {}).toLocal8Bit()); } #endif @@ -329,20 +349,7 @@ void *QThreadPrivate::start(void *arg) pthread_testcancel(); #endif thr->run(); - } -#ifndef QT_NO_EXCEPTIONS -#ifdef __GLIBCXX__ - // POSIX thread cancellation under glibc is implemented by throwing an exception - // of this type. Do what libstdc++ is doing and handle it specially in order not to - // abort the application if user's code calls a cancellation function. - catch (const abi::__forced_unwind &) { - throw; - } -#endif // __GLIBCXX__ - catch (...) { - qTerminate(); - } -#endif // QT_NO_EXCEPTIONS + }); // This pop runs finish() below. It's outside the try/catch (and has its // own try/catch) to prevent finish() to be run in case an exception is @@ -354,10 +361,7 @@ void *QThreadPrivate::start(void *arg) void QThreadPrivate::finish(void *arg) { -#ifndef QT_NO_EXCEPTIONS - try -#endif - { + terminate_on_exception([&] { QThread *thr = reinterpret_cast(arg); QThreadPrivate *d = thr->d_func(); @@ -389,20 +393,7 @@ void QThreadPrivate::finish(void *arg) d->data->threadId.storeRelaxed(nullptr); d->thread_done.wakeAll(); - } -#ifndef QT_NO_EXCEPTIONS -#ifdef __GLIBCXX__ - // POSIX thread cancellation under glibc is implemented by throwing an exception - // of this type. Do what libstdc++ is doing and handle it specially in order not to - // abort the application if user's code calls a cancellation function. - catch (const abi::__forced_unwind &) { - throw; - } -#endif // __GLIBCXX__ - catch (...) { - qTerminate(); - } -#endif // QT_NO_EXCEPTIONS + }); } @@ -671,7 +662,7 @@ void QThread::start(Priority priority) // could not set scheduling hints, fallback to inheriting them // we'll try again from inside the thread pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED); - d->priority = Priority(priority | ThreadPriorityResetFlag); + d->priority = std::underlying_type::type(priority) | ThreadPriorityResetFlag; } break; } @@ -702,7 +693,10 @@ void QThread::start(Priority priority) pthread_attr_setthreadname(&attr, metaObject()->className()); else pthread_attr_setthreadname(&attr, objectName().toLocal8Bit()); +#else + d->objectName = objectName(); #endif + pthread_t threadId; int code = pthread_create(&threadId, &attr, QThreadPrivate::start, this); if (code == EPERM) { diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp index bc70e317..4e769724 100644 --- a/src/corelib/thread/qthread_win.cpp +++ b/src/corelib/thread/qthread_win.cpp @@ -394,10 +394,9 @@ unsigned int __stdcall QT_ENSURE_STACK_ALIGNED_FOR_SSE QThreadPrivate::start(voi #if !defined(QT_NO_DEBUG) && defined(Q_CC_MSVC) && !defined(Q_OS_WINRT) // sets the name of the current thread. - QByteArray objectName = thr->objectName().toLocal8Bit(); - qt_set_thread_name(HANDLE(-1), - objectName.isEmpty() ? - thr->metaObject()->className() : objectName.constData()); + qt_set_thread_name(HANDLE(-1), thr->d_func()->objectName.isEmpty() + ? thr->metaObject()->className() + : std::exchange(thr->d_func()->objectName, {}).toLocal8Bit().constData()); #endif emit thr->started(QThread::QPrivateSignal()); @@ -503,6 +502,7 @@ void QThread::start(Priority priority) if (d->running) return; + d->objectName = objectName(); d->running = true; d->finished = false; d->exited = false; @@ -548,7 +548,7 @@ void QThread::start(Priority priority) int prio; d->priority = priority; - switch (d->priority) { + switch (priority) { case IdlePriority: prio = THREAD_PRIORITY_IDLE; break; @@ -686,7 +686,7 @@ void QThreadPrivate::setPriority(QThread::Priority threadPriority) int prio; priority = threadPriority; - switch (priority) { + switch (threadPriority) { case QThread::IdlePriority: prio = THREAD_PRIORITY_IDLE; break; diff --git a/src/corelib/time/qcalendar.cpp b/src/corelib/time/qcalendar.cpp index 62b32370..076b401c 100644 --- a/src/corelib/time/qcalendar.cpp +++ b/src/corelib/time/qcalendar.cpp @@ -1296,3 +1296,7 @@ QStringList QCalendar::availableCalendars() } QT_END_NAMESPACE + +#ifndef QT_BOOTSTRAPPED +#include "moc_qcalendar.cpp" +#endif diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp index ec12569e..c1952f9b 100644 --- a/src/corelib/time/qdatetime.cpp +++ b/src/corelib/time/qdatetime.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Copyright (C) 2016 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** @@ -75,6 +75,7 @@ #include "qcalendar.h" #include "qgregoriancalendar_p.h" +#include "private/qnumeric_p.h" QT_BEGIN_NAMESPACE @@ -89,6 +90,7 @@ enum { MSECS_PER_HOUR = 3600000, SECS_PER_MIN = 60, MSECS_PER_MIN = 60000, + MSECS_PER_SEC = 1000, TIME_T_MAX = 2145916799, // int maximum 2037-12-31T23:59:59 UTC JULIAN_DAY_FOR_EPOCH = 2440588 // result of julianDayFromDate(1970, 1, 1) }; @@ -1429,9 +1431,11 @@ QDate QDate::addDays(qint64 ndays) const if (isNull()) return QDate(); - // Due to limits on minJd() and maxJd() we know that any overflow - // will be invalid and caught by fromJulianDay(). - return fromJulianDay(jd + ndays); + qint64 r; + if (Q_UNLIKELY(add_overflow(jd, ndays, &r))) + return QDate(); + else + return fromJulianDay(r); } /*! @@ -4529,7 +4533,7 @@ QString QDateTime::toString(const QString &format, QCalendar cal) const #endif // datestring -static inline void massageAdjustedDateTime(const QDateTimeData &d, QDate *date, QTime *time) +static inline void massageAdjustedDateTime(QDateTimeData &d, QDate *date, QTime *time) { /* If we have just adjusted to a day with a DST transition, our given time @@ -4544,16 +4548,44 @@ static inline void massageAdjustedDateTime(const QDateTimeData &d, QDate *date, answers do then differ only in DST-ness.) */ auto spec = getSpec(d); + if (spec == Qt::OffsetFromUTC || spec == Qt::UTC) { + setDateTime(d, *date, *time); + checkValidDateTime(d); + return; + } + auto dst = extractDaylightStatus(getStatus(d)); + qint64 utc = 0; + qint64 local = timeToMSecs(*date, *time); if (spec == Qt::LocalTime) { - QDateTimePrivate::DaylightStatus status = QDateTimePrivate::UnknownDaylightTime; - localMSecsToEpochMSecs(timeToMSecs(*date, *time), &status, date, time); + utc = localMSecsToEpochMSecs(local, &dst, date, time); #if QT_CONFIG(timezone) - } else if (spec == Qt::TimeZone && d->m_timeZone.isValid()) { - QDateTimePrivate::zoneMSecsToEpochMSecs(timeToMSecs(*date, *time), - d->m_timeZone, - QDateTimePrivate::UnknownDaylightTime, - date, time); + } else if (spec == Qt::TimeZone && d.d->m_timeZone.isValid()) { + utc = QDateTimePrivate::zoneMSecsToEpochMSecs(local, d.d->m_timeZone, dst, date, time); + // update dst, as it's passed to zoneMSecsToEpochMSecs() by value + dst = d.d->m_timeZone.isDaylightTime(QDateTime::fromMSecsSinceEpoch(utc)) + ? QDateTimePrivate::DaylightTime : QDateTimePrivate::StandardTime; #endif // timezone + } else { + dst = QDateTimePrivate::UnknownDaylightTime; + } + + setDateTime(d, *date, *time); + + auto status = getStatus(d); // Updated by setDateTime() + const bool ok = (dst != QDateTimePrivate::UnknownDaylightTime + && (status & QDateTimePrivate::ValidDate) + && (status & QDateTimePrivate::ValidTime)); + if (ok) + status = mergeDaylightStatus(status | QDateTimePrivate::ValidDateTime, dst); + else + status &= ~QDateTimePrivate::ValidDateTime; + + if (status & QDateTimePrivate::ShortData) { + d.data.status = status; + } else { + d->m_status = status; + if (ok) + d->m_offsetFromUtc = (local - utc) / MSECS_PER_SEC; } } @@ -4579,7 +4611,6 @@ QDateTime QDateTime::addDays(qint64 ndays) const QTime &time = p.second; date = date.addDays(ndays); massageAdjustedDateTime(dt.d, &date, &time); - setDateTime(dt.d, date, time); return dt; } @@ -4605,7 +4636,6 @@ QDateTime QDateTime::addMonths(int nmonths) const QTime &time = p.second; date = date.addMonths(nmonths); massageAdjustedDateTime(dt.d, &date, &time); - setDateTime(dt.d, date, time); return dt; } @@ -4631,7 +4661,6 @@ QDateTime QDateTime::addYears(int nyears) const QTime &time = p.second; date = date.addYears(nyears); massageAdjustedDateTime(dt.d, &date, &time); - setDateTime(dt.d, date, time); return dt; } diff --git a/src/corelib/time/qdatetimeparser.cpp b/src/corelib/time/qdatetimeparser.cpp index c5e0493d..ce28c6d0 100644 --- a/src/corelib/time/qdatetimeparser.cpp +++ b/src/corelib/time/qdatetimeparser.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -761,6 +761,11 @@ QDateTimeParser::parseSection(const QDateTime ¤tValue, int sectionIndex, const int sectionmaxsize = sectionMaxSize(sectionIndex); QStringRef sectionTextRef = text->midRef(offset, sectionmaxsize); + // If the fields we've read thus far imply a time in a spring-forward, + // coerce to a nearby valid time: + const QDateTime defaultValue = currentValue.isValid() ? currentValue + : QDateTime::fromMSecsSinceEpoch(currentValue.toMSecsSinceEpoch()); + QDTPDEBUG << "sectionValue for" << sn.name() << "with text" << *text << "and (at" << offset << ") st:" << sectionTextRef; @@ -793,7 +798,7 @@ QDateTimeParser::parseSection(const QDateTime ¤tValue, int sectionIndex, text->replace(offset, used, sectiontext.constData(), used); break; } case TimeZoneSection: - result = findTimeZone(sectionTextRef, currentValue, + result = findTimeZone(sectionTextRef, defaultValue, absoluteMax(sectionIndex), absoluteMin(sectionIndex)); break; @@ -805,7 +810,7 @@ QDateTimeParser::parseSection(const QDateTime ¤tValue, int sectionIndex, int num = 0, used = 0; if (sn.type == MonthSection) { const QDate minDate = getMinimum().date(); - const int year = currentValue.date().year(calendar); + const int year = defaultValue.date().year(calendar); const int min = (year == minDate.year(calendar)) ? minDate.month(calendar) : 1; num = findMonth(sectiontext.toLower(), min, sectionIndex, year, §iontext, &used); } else { @@ -887,7 +892,7 @@ QDateTimeParser::parseSection(const QDateTime ¤tValue, int sectionIndex, else QDTPDEBUG << "invalid because" << last << "is less than absoluteMin" << absMin; } else if (unfilled && (fi & (FixedWidth|Numeric)) == (FixedWidth|Numeric)) { - if (skipToNextSection(sectionIndex, currentValue, digitsStr)) { + if (skipToNextSection(sectionIndex, defaultValue, digitsStr)) { const int missingZeroes = sectionmaxsize - digitsStr.size(); result = ParsedSection(Acceptable, last, sectionmaxsize, missingZeroes); text->insert(offset, QString(missingZeroes, QLatin1Char('0'))); diff --git a/src/corelib/time/qtimezoneprivate_android.cpp b/src/corelib/time/qtimezoneprivate_android.cpp index da828324..3609c65d 100644 --- a/src/corelib/time/qtimezoneprivate_android.cpp +++ b/src/corelib/time/qtimezoneprivate_android.cpp @@ -86,17 +86,10 @@ QAndroidTimeZonePrivate::~QAndroidTimeZonePrivate() static QJNIObjectPrivate getDisplayName(QJNIObjectPrivate zone, jint style, jboolean dst, const QLocale &locale) { - QJNIObjectPrivate jlanguage - = QJNIObjectPrivate::fromString(QLocale::languageToString(locale.language())); - QJNIObjectPrivate jcountry - = QJNIObjectPrivate::fromString(QLocale::countryToString(locale.country())); - QJNIObjectPrivate - jvariant = QJNIObjectPrivate::fromString(QLocale::scriptToString(locale.script())); - QJNIObjectPrivate jlocale("java.util.Locale", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", - static_cast(jlanguage.object()), - static_cast(jcountry.object()), - static_cast(jvariant.object())); + QJNIObjectPrivate jbcpTag = QJNIObjectPrivate::fromString(locale.bcp47Name()); + QJNIObjectPrivate jlocale = QJNIObjectPrivate::callStaticObjectMethod( + "java/util/Locale", "forLanguageTag", "(Ljava/lang/String;)Ljava/util/Locale;", + static_cast(jbcpTag.object())); return zone.callObjectMethod("getDisplayName", "(ZILjava/util/Locale;)Ljava/lang/String;", diff --git a/src/corelib/time/qtimezoneprivate_p.h b/src/corelib/time/qtimezoneprivate_p.h index 62cd32c8..eb847b80 100644 --- a/src/corelib/time/qtimezoneprivate_p.h +++ b/src/corelib/time/qtimezoneprivate_p.h @@ -243,6 +243,7 @@ public: QIcuTimeZonePrivate *clone() const override; + using QTimeZonePrivate::displayName; QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType, const QLocale &locale) const override; QString abbreviation(qint64 atMSecsSinceEpoch) const override; @@ -345,12 +346,17 @@ public: QList availableTimeZoneIds(QLocale::Country country) const override; private: - void init(const QByteArray &ianaId); + static QByteArray staticSystemTimeZoneId(); QVector getPosixTransitions(qint64 msNear) const; Data dataForTzTransition(QTzTransitionTime tran) const; #if QT_CONFIG(icu) - mutable QSharedDataPointer m_icu; +# ifdef __cpp_lib_is_final + static_assert(std::is_final::value, + "if QIcuTimeZonePrivate isn't final, we may need to specialize " + "QExplicitlySharedDataPointer::clone() to call QTimeZonePrivate::clone()"); +# endif + mutable QExplicitlySharedDataPointer m_icu; #endif QTzTimeZoneCacheEntry cached_data; QVector tranCache() const { return cached_data.m_tranTimes; } diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp index b1611d7d..55914cc7 100644 --- a/src/corelib/time/qtimezoneprivate_tz.cpp +++ b/src/corelib/time/qtimezoneprivate_tz.cpp @@ -42,6 +42,7 @@ #include "qtimezone.h" #include "qtimezoneprivate_p.h" #include "private/qlocale_tools_p.h" +#include "private/qlocking_p.h" #include #include @@ -62,6 +63,10 @@ QT_BEGIN_NAMESPACE +#if QT_CONFIG(icu) +static QBasicMutex s_icu_mutex; +#endif + /* Private @@ -654,14 +659,8 @@ static QVector calculatePosixTransitions(const QByteArra // Create the system default time zone QTzTimeZonePrivate::QTzTimeZonePrivate() + : QTzTimeZonePrivate(staticSystemTimeZoneId()) { - init(systemTimeZoneId()); -} - -// Create a named time zone -QTzTimeZonePrivate::QTzTimeZonePrivate(const QByteArray &ianaId) -{ - init(ianaId); } QTzTimeZonePrivate::~QTzTimeZonePrivate() @@ -670,6 +669,9 @@ QTzTimeZonePrivate::~QTzTimeZonePrivate() QTzTimeZonePrivate *QTzTimeZonePrivate::clone() const { +#if QT_CONFIG(icu) + const auto lock = qt_scoped_lock(s_icu_mutex); +#endif return new QTzTimeZonePrivate(*this); } @@ -872,7 +874,8 @@ QTzTimeZoneCacheEntry QTzTimeZoneCache::fetchEntry(const QByteArray &ianaId) return ret; } -void QTzTimeZonePrivate::init(const QByteArray &ianaId) +// Create a named time zone +QTzTimeZonePrivate::QTzTimeZonePrivate(const QByteArray &ianaId) { static QTzTimeZoneCache tzCache; auto entry = tzCache.fetchEntry(ianaId); @@ -913,12 +916,14 @@ QString QTzTimeZonePrivate::displayName(qint64 atMSecsSinceEpoch, const QLocale &locale) const { #if QT_CONFIG(icu) + auto lock = qt_unique_lock(s_icu_mutex); if (!m_icu) m_icu = new QIcuTimeZonePrivate(m_id); // TODO small risk may not match if tran times differ due to outdated files // TODO Some valid TZ names are not valid ICU names, use translation table? if (m_icu->isValid()) return m_icu->displayName(atMSecsSinceEpoch, nameType, locale); + lock.unlock(); #else Q_UNUSED(nameType) Q_UNUSED(locale) @@ -932,12 +937,14 @@ QString QTzTimeZonePrivate::displayName(QTimeZone::TimeType timeType, const QLocale &locale) const { #if QT_CONFIG(icu) + auto lock = qt_unique_lock(s_icu_mutex); if (!m_icu) m_icu = new QIcuTimeZonePrivate(m_id); // TODO small risk may not match if tran times differ due to outdated files // TODO Some valid TZ names are not valid ICU names, use translation table? if (m_icu->isValid()) return m_icu->displayName(timeType, nameType, locale); + lock.unlock(); #else Q_UNUSED(timeType) Q_UNUSED(nameType) @@ -1284,6 +1291,11 @@ private: } QByteArray QTzTimeZonePrivate::systemTimeZoneId() const +{ + return staticSystemTimeZoneId(); +} + +QByteArray QTzTimeZonePrivate::staticSystemTimeZoneId() { // Check TZ env var first, if not populated try find it QByteArray ianaId = qgetenv("TZ"); diff --git a/src/corelib/tools/qfreelist_p.h b/src/corelib/tools/qfreelist_p.h index 5ba23b34..99741021 100644 --- a/src/corelib/tools/qfreelist_p.h +++ b/src/corelib/tools/qfreelist_p.h @@ -161,7 +161,7 @@ class QFreeList return i; x -= size; } - Q_ASSERT(false); + Q_UNREACHABLE(); return -1; } diff --git a/src/corelib/tools/qmargins.cpp b/src/corelib/tools/qmargins.cpp index ac00aaee..3d6a62af 100644 --- a/src/corelib/tools/qmargins.cpp +++ b/src/corelib/tools/qmargins.cpp @@ -489,7 +489,7 @@ QDebug operator<<(QDebug dbg, const QMargins &m) /*! \fn QMarginsF::QMarginsF(const QMargins &margins) - Constructs margins copied from the given \a margins + Constructs margins copied from the given \a margins. */ /*! diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp index a24b6891..7becff87 100644 --- a/src/corelib/tools/qsharedpointer.cpp +++ b/src/corelib/tools/qsharedpointer.cpp @@ -1400,7 +1400,7 @@ QtSharedPointer::ExternalRefCountData *QtSharedPointer::ExternalRefCountData::ge } // we can create the refcount data because it doesn't exist - ExternalRefCountData *x = new ExternalRefCountData(Qt::Uninitialized); + ExternalRefCountData *x = ::new ExternalRefCountData(Qt::Uninitialized); x->strongref.storeRelaxed(-1); x->weakref.storeRelaxed(2); // the QWeakPointer that called us plus the QObject itself @@ -1411,7 +1411,7 @@ QtSharedPointer::ExternalRefCountData *QtSharedPointer::ExternalRefCountData::ge // ~ExternalRefCountData has a Q_ASSERT, so we use this trick to // only execute this if Q_ASSERTs are enabled Q_ASSERT((x->weakref.storeRelaxed(0), true)); - delete x; + ::delete x; ret->weakref.ref(); } return ret; diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index 618b31e3..d262e4eb 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -156,6 +156,12 @@ namespace QtSharedPointer { inline void checkQObjectShared(...) { } inline void setQObjectShared(...) { } + // Normally, only subclasses of ExternalRefCountData are allocated + // One exception exists in getAndRef; that uses the global operator new + // to prevent a mismatch with the custom operator delete + inline void *operator new(std::size_t) = delete; + // placement new + inline void *operator new(std::size_t, void *ptr) noexcept { return ptr; } inline void operator delete(void *ptr) { ::operator delete(ptr); } inline void operator delete(void *, void *) { } }; diff --git a/src/corelib/tools/qversionnumber.h b/src/corelib/tools/qversionnumber.h index d43b86ba..d1180b54 100644 --- a/src/corelib/tools/qversionnumber.h +++ b/src/corelib/tools/qversionnumber.h @@ -133,8 +133,8 @@ class QVersionNumber explicit SegmentStorage(QVector &&seg) { - if (dataFitsInline(seg.begin(), seg.size())) - setInlineData(seg.begin(), seg.size()); + if (dataFitsInline(seg.cbegin(), seg.size())) + setInlineData(seg.cbegin(), seg.size()); else pointer_segments = new QVector(std::move(seg)); } @@ -269,14 +269,14 @@ public: Q_REQUIRED_RESULT Q_CORE_EXPORT static int compare(const QVersionNumber &v1, const QVersionNumber &v2) noexcept; - Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2); + Q_REQUIRED_RESULT Q_CORE_EXPORT static QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2); Q_REQUIRED_RESULT Q_CORE_EXPORT QString toString() const; #if QT_STRINGVIEW_LEVEL < 2 - Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(const QString &string, int *suffixIndex = nullptr); + Q_REQUIRED_RESULT Q_CORE_EXPORT static QVersionNumber fromString(const QString &string, int *suffixIndex = nullptr); #endif - Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(QLatin1String string, int *suffixIndex = nullptr); - Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(QStringView string, int *suffixIndex = nullptr); + Q_REQUIRED_RESULT Q_CORE_EXPORT static QVersionNumber fromString(QLatin1String string, int *suffixIndex = nullptr); + Q_REQUIRED_RESULT Q_CORE_EXPORT static QVersionNumber fromString(QStringView string, int *suffixIndex = nullptr); private: #ifndef QT_NO_DATASTREAM diff --git a/src/dbus/doc/src/dbus-adaptors.qdoc b/src/dbus/doc/src/dbus-adaptors.qdoc index 496e36ea..7d8386d5 100644 --- a/src/dbus/doc/src/dbus-adaptors.qdoc +++ b/src/dbus/doc/src/dbus-adaptors.qdoc @@ -193,7 +193,7 @@ The delayed reply itself is requested from Qt D-Bus by calling QDBusMessage::reply() on the original message. It then becomes the - resposibility of the called code to eventually send a reply to the + responsibility of the called code to eventually send a reply to the caller. \warning When a caller places a method call and waits for a reply, it will diff --git a/src/dbus/qdbusabstractadaptor.cpp b/src/dbus/qdbusabstractadaptor.cpp index bf0e33e2..80895bc4 100644 --- a/src/dbus/qdbusabstractadaptor.cpp +++ b/src/dbus/qdbusabstractadaptor.cpp @@ -166,7 +166,7 @@ QDBusAbstractAdaptor::~QDBusAbstractAdaptor() Toggles automatic signal relaying from the real object (see object()). Automatic signal relaying consists of signal-to-signal connection of the signals on the parent - that have the exact same method signatue in both classes. + that have the exact same method signature in both classes. If \a enable is set to true, connect the signals; if set to false, disconnect all signals. */ @@ -449,4 +449,6 @@ void QDBusAdaptorConnector::relaySignal(QObject * _t1, const QMetaObject * _t2, QT_END_NAMESPACE +#include "moc_qdbusabstractadaptor.cpp" + #endif // QT_NO_DBUS diff --git a/src/dbus/qdbusargument.cpp b/src/dbus/qdbusargument.cpp index 5a0f0f01..1791dd50 100644 --- a/src/dbus/qdbusargument.cpp +++ b/src/dbus/qdbusargument.cpp @@ -709,7 +709,7 @@ const QDBusArgument &QDBusArgument::operator>>(qulonglong &arg) const /*! \overload Extracts one D-Bus primitive argument of type \c{DOUBLE} - (double-precision floating pount) from the D-Bus stream. + (double-precision floating point) from the D-Bus stream. */ const QDBusArgument &QDBusArgument::operator>>(double &arg) const { diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp index fef55a3c..dd12754e 100644 --- a/src/dbus/qdbusconnection.cpp +++ b/src/dbus/qdbusconnection.cpp @@ -1289,6 +1289,10 @@ QByteArray QDBusConnection::localMachineId() QT_END_NAMESPACE +#include "moc_qdbusconnection_p.cpp" +#include "moc_qdbusconnection.cpp" +#include "moc_qdbusconnectionmanager_p.cpp" + #ifdef Q_OS_WIN # include diff --git a/src/dbus/qdbusconnectioninterface.cpp b/src/dbus/qdbusconnectioninterface.cpp index a2335a17..42289e47 100644 --- a/src/dbus/qdbusconnectioninterface.cpp +++ b/src/dbus/qdbusconnectioninterface.cpp @@ -442,4 +442,6 @@ void QDBusConnectionInterface::disconnectNotify(const QMetaMethod &signal) QT_END_NAMESPACE +#include "moc_qdbusconnectioninterface.cpp" + #endif // QT_NO_DBUS diff --git a/src/dbus/qdbuserror.cpp b/src/dbus/qdbuserror.cpp index decd345e..37a147eb 100644 --- a/src/dbus/qdbuserror.cpp +++ b/src/dbus/qdbuserror.cpp @@ -354,12 +354,16 @@ QDebug operator<<(QDebug dbg, const QDBusError &msg) QT_END_NAMESPACE +#ifndef QT_BOOTSTRAPPED +#include "moc_qdbuserror.cpp" +#endif + #endif // QT_NO_DBUS /* MSVC2015 has the warning C4503 at the end of the file: QtPrivate::StaticStringBuilder - decorated name length exceeded, name was truncated -It is used by qOffsetStringArray in a constexpr evaulation and this code does not exist in the object file, +It is used by qOffsetStringArray in a constexpr evaluation and this code does not exist in the object file, but we still have the warning or even error with -WX flag */ QT_WARNING_DISABLE_MSVC(4503) diff --git a/src/dbus/qdbusmetaobject.cpp b/src/dbus/qdbusmetaobject.cpp index 5265568f..7e9f0f1a 100644 --- a/src/dbus/qdbusmetaobject.cpp +++ b/src/dbus/qdbusmetaobject.cpp @@ -210,6 +210,9 @@ QDBusMetaObjectGenerator::findType(const QByteArray &signature, } else if (signature == "a{ss}") { result.name = "QMap"; type = qMetaTypeId >(); + } else if (signature == "aay") { + result.name = "QByteArrayList"; + type = qMetaTypeId(); } else { result.name = "{D-Bus type \"" + signature + "\"}"; type = registerComplexDBusType(result.name); diff --git a/src/dbus/qdbuspendingcall.cpp b/src/dbus/qdbuspendingcall.cpp index 04d8e3f6..46c20474 100644 --- a/src/dbus/qdbuspendingcall.cpp +++ b/src/dbus/qdbuspendingcall.cpp @@ -546,6 +546,8 @@ void QDBusPendingCallWatcher::waitForFinished() } QT_END_NAMESPACE +#include "moc_qdbuspendingcall_p.cpp" + #endif // QT_NO_DBUS #include "moc_qdbuspendingcall.cpp" diff --git a/src/dbus/qdbusvirtualobject.cpp b/src/dbus/qdbusvirtualobject.cpp index 25dd49c3..ef7fbe8f 100644 --- a/src/dbus/qdbusvirtualobject.cpp +++ b/src/dbus/qdbusvirtualobject.cpp @@ -60,6 +60,7 @@ QDBusVirtualObject::~QDBusVirtualObject() QT_END_NAMESPACE +#include "moc_qdbusvirtualobject.cpp" /*! \class QDBusVirtualObject diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp index d705bfcc..32d0e6ca 100644 --- a/src/gui/accessible/qaccessible.cpp +++ b/src/gui/accessible/qaccessible.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include @@ -162,7 +163,6 @@ Q_LOGGING_CATEGORY(lcAccessibilityCore, "qt.accessibility.core"); \value hasPopup The object opens a popup. \value hotTracked The object's appearance is sensitive to the mouse cursor position. \value invalid The object is no longer valid (because it has been deleted). - \value invalidEntry Input validation current input invalid. \value invisible The object is not visible to the user. \value linked The object is linked to another object, e.g. a hyperlink. \value marqueed The object displays scrolling contents, e.g. a log view. @@ -681,6 +681,25 @@ QAccessibleInterface *QAccessible::queryAccessibleInterface(QObject *object) // Create a QAccessibleInterface for the object class. Start by the most // derived class and walk up the class hierarchy. const QMetaObject *mo = object->metaObject(); + const auto *objectPriv = QObjectPrivate::get(object); + /* + We do not want to cache each and every QML metaobject (Button_QMLTYPE_124, + Button_QMLTYPE_125, etc.). Those dynamic metaobjects shouldn't have an + accessible interface in any case. Instead, we start the whole checking + with the first non-dynamic meta-object. To avoid potential regressions + in other areas of Qt that also use dynamic metaobjects, we only do this + for objects that are QML-related (approximated by checking whether they + have ddata set). + */ + const bool qmlRelated = !objectPriv->isDeletingChildren && + objectPriv->declarativeData; + while (qmlRelated && mo) { + auto mop = QMetaObjectPrivate::get(mo); + if (!mop || !(mop->flags & DynamicMetaObject)) + break; + + mo = mo->superClass(); + }; while (mo) { const QString cn = QLatin1String(mo->className()); @@ -696,14 +715,15 @@ QAccessibleInterface *QAccessible::queryAccessibleInterface(QObject *object) // Find a QAccessiblePlugin (factory) for the class name. If there's // no entry in the cache try to create it using the plugin loader. if (!qAccessiblePlugins()->contains(cn)) { + QAccessiblePlugin *factory = nullptr; // 0 means "no plugin found". This is cached as well. const int index = loader()->indexOf(cn); - if (index != -1) { - QAccessiblePlugin *factory = qobject_cast(loader()->instance(index)); - qAccessiblePlugins()->insert(cn, factory); - } + if (index != -1) + factory = qobject_cast(loader()->instance(index)); + qAccessiblePlugins()->insert(cn, factory); } // At this point the cache should contain a valid factory pointer or 0: + Q_ASSERT(qAccessiblePlugins()->contains(cn)); QAccessiblePlugin *factory = qAccessiblePlugins()->value(cn); if (factory) { QAccessibleInterface *result = factory->create(cn, object); diff --git a/src/gui/accessible/qaccessiblebridge.cpp b/src/gui/accessible/qaccessiblebridge.cpp index c6a417e0..7c8a4154 100644 --- a/src/gui/accessible/qaccessiblebridge.cpp +++ b/src/gui/accessible/qaccessiblebridge.cpp @@ -138,4 +138,6 @@ QAccessibleBridgePlugin::~QAccessibleBridgePlugin() QT_END_NAMESPACE +#include "moc_qaccessiblebridge.cpp" + #endif // QT_NO_ACCESSIBILITY diff --git a/src/gui/accessible/qaccessiblecache.cpp b/src/gui/accessible/qaccessiblecache.cpp index 20376a54..28c797a0 100644 --- a/src/gui/accessible/qaccessiblecache.cpp +++ b/src/gui/accessible/qaccessiblecache.cpp @@ -159,4 +159,6 @@ void QAccessibleCache::deleteInterface(QAccessible::Id id, QObject *obj) QT_END_NAMESPACE +#include "moc_qaccessiblecache_p.cpp" + #endif diff --git a/src/gui/accessible/qaccessibleplugin.cpp b/src/gui/accessible/qaccessibleplugin.cpp index 27497858..709e0f3d 100644 --- a/src/gui/accessible/qaccessibleplugin.cpp +++ b/src/gui/accessible/qaccessibleplugin.cpp @@ -89,4 +89,6 @@ QAccessiblePlugin::~QAccessiblePlugin() QT_END_NAMESPACE +#include "moc_qaccessibleplugin.cpp" + #endif // QT_NO_ACCESSIBILITY diff --git a/src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp b/src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp index 6527021d..5cb100c7 100644 --- a/src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp +++ b/src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp @@ -66,7 +66,7 @@ mailto:user@foo.com?subject=Test&body=Just a test //! [1] //! [2] -QDesktopServices::openUrl(QUrl("file:///C:/Documents and Settings/All Users/Desktop", QUrl::TolerantMode)); +QDesktopServices::openUrl(QUrl("file:///C:/Program Files", QUrl::TolerantMode)); //! [2] //! [3] diff --git a/src/gui/image/qiconengineplugin.cpp b/src/gui/image/qiconengineplugin.cpp index ca80ee50..74e9fcab 100644 --- a/src/gui/image/qiconengineplugin.cpp +++ b/src/gui/image/qiconengineplugin.cpp @@ -97,3 +97,5 @@ QIconEnginePlugin::~QIconEnginePlugin() QT_END_NAMESPACE + +#include "moc_qiconengineplugin.cpp" diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 7152ac16..53bb3beb 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -4975,7 +4975,8 @@ void QImage::convertToColorSpace(const QColorSpace &colorSpace) qWarning() << "QImage::convertToColorSpace: Output colorspace is not valid"; return; } - detach(); + if (d->colorSpace == colorSpace) + return; applyColorTransform(d->colorSpace.transformationToColorSpace(colorSpace)); d->colorSpace = colorSpace; } @@ -5017,6 +5018,14 @@ QColorSpace QImage::colorSpace() const */ void QImage::applyColorTransform(const QColorTransform &transform) { + detach(); + if (!d) + return; + if (pixelFormat().colorModel() == QPixelFormat::Indexed) { + for (int i = 0; i < d->colortable.size(); ++i) + d->colortable[i] = transform.map(d->colortable[i]); + return; + } QImage::Format oldFormat = format(); if (depth() > 32) { if (format() != QImage::Format_RGBX64 && format() != QImage::Format_RGBA64 @@ -5052,14 +5061,14 @@ void QImage::applyColorTransform(const QColorTransform &transform) if (depth() > 32) { transformSegment = [&](int yStart, int yEnd) { for (int y = yStart; y < yEnd; ++y) { - QRgba64 *scanline = reinterpret_cast(scanLine(y)); + QRgba64 *scanline = reinterpret_cast(d->data + y * d->bytes_per_line); transform.d->apply(scanline, scanline, width(), flags); } }; } else { transformSegment = [&](int yStart, int yEnd) { for (int y = yStart; y < yEnd; ++y) { - QRgb *scanline = reinterpret_cast(scanLine(y)); + QRgb *scanline = reinterpret_cast(d->data + y * d->bytes_per_line); transform.d->apply(scanline, scanline, width(), flags); } }; @@ -5648,3 +5657,5 @@ QMap qt_getImageTextFromDescription(const QString &description } QT_END_NAMESPACE + +#include "moc_qimage.cpp" diff --git a/src/gui/image/qimageiohandler.cpp b/src/gui/image/qimageiohandler.cpp index 0c9083a1..1be0dfff 100644 --- a/src/gui/image/qimageiohandler.cpp +++ b/src/gui/image/qimageiohandler.cpp @@ -618,3 +618,5 @@ QImageIOPlugin::~QImageIOPlugin() #endif // QT_NO_IMAGEFORMATPLUGIN QT_END_NAMESPACE + +#include "moc_qimageiohandler.cpp" diff --git a/src/gui/kernel/qclipboard.cpp b/src/gui/kernel/qclipboard.cpp index db22ef24..fc364e3a 100644 --- a/src/gui/kernel/qclipboard.cpp +++ b/src/gui/kernel/qclipboard.cpp @@ -610,4 +610,6 @@ void QClipboard::emitChanged(Mode mode) QT_END_NAMESPACE +#include "moc_qclipboard.cpp" + #endif // QT_NO_CLIPBOARD diff --git a/src/gui/kernel/qcursor.cpp b/src/gui/kernel/qcursor.cpp index d6ccaff8..45508824 100644 --- a/src/gui/kernel/qcursor.cpp +++ b/src/gui/kernel/qcursor.cpp @@ -251,7 +251,8 @@ void QCursor::setPos(QScreen *screen, int x, int y) { if (screen) { if (QPlatformCursor *cursor = screen->handle()->cursor()) { - const QPoint devicePos = QHighDpi::toNativePixels(QPoint(x, y), screen); + const QPoint pos(x, y); + const QPoint devicePos = QHighDpi::toNativePixels(pos, screen->virtualSiblingAt(pos)); // Need to check, since some X servers generate null mouse move // events, causing looping in applications which call setPos() on // every mouse move event. diff --git a/src/gui/kernel/qdnd.cpp b/src/gui/kernel/qdnd.cpp index fe766c90..ecf8b3f4 100644 --- a/src/gui/kernel/qdnd.cpp +++ b/src/gui/kernel/qdnd.cpp @@ -123,3 +123,5 @@ Qt::DropAction QDragManager::drag(QDrag *o) } QT_END_NAMESPACE + +#include "moc_qdnd_p.cpp" diff --git a/src/gui/kernel/qdrag.cpp b/src/gui/kernel/qdrag.cpp index 3712eace..ee4b816e 100644 --- a/src/gui/kernel/qdrag.cpp +++ b/src/gui/kernel/qdrag.cpp @@ -423,3 +423,5 @@ void QDrag::cancel() */ QT_END_NAMESPACE + +#include "moc_qdrag.cpp" diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index a6da24e4..542f3e32 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -5320,3 +5320,5 @@ uint qHash(QPointingDeviceUniqueId key, uint seed) noexcept } QT_END_NAMESPACE + +#include "moc_qevent.cpp" diff --git a/src/gui/kernel/qgenericplugin.cpp b/src/gui/kernel/qgenericplugin.cpp index a53b60b0..7ecdc72d 100644 --- a/src/gui/kernel/qgenericplugin.cpp +++ b/src/gui/kernel/qgenericplugin.cpp @@ -94,3 +94,5 @@ QGenericPlugin::~QGenericPlugin() */ QT_END_NAMESPACE + +#include "moc_qgenericplugin.cpp" diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 87643a3a..b39b3b4e 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -61,7 +61,7 @@ #include #include #include -#include +#include #include #ifndef QT_NO_ACCESSIBILITY #include "qaccessible.h" @@ -140,7 +140,7 @@ Q_GUI_EXPORT bool qt_is_gui_used = true; Qt::MouseButtons QGuiApplicationPrivate::mouse_buttons = Qt::NoButton; Qt::KeyboardModifiers QGuiApplicationPrivate::modifier_buttons = Qt::NoModifier; -QPointF QGuiApplicationPrivate::lastCursorPosition(qInf(), qInf()); +QPointF QGuiApplicationPrivate::lastCursorPosition(qt_inf(), qt_inf()); QWindow *QGuiApplicationPrivate::currentMouseWindow = nullptr; diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp index 9bbf2773..85ff58c1 100644 --- a/src/gui/kernel/qhighdpiscaling.cpp +++ b/src/gui/kernel/qhighdpiscaling.cpp @@ -726,3 +726,5 @@ QHighDpiScaling::ScaleAndOrigin QHighDpiScaling::scaleAndOrigin(const QWindow *w #endif //QT_NO_HIGHDPISCALING QT_END_NAMESPACE + +#include "moc_qhighdpiscaling_p.cpp" diff --git a/src/gui/kernel/qinputdevicemanager.cpp b/src/gui/kernel/qinputdevicemanager.cpp index 11442407..13e32a08 100644 --- a/src/gui/kernel/qinputdevicemanager.cpp +++ b/src/gui/kernel/qinputdevicemanager.cpp @@ -116,3 +116,5 @@ void QInputDeviceManager::setKeyboardModifiers(Qt::KeyboardModifiers mods) } QT_END_NAMESPACE + +#include "moc_qinputdevicemanager_p.cpp" diff --git a/src/gui/kernel/qinternalmimedata.cpp b/src/gui/kernel/qinternalmimedata.cpp index d5cdc743..a2b47879 100644 --- a/src/gui/kernel/qinternalmimedata.cpp +++ b/src/gui/kernel/qinternalmimedata.cpp @@ -233,3 +233,5 @@ QByteArray QInternalMimeData::renderDataHelper(const QString &mimeType, const QM } QT_END_NAMESPACE + +#include "moc_qinternalmimedata_p.cpp" diff --git a/src/gui/kernel/qkeymapper.cpp b/src/gui/kernel/qkeymapper.cpp index 274574f5..38180105 100644 --- a/src/gui/kernel/qkeymapper.cpp +++ b/src/gui/kernel/qkeymapper.cpp @@ -147,3 +147,5 @@ QList QKeyMapperPrivate::possibleKeys(QKeyEvent *e) } QT_END_NAMESPACE + +#include "moc_qkeymapper_p.cpp" diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index a75b8ef9..23be5e1a 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -1693,3 +1693,5 @@ QDebug operator<<(QDebug dbg, const QKeySequence &p) */ QT_END_NAMESPACE + +#include "moc_qkeysequence.cpp" diff --git a/src/gui/kernel/qoffscreensurface.cpp b/src/gui/kernel/qoffscreensurface.cpp index c74fe0b3..ae7bc332 100644 --- a/src/gui/kernel/qoffscreensurface.cpp +++ b/src/gui/kernel/qoffscreensurface.cpp @@ -435,3 +435,5 @@ QPlatformSurface *QOffscreenSurface::surfaceHandle() const } QT_END_NAMESPACE + +#include "moc_qoffscreensurface.cpp" diff --git a/src/gui/kernel/qpaintdevicewindow.cpp b/src/gui/kernel/qpaintdevicewindow.cpp index 4f45fc5f..0ba52cc7 100644 --- a/src/gui/kernel/qpaintdevicewindow.cpp +++ b/src/gui/kernel/qpaintdevicewindow.cpp @@ -223,3 +223,5 @@ QPaintEngine *QPaintDeviceWindow::paintEngine() const } QT_END_NAMESPACE + +#include "moc_qpaintdevicewindow.cpp" diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp index 4654e52c..a192b7ae 100644 --- a/src/gui/kernel/qpalette.cpp +++ b/src/gui/kernel/qpalette.cpp @@ -1234,3 +1234,5 @@ QDebug operator<<(QDebug dbg, const QPalette &p) #endif QT_END_NAMESPACE + +#include "moc_qpalette.cpp" diff --git a/src/gui/kernel/qplatformdialoghelper.cpp b/src/gui/kernel/qplatformdialoghelper.cpp index 33cd0042..4ca5421b 100644 --- a/src/gui/kernel/qplatformdialoghelper.cpp +++ b/src/gui/kernel/qplatformdialoghelper.cpp @@ -1012,3 +1012,5 @@ void QPlatformMessageDialogHelper::setOptions(const QSharedPointerscreen(); @@ -466,7 +466,7 @@ inline bool QWindowPrivate::windowRecreationRequired(QScreen *newScreen) const && !(oldScreen && oldScreen->virtualSiblings().contains(newScreen)); } -inline void QWindowPrivate::disconnectFromScreen() +void QWindowPrivate::disconnectFromScreen() { if (topLevelScreen) topLevelScreen = nullptr; diff --git a/src/gui/opengl/qopengl.h b/src/gui/opengl/qopengl.h index 3a2393ea..9dee796e 100644 --- a/src/gui/opengl/qopengl.h +++ b/src/gui/opengl/qopengl.h @@ -157,8 +157,6 @@ typedef char GLchar; # endif #endif -QT_BEGIN_NAMESPACE - // When all else fails we provide sensible fallbacks - this is needed to // allow compilation on OS X 10.6 @@ -287,6 +285,7 @@ typedef GLintptr GLvdpauSurfaceNV; // End of block copied from glext.h #endif +QT_BEGIN_NAMESPACE // Types that aren't defined in all system's gl.h files. typedef ptrdiff_t qopengl_GLintptr; diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index 2147d9d6..ebce163e 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -249,8 +249,18 @@ void QBackingStore::flush(const QRegion ®ion, QWindow *window, const QPoint & Q_ASSERT(window == topLevelWindow || topLevelWindow->isAncestorOf(window, QWindow::ExcludeTransients)); - handle()->flush(window, QHighDpi::toNativeLocalRegion(region, window), - QHighDpi::toNativeLocalPosition(offset, window)); + QRegion nativeRegion = QHighDpi::toNativeLocalRegion(region, window); + QPoint nativeOffset; + if (!offset.isNull()) { + nativeOffset = QHighDpi::toNativeLocalPosition(offset, window); + // Under fractional DPR, rounding of region and offset may accumulate to an off-by-one + QPoint topLeft = region.boundingRect().topLeft() + offset; + QPoint nativeTopLeft = QHighDpi::toNativeLocalPosition(topLeft, window); + QPoint diff = nativeTopLeft - (nativeRegion.boundingRect().topLeft() + nativeOffset); + Q_ASSERT(qMax(qAbs(diff.x()), qAbs(diff.y())) <= 1); + nativeRegion.translate(diff); + } + handle()->flush(window, nativeRegion, nativeOffset); } /*! @@ -320,32 +330,34 @@ bool QBackingStore::hasStaticContents() const void Q_GUI_EXPORT qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) { // make sure we don't detach - uchar *mem = const_cast(const_cast(img).bits()); + uchar *mem = const_cast(img.constBits()); int lineskip = img.bytesPerLine(); int depth = img.depth() >> 3; const QRect imageRect(0, 0, img.width(), img.height()); - const QRect r = rect & imageRect & imageRect.translated(-offset); - const QPoint p = rect.topLeft() + offset; - - if (r.isEmpty()) + const QRect sourceRect = rect.intersected(imageRect).intersected(imageRect.translated(-offset)); + if (sourceRect.isEmpty()) return; + const QRect destRect = sourceRect.translated(offset); + Q_ASSERT_X(imageRect.contains(destRect), "qt_scrollRectInImage", + "The sourceRect should already account for clipping, both pre and post scroll"); + const uchar *src; uchar *dest; - if (r.top() < p.y()) { - src = mem + r.bottom() * lineskip + r.left() * depth; - dest = mem + (p.y() + r.height() - 1) * lineskip + p.x() * depth; + if (sourceRect.top() < destRect.top()) { + src = mem + sourceRect.bottom() * lineskip + sourceRect.left() * depth; + dest = mem + (destRect.top() + sourceRect.height() - 1) * lineskip + destRect.left() * depth; lineskip = -lineskip; } else { - src = mem + r.top() * lineskip + r.left() * depth; - dest = mem + p.y() * lineskip + p.x() * depth; + src = mem + sourceRect.top() * lineskip + sourceRect.left() * depth; + dest = mem + destRect.top() * lineskip + destRect.left() * depth; } - const int w = r.width(); - int h = r.height(); + const int w = sourceRect.width(); + int h = sourceRect.height(); const int bytes = w * depth; // overlapping segments? diff --git a/src/gui/painting/qblendfunctions_p.h b/src/gui/painting/qblendfunctions_p.h index 080da98e..6997d62b 100644 --- a/src/gui/painting/qblendfunctions_p.h +++ b/src/gui/painting/qblendfunctions_p.h @@ -246,25 +246,32 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl, int dudx, int dvdx, int dudy, int dvdy, int u0, int v0, Blender blender) { - int fromY = qMax(qRound(topY), clip.top()); - int toY = qMin(qRound(bottomY), clip.top() + clip.height()); + qint64 fromY = qMax(qRound(topY), clip.top()); + qint64 toY = qMin(qRound(bottomY), clip.top() + clip.height()); if (fromY >= toY) return; qreal leftSlope = (bottomLeft.x - topLeft.x) / (bottomLeft.y - topLeft.y); qreal rightSlope = (bottomRight.x - topRight.x) / (bottomRight.y - topRight.y); - int dx_l = int(leftSlope * 0x10000); - int dx_r = int(rightSlope * 0x10000); - int x_l = int((topLeft.x + (qreal(0.5) + fromY - topLeft.y) * leftSlope + qreal(0.5)) * 0x10000); - int x_r = int((topRight.x + (qreal(0.5) + fromY - topRight.y) * rightSlope + qreal(0.5)) * 0x10000); + qint64 dx_l = qint64(leftSlope * 0x10000); + qint64 dx_r = qint64(rightSlope * 0x10000); + qint64 x_l = qint64((topLeft.x + (qreal(0.5) + fromY - topLeft.y) * leftSlope + qreal(0.5)) * 0x10000); + qint64 x_r = qint64((topRight.x + (qreal(0.5) + fromY - topRight.y) * rightSlope + qreal(0.5)) * 0x10000); - int fromX, toX, x1, x2, u, v, i, ii; + qint64 sourceRectTop = qint64(sourceRect.top()); + qint64 sourceRectLeft = qint64(sourceRect.left()); + qint64 sourceRectWidth = qint64(sourceRect.width()); + qint64 sourceRectHeight = qint64(sourceRect.height()); + qint64 clipLeft = qint64(clip.left()); + qint64 clipWidth = qint64(clip.width()); + + qint64 fromX, toX, x1, x2, u, v, i, ii; DestT *line; - for (int y = fromY; y < toY; ++y) { + for (qint64 y = fromY; y < toY; ++y) { line = reinterpret_cast(reinterpret_cast(destPixels) + y * dbpl); - fromX = qMax(x_l >> 16, clip.left()); - toX = qMin(x_r >> 16, clip.left() + clip.width()); + fromX = qMax(x_l >> 16, clipLeft); + toX = qMin(x_r >> 16, clipLeft + clipWidth); if (fromX < toX) { // Because of rounding, we can get source coordinates outside the source image. // Clamp these coordinates to the source rect to avoid segmentation fault and @@ -275,10 +282,10 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl, u = x1 * dudx + y * dudy + u0; v = x1 * dvdx + y * dvdy + v0; for (; x1 < toX; ++x1) { - int uu = u >> 16; - int vv = v >> 16; - if (uu >= sourceRect.left() && uu < sourceRect.left() + sourceRect.width() - && vv >= sourceRect.top() && vv < sourceRect.top() + sourceRect.height()) { + qint64 uu = u >> 16; + qint64 vv = v >> 16; + if (uu >= sourceRectLeft && uu < sourceRectLeft + sourceRectWidth + && vv >= sourceRectTop && vv < sourceRectTop + sourceRectHeight) { break; } u += dudx; @@ -290,10 +297,10 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl, u = (x2 - 1) * dudx + y * dudy + u0; v = (x2 - 1) * dvdx + y * dvdy + v0; for (; x2 > x1; --x2) { - int uu = u >> 16; - int vv = v >> 16; - if (uu >= sourceRect.left() && uu < sourceRect.left() + sourceRect.width() - && vv >= sourceRect.top() && vv < sourceRect.top() + sourceRect.height()) { + qint64 uu = u >> 16; + qint64 vv = v >> 16; + if (uu >= sourceRectLeft && uu < sourceRectLeft + sourceRectWidth + && vv >= sourceRectTop && vv < sourceRectTop + sourceRectHeight) { break; } u -= dudx; @@ -308,8 +315,8 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl, // Beginning of the scan line, with per-pixel checks. i = x1 - fromX; while (i) { - int uu = qBound(sourceRect.left(), u >> 16, sourceRect.left() + sourceRect.width() - 1); - int vv = qBound(sourceRect.top(), v >> 16, sourceRect.top() + sourceRect.height() - 1); + qint64 uu = qBound(sourceRectLeft, u >> 16, sourceRectLeft + sourceRectWidth - 1); + qint64 vv = qBound(sourceRectTop, v >> 16, sourceRectTop + sourceRectHeight - 1); blender.write(line, reinterpret_cast(reinterpret_cast(srcPixels) + vv * sbpl)[uu]); u += dudx; v += dvdx; @@ -348,8 +355,8 @@ void qt_transform_image_rasterize(DestT *destPixels, int dbpl, // End of the scan line, with per-pixel checks. i = toX - x2; while (i) { - int uu = qBound(sourceRect.left(), u >> 16, sourceRect.left() + sourceRect.width() - 1); - int vv = qBound(sourceRect.top(), v >> 16, sourceRect.top() + sourceRect.height() - 1); + qint64 uu = qBound(sourceRectLeft, u >> 16, sourceRectLeft + sourceRectWidth - 1); + qint64 vv = qBound(sourceRectTop, v >> 16, sourceRectTop + sourceRectHeight - 1); blender.write(line, reinterpret_cast(reinterpret_cast(srcPixels) + vv * sbpl)[uu]); u += dudx; v += dvdx; diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index 9e5605dd..08d7055b 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -2638,3 +2638,5 @@ void QConicalGradient::setAngle(qreal angle) #undef Q_DUMMY_ACCESSOR QT_END_NAMESPACE + +#include "moc_qbrush.cpp" diff --git a/src/gui/painting/qcolorspace.cpp b/src/gui/painting/qcolorspace.cpp index 5977f8f8..dd30c646 100644 --- a/src/gui/painting/qcolorspace.cpp +++ b/src/gui/painting/qcolorspace.cpp @@ -848,3 +848,5 @@ QDebug operator<<(QDebug dbg, const QColorSpace &colorSpace) #endif QT_END_NAMESPACE + +#include "moc_qcolorspace.cpp" diff --git a/src/gui/painting/qcompositionfunctions.cpp b/src/gui/painting/qcompositionfunctions.cpp index ced213e3..aa3f1489 100644 --- a/src/gui/painting/qcompositionfunctions.cpp +++ b/src/gui/painting/qcompositionfunctions.cpp @@ -1045,12 +1045,12 @@ private: static inline int mix_alpha(int da, int sa) { - return 255 - ((255 - sa) * (255 - da) >> 8); + return 255 - qt_div_255((255 - sa) * (255 - da)); } static inline uint mix_alpha_rgb64(uint da, uint sa) { - return 65535 - ((65535 - sa) * (65535 - da) >> 16); + return 65535U - qt_div_65535((65535U - sa) * (65535U - da)); } /* @@ -1337,7 +1337,7 @@ static inline void comp_func_Screen_impl(uint *Q_DECL_RESTRICT dest, const uint int da = qAlpha(d); int sa = qAlpha(s); -#define OP(a, b) 255 - (((255-a) * (255-b)) >> 8) +#define OP(a, b) 255 - qt_div_255((255-a) * (255-b)) int r = OP( qRed(d), qRed(s)); int b = OP( qBlue(d), qBlue(s)); int g = OP(qGreen(d), qGreen(s)); @@ -1367,7 +1367,7 @@ static inline void comp_func_Screen_impl(QRgba64 *Q_DECL_RESTRICT dest, const QR uint da = d.alpha(); uint sa = s.alpha(); -#define OP(a, b) 65535 - (((65535-a) * (65535-b)) >> 16) +#define OP(a, b) 65535U - qt_div_65535((65535U-a) * (65535U-b)) uint r = OP( d.red(), s.red()); uint b = OP( d.blue(), s.blue()); uint g = OP(d.green(), s.green()); diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 283923de..38bad9a6 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -560,31 +560,6 @@ void QRasterPaintEngine::updateMatrix(const QTransform &matrix) QRasterPaintEngineState *s = state(); // FALCON: get rid of this line, see drawImage call below. s->matrix = matrix; - QTransform::TransformationType txop = s->matrix.type(); - - switch (txop) { - - case QTransform::TxNone: - s->flags.int_xform = true; - break; - - case QTransform::TxTranslate: - s->flags.int_xform = qreal(int(s->matrix.dx())) == s->matrix.dx() - && qreal(int(s->matrix.dy())) == s->matrix.dy(); - break; - - case QTransform::TxScale: - s->flags.int_xform = qreal(int(s->matrix.dx())) == s->matrix.dx() - && qreal(int(s->matrix.dy())) == s->matrix.dy() - && qreal(int(s->matrix.m11())) == s->matrix.m11() - && qreal(int(s->matrix.m22())) == s->matrix.m22(); - break; - - default: // shear / perspective... - s->flags.int_xform = false; - break; - } - s->flags.tx_noshear = qt_scaleForTransform(s->matrix, &s->txscale); ensureOutlineMapper(); @@ -617,7 +592,6 @@ QRasterPaintEngineState::QRasterPaintEngineState() flags.bilinear = false; flags.legacy_rounding = false; flags.fast_text = true; - flags.int_xform = true; flags.tx_noshear = true; flags.fast_images = true; @@ -1793,7 +1767,7 @@ void QRasterPaintEngine::fill(const QVectorPath &path, const QBrush &brush) QRectF cpRect = path.controlPointRect(); const QRectF pathDeviceRect = s->matrix.mapRect(cpRect); // Skip paths that by conservative estimates are completely outside the paint device. - if (!pathDeviceRect.intersects(QRectF(d->deviceRect))) + if (!pathDeviceRect.intersects(QRectF(d->deviceRect)) || !pathDeviceRect.isValid()) return; ProcessSpans blend = d->getBrushFunc(pathDeviceRect, &s->brushData); @@ -3095,10 +3069,10 @@ QRasterPaintEnginePrivate::getPenFunc(const QRectF &rect, static QPair visibleGlyphRange(const QRectF &clip, QFontEngine *fontEngine, glyph_t *glyphs, QFixedPoint *positions, int numGlyphs) { - QFixed clipLeft = QFixed::fromReal(clip.left()); - QFixed clipRight = QFixed::fromReal(clip.right()); - QFixed clipTop = QFixed::fromReal(clip.top()); - QFixed clipBottom = QFixed::fromReal(clip.bottom()); + QFixed clipLeft = QFixed::fromReal(clip.left() - 1); + QFixed clipRight = QFixed::fromReal(clip.right() + 1); + QFixed clipTop = QFixed::fromReal(clip.top() - 1); + QFixed clipBottom = QFixed::fromReal(clip.bottom() + 1); int first = 0; while (first < numGlyphs) { @@ -3585,7 +3559,7 @@ QRasterPaintEngine::ClipType QRasterPaintEngine::clipType() const \internal Returns the bounding rect of the currently set clip. */ -QRect QRasterPaintEngine::clipBoundingRect() const +QRectF QRasterPaintEngine::clipBoundingRect() const { Q_D(const QRasterPaintEngine); @@ -3597,7 +3571,7 @@ QRect QRasterPaintEngine::clipBoundingRect() const if (clip->hasRectClip) return clip->clipRect; - return QRect(clip->xmin, clip->ymin, clip->xmax - clip->xmin, clip->ymax - clip->ymin); + return QRectF(clip->xmin, clip->ymin, clip->xmax - clip->xmin, clip->ymax - clip->ymin); } void QRasterPaintEnginePrivate::initializeRasterizer(QSpanData *data) diff --git a/src/gui/painting/qpaintengine_raster_p.h b/src/gui/painting/qpaintengine_raster_p.h index 089aadc3..7b15292e 100644 --- a/src/gui/painting/qpaintengine_raster_p.h +++ b/src/gui/painting/qpaintengine_raster_p.h @@ -111,7 +111,6 @@ public: uint bilinear : 1; uint legacy_rounding : 1; uint fast_text : 1; - uint int_xform : 1; uint tx_noshear : 1; uint fast_images : 1; }; @@ -206,7 +205,7 @@ public: ComplexClip }; ClipType clipType() const; - QRect clipBoundingRect() const; + QRectF clipBoundingRect() const; #ifdef Q_OS_WIN void setDC(HDC hdc); diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 826a7ab2..fdb7f331 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -8588,3 +8588,5 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat } QT_END_NAMESPACE + +#include "moc_qpainter.cpp" diff --git a/src/gui/painting/qpathclipper_p.h b/src/gui/painting/qpathclipper_p.h index 9444a87b..18f64c5e 100644 --- a/src/gui/painting/qpathclipper_p.h +++ b/src/gui/painting/qpathclipper_p.h @@ -156,7 +156,7 @@ public: int vertex(Direction direction) const; private: - int m_next[2][2]; + int m_next[2][2] = { { -1, -1 }, { -1, -1 } }; }; class QPathSegments @@ -296,10 +296,6 @@ inline QPathEdge::QPathEdge(int a, int b) , angle(0) , invAngle(0) { - m_next[0][0] = -1; - m_next[1][0] = -1; - m_next[0][0] = -1; - m_next[1][0] = -1; } inline int QPathEdge::next(Traversal traversal, Direction direction) const diff --git a/src/gui/painting/qpdfwriter.cpp b/src/gui/painting/qpdfwriter.cpp index cf30ea49..ae140f31 100644 --- a/src/gui/painting/qpdfwriter.cpp +++ b/src/gui/painting/qpdfwriter.cpp @@ -489,4 +489,6 @@ QT_WARNING_POP QT_END_NAMESPACE +#include "moc_qpdfwriter.cpp" + #endif // QT_NO_PDF diff --git a/src/gui/painting/qplatformbackingstore.cpp b/src/gui/painting/qplatformbackingstore.cpp index c092a715..9c9b053b 100644 --- a/src/gui/painting/qplatformbackingstore.cpp +++ b/src/gui/painting/qplatformbackingstore.cpp @@ -751,3 +751,5 @@ bool QPlatformBackingStore::scroll(const QRegion &area, int dx, int dy) } QT_END_NAMESPACE + +#include "moc_qplatformbackingstore.cpp" diff --git a/src/gui/painting/qstroker.cpp b/src/gui/painting/qstroker.cpp index cb5d395e..3b6357a8 100644 --- a/src/gui/painting/qstroker.cpp +++ b/src/gui/painting/qstroker.cpp @@ -1182,6 +1182,7 @@ void QDashStroker::processCurrentSubpath() // Check if the entire line should be clipped away or simplified bool clipIt = clipping && !lineIntersectsRect(prev, e, clip_tl, clip_br); bool skipDashing = elen * invSumLength > repetitionLimit(); + int maxDashes = dashCount; if (skipDashing || clipIt) { // Cut away full dash sequences. elen -= std::floor(elen * invSumLength) * sumLength; @@ -1196,7 +1197,7 @@ void QDashStroker::processCurrentSubpath() pos = estop; // move pos to next path element done = true; } else { // Dash is on this line - pos = dpos + estart; + pos = --maxDashes > 0 ? dpos + estart : estop; done = pos >= estop; if (++idash >= dashCount) idash = 0; diff --git a/src/gui/rhi/qrhid3d11.cpp b/src/gui/rhi/qrhid3d11.cpp index 65f0a226..ac6c4369 100644 --- a/src/gui/rhi/qrhid3d11.cpp +++ b/src/gui/rhi/qrhid3d11.cpp @@ -131,7 +131,7 @@ QRhiD3D11::QRhiD3D11(QRhiD3D11InitParams *params, QRhiD3D11NativeHandles *import dev = reinterpret_cast(importDevice->dev); if (dev) { ID3D11DeviceContext *ctx = reinterpret_cast(importDevice->context); - if (SUCCEEDED(ctx->QueryInterface(IID_ID3D11DeviceContext1, reinterpret_cast(&context)))) { + if (SUCCEEDED(ctx->QueryInterface(__uuidof(ID3D11DeviceContext1), reinterpret_cast(&context)))) { // get rid of the ref added by QueryInterface ctx->Release(); } else { @@ -171,7 +171,7 @@ static IDXGIFactory1 *createDXGIFactory2() using PtrCreateDXGIFactory2 = HRESULT (WINAPI *)(UINT, REFIID, void **); QSystemLibrary dxgilib(QStringLiteral("dxgi")); if (auto createDXGIFactory2 = reinterpret_cast(dxgilib.resolve("CreateDXGIFactory2"))) { - const HRESULT hr = createDXGIFactory2(0, IID_IDXGIFactory2, reinterpret_cast(&result)); + const HRESULT hr = createDXGIFactory2(0, __uuidof(IDXGIFactory2), reinterpret_cast(&result)); if (FAILED(hr)) { qWarning("CreateDXGIFactory2() failed to create DXGI factory: %s", qPrintable(comErrorMessage(hr))); result = nullptr; @@ -186,7 +186,7 @@ static IDXGIFactory1 *createDXGIFactory2() static IDXGIFactory1 *createDXGIFactory1() { IDXGIFactory1 *result = nullptr; - const HRESULT hr = CreateDXGIFactory1(IID_IDXGIFactory1, reinterpret_cast(&result)); + const HRESULT hr = CreateDXGIFactory1(__uuidof(IDXGIFactory1), reinterpret_cast(&result)); if (FAILED(hr)) { qWarning("CreateDXGIFactory1() failed to create DXGI factory: %s", qPrintable(comErrorMessage(hr))); result = nullptr; @@ -269,7 +269,7 @@ bool QRhiD3D11::create(QRhi::Flags flags) qWarning("Failed to create D3D11 device and context: %s", qPrintable(comErrorMessage(hr))); return false; } - if (SUCCEEDED(ctx->QueryInterface(IID_ID3D11DeviceContext1, reinterpret_cast(&context)))) { + if (SUCCEEDED(ctx->QueryInterface(__uuidof(ID3D11DeviceContext1), reinterpret_cast(&context)))) { ctx->Release(); } else { qWarning("ID3D11DeviceContext1 not supported"); @@ -280,7 +280,7 @@ bool QRhiD3D11::create(QRhi::Flags flags) featureLevel = dev->GetFeatureLevel(); } - if (FAILED(context->QueryInterface(IID_ID3DUserDefinedAnnotation, reinterpret_cast(&annotations)))) + if (FAILED(context->QueryInterface(__uuidof(ID3DUserDefinedAnnotation), reinterpret_cast(&annotations)))) annotations = nullptr; deviceLost = false; @@ -336,7 +336,7 @@ void QRhiD3D11::reportLiveObjects(ID3D11Device *device) { // this works only when params.enableDebugLayer was true ID3D11Debug *debug; - if (SUCCEEDED(device->QueryInterface(IID_ID3D11Debug, reinterpret_cast(&debug)))) { + if (SUCCEEDED(device->QueryInterface(__uuidof(ID3D11Debug), reinterpret_cast(&debug)))) { debug->ReportLiveDeviceObjects(D3D11_RLDO_DETAIL); debug->Release(); } @@ -4197,7 +4197,7 @@ bool QD3D11SwapChain::buildOrResize() // swapchain." // So just query index 0 once (per resize) and be done with it. - HRESULT hr = swapChain->GetBuffer(0, IID_ID3D11Texture2D, reinterpret_cast(&backBufferTex)); + HRESULT hr = swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast(&backBufferTex)); if (FAILED(hr)) { qWarning("Failed to query swapchain backbuffer: %s", qPrintable(comErrorMessage(hr))); return false; diff --git a/src/gui/text/qabstracttextdocumentlayout.cpp b/src/gui/text/qabstracttextdocumentlayout.cpp index 8528f598..7aa3aa74 100644 --- a/src/gui/text/qabstracttextdocumentlayout.cpp +++ b/src/gui/text/qabstracttextdocumentlayout.cpp @@ -436,7 +436,8 @@ void QAbstractTextDocumentLayout::registerHandler(int objectType, QObject *compo if (!iface) return; // ### print error message on terminal? - connect(component, SIGNAL(destroyed(QObject*)), this, SLOT(_q_handlerDestroyed(QObject*))); + QObjectPrivate::connect(component, &QObject::destroyed, d, + &QAbstractTextDocumentLayoutPrivate::_q_handlerDestroyed); QTextObjectHandler h; h.iface = iface; @@ -457,7 +458,8 @@ void QAbstractTextDocumentLayout::unregisterHandler(int objectType, QObject *com const auto it = d->handlers.constFind(objectType); if (it != d->handlers.cend() && (!component || component == it->component)) { if (component) - disconnect(component, SIGNAL(destroyed(QObject*)), this, SLOT(_q_handlerDestroyed(QObject*))); + QObjectPrivate::disconnect(component, &QObject::destroyed, d, + &QAbstractTextDocumentLayoutPrivate::_q_handlerDestroyed); d->handlers.erase(it); } } diff --git a/src/gui/text/qabstracttextdocumentlayout.h b/src/gui/text/qabstracttextdocumentlayout.h index 397dcd37..1e97ba37 100644 --- a/src/gui/text/qabstracttextdocumentlayout.h +++ b/src/gui/text/qabstracttextdocumentlayout.h @@ -129,7 +129,6 @@ private: friend class QTextEngine; friend class QTextLayout; friend class QTextLine; - Q_PRIVATE_SLOT(d_func(), void _q_handlerDestroyed(QObject *obj)) Q_PRIVATE_SLOT(d_func(), int _q_dynamicPageCountSlot()) Q_PRIVATE_SLOT(d_func(), QSizeF _q_dynamicDocumentSizeSlot()) }; diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 3d044edd..9f16af02 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -3320,3 +3320,5 @@ QDebug operator<<(QDebug stream, const QFont &font) #endif QT_END_NAMESPACE + +#include "moc_qfont.cpp" diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index a657a8c5..2011f935 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -2938,3 +2938,5 @@ Q_GUI_EXPORT QStringList qt_sort_families_by_writing_system(QChar::Script script QT_END_NAMESPACE +#include "moc_qfontdatabase.cpp" + diff --git a/src/gui/text/qinputcontrol.cpp b/src/gui/text/qinputcontrol.cpp index 80d5e6af..8c053467 100644 --- a/src/gui/text/qinputcontrol.cpp +++ b/src/gui/text/qinputcontrol.cpp @@ -140,3 +140,5 @@ bool QInputControl::isCommonTextEditShortcut(const QKeyEvent *ke) } QT_END_NAMESPACE + +#include "moc_qinputcontrol_p.cpp" diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index bb4390bc..b75904e8 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -3499,3 +3499,5 @@ QTextDocumentPrivate *QTextDocument::docHandle() const */ QT_END_NAMESPACE + +#include "moc_qtextdocument.cpp" diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index f3e6ea21..72267e93 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2123,7 +2123,7 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p { Q_Q(const QTextDocumentLayout); const QTextBlockFormat blockFormat = bl.blockFormat(); - const QTextCharFormat charFormat = QTextCursor(bl).charFormat(); + const QTextCharFormat charFormat = bl.charFormat(); QFont font(charFormat.font()); if (q->paintDevice()) font = QFont(font, q->paintDevice()); diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index ce4abac4..6336fadf 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1565,6 +1565,12 @@ void QTextEngine::shapeText(int item) const // Overwrite with 0 token to indicate failure QGlyphLayout g = availableGlyphs(&si); g.glyphs[0] = 0; + g.attributes[0].clusterStart = true; + + ushort *log_clusters = logClusters(&si); + for (int i = 0; i < itemLength; ++i) + log_clusters[i] = 0; + return; } diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index 4e5ee41e..560a0a1c 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -3929,3 +3929,5 @@ QDebug operator<<(QDebug dbg, const QTextFormat &f) #endif QT_END_NAMESPACE + +#include "moc_qtextformat.cpp" diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp index 124c530c..5458e646 100644 --- a/src/gui/text/qtexthtmlparser.cpp +++ b/src/gui/text/qtexthtmlparser.cpp @@ -784,8 +784,8 @@ void QTextHtmlParser::parseCloseTag() void QTextHtmlParser::parseExclamationTag() { ++pos; - if (hasPrefix(QLatin1Char('-'),1) && hasPrefix(QLatin1Char('-'),2)) { - pos += 3; + if (hasPrefix(QLatin1Char('-')) && hasPrefix(QLatin1Char('-'), 1)) { + pos += 2; // eat comments int end = txt.indexOf(QLatin1String("-->"), pos); pos = (end >= 0 ? end + 3 : len); @@ -880,7 +880,7 @@ QString QTextHtmlParser::parseWord() while (pos < len) { QChar c = txt.at(pos++); if (c == QLatin1Char('>') - || (c == QLatin1Char('/') && hasPrefix(QLatin1Char('>'), 1)) + || (c == QLatin1Char('/') && hasPrefix(QLatin1Char('>'))) || c == QLatin1Char('<') || c == QLatin1Char('=') || c.isSpace()) { diff --git a/src/gui/text/qtexthtmlparser_p.h b/src/gui/text/qtexthtmlparser_p.h index 31f55870..e5622afe 100644 --- a/src/gui/text/qtexthtmlparser_p.h +++ b/src/gui/text/qtexthtmlparser_p.h @@ -323,7 +323,9 @@ protected: void applyAttributes(const QStringList &attributes); void eatSpace(); inline bool hasPrefix(QChar c, int lookahead = 0) const - {return pos + lookahead < len && txt.at(pos) == c; } + { + return pos + lookahead < len && txt.at(pos + lookahead) == c; + } int margin(int i, int mar) const; bool nodeIsChildOf(int i, QTextHTMLElements id) const; diff --git a/src/gui/text/qtextimagehandler.cpp b/src/gui/text/qtextimagehandler.cpp index 053be899..e650984c 100644 --- a/src/gui/text/qtextimagehandler.cpp +++ b/src/gui/text/qtextimagehandler.cpp @@ -244,3 +244,5 @@ void QTextImageHandler::drawObject(QPainter *p, const QRectF &rect, QTextDocumen } QT_END_NAMESPACE + +#include "moc_qtextimagehandler_p.cpp" diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 26ac37b0..d4f0a5ef 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1336,13 +1336,13 @@ void QTextLayout::drawCursor(QPainter *p, const QPointF &pos, int cursorPosition bool rightToLeft = d->isRightToLeft(); if (itm >= 0) { const QScriptItem &si = d->layoutData->items.at(itm); - if (si.ascent > 0) + if (si.ascent >= 0) base = si.ascent; - if (si.descent > 0) + if (si.descent >= 0) descent = si.descent; rightToLeft = si.analysis.bidiLevel % 2; } - qreal y = position.y() + (sl.y + sl.base() - base).toReal(); + qreal y = position.y() + (sl.y + sl.base() + sl.descent - base - descent).toReal(); bool toggleAntialiasing = !(p->renderHints() & QPainter::Antialiasing) && (p->transform().type() > QTransform::TxTranslate); if (toggleAntialiasing) diff --git a/src/gui/text/qtextlist.cpp b/src/gui/text/qtextlist.cpp index 5857afa0..523c22ff 100644 --- a/src/gui/text/qtextlist.cpp +++ b/src/gui/text/qtextlist.cpp @@ -320,3 +320,5 @@ void QTextList::add(const QTextBlock &block) } QT_END_NAMESPACE + +#include "moc_qtextlist.cpp" diff --git a/src/gui/text/qtextmarkdownimporter.cpp b/src/gui/text/qtextmarkdownimporter.cpp index e0d16d2d..7296a6fe 100644 --- a/src/gui/text/qtextmarkdownimporter.cpp +++ b/src/gui/text/qtextmarkdownimporter.cpp @@ -418,6 +418,7 @@ int QTextMarkdownImporter::cbEnterSpan(int spanType, void *det) } case MD_SPAN_CODE: charFmt.setFont(m_monoFont); + charFmt.setFontFixedPitch(true); break; case MD_SPAN_DEL: charFmt.setFontStrikeOut(true); @@ -607,6 +608,9 @@ void QTextMarkdownImporter::insertBlock() if (m_doc->isEmpty()) { m_cursor->setBlockFormat(blockFormat); m_cursor->setCharFormat(charFormat); + } else if (m_listItem) { + m_cursor->insertBlock(blockFormat, QTextCharFormat()); + m_cursor->setCharFormat(charFormat); } else { m_cursor->insertBlock(blockFormat, charFormat); } diff --git a/src/gui/text/qtextmarkdownwriter.cpp b/src/gui/text/qtextmarkdownwriter.cpp index ae63fcb4..3b4d794c 100644 --- a/src/gui/text/qtextmarkdownwriter.cpp +++ b/src/gui/text/qtextmarkdownwriter.cpp @@ -531,7 +531,7 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign col += s.length(); } else { QFontInfo fontInfo(fmt.font()); - bool monoFrag = fontInfo.fixedPitch(); + bool monoFrag = fontInfo.fixedPitch() || fmt.fontFixedPitch(); QString markers; if (!ignoreFormat) { if (monoFrag != mono && !m_indentedCodeBlock && !m_fencedCodeBlock) { diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp index 77dcae0d..2d307ab3 100644 --- a/src/gui/text/qtextobject.cpp +++ b/src/gui/text/qtextobject.cpp @@ -1863,3 +1863,5 @@ QString QTextFragment::text() const } QT_END_NAMESPACE + +#include "moc_qtextobject.cpp" diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp index 125b97a3..0b656ce8 100644 --- a/src/gui/text/qtexttable.cpp +++ b/src/gui/text/qtexttable.cpp @@ -1335,3 +1335,5 @@ void QTextTable::setFormat(const QTextTableFormat &format) */ QT_END_NAMESPACE + +#include "moc_qtexttable.cpp" diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp index 80c0f122..feab5b85 100644 --- a/src/gui/text/qzip.cpp +++ b/src/gui/text/qzip.cpp @@ -1024,13 +1024,33 @@ bool QZipReader::extractAll(const QString &destinationDir) const // create directories first const QVector allFiles = fileInfoList(); + bool foundDirs = false; + bool hasDirs = false; for (const FileInfo &fi : allFiles) { const QString absPath = destinationDir + QDir::separator() + fi.filePath; if (fi.isDir) { + foundDirs = true; if (!baseDir.mkpath(fi.filePath)) return false; if (!QFile::setPermissions(absPath, fi.permissions)) return false; + } else if (!hasDirs && fi.filePath.contains(u"/")) { + // filePath does not have leading or trailing '/', so if we find + // one, than the file path contains directories. + hasDirs = true; + } + } + + // Some zip archives can be broken in the sense that they do not report + // separate entries for directories, only for files. In this case we + // need to recreate directory structure based on the file paths. + if (hasDirs && !foundDirs) { + for (const FileInfo &fi : allFiles) { + const auto dirPath = fi.filePath.left(fi.filePath.lastIndexOf(u"/")); + if (!baseDir.mkpath(dirPath)) + return false; + // We will leave the directory permissions default in this case, + // because setting dir permissions based on file is incorrect } } diff --git a/src/gui/util/qdesktopservices.cpp b/src/gui/util/qdesktopservices.cpp index fbb63a94..4446b429 100644 --- a/src/gui/util/qdesktopservices.cpp +++ b/src/gui/util/qdesktopservices.cpp @@ -54,6 +54,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE class QOpenUrlHandlerRegistry : public QObject @@ -72,24 +74,33 @@ public: typedef QHash HandlerHash; HandlerHash handlers; +#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0) public Q_SLOTS: void handlerDestroyed(QObject *handler); +#endif }; Q_GLOBAL_STATIC(QOpenUrlHandlerRegistry, handlerRegistry) +#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0) void QOpenUrlHandlerRegistry::handlerDestroyed(QObject *handler) { + const auto lock = qt_scoped_lock(mutex); HandlerHash::Iterator it = handlers.begin(); while (it != handlers.end()) { if (it->receiver == handler) { it = handlers.erase(it); + qWarning("Please call QDesktopServices::unsetUrlHandler() before destroying a " + "registered URL handler object.\n" + "Support for destroying a registered URL handler object is deprecated, " + "and will be removed in Qt 6.6."); } else { ++it; } } } +#endif /*! \class QDesktopServices @@ -279,6 +290,10 @@ bool QDesktopServices::openUrl(const QUrl &url) Note that the handler will always be called from within the same thread that calls QDesktopServices::openUrl(). + You must call unsetUrlHandler() before destroying the handler object, so + the destruction of the handler object does not overlap with concurrent + invocations of openUrl() using it. + \sa openUrl(), unsetUrlHandler() */ void QDesktopServices::setUrlHandler(const QString &scheme, QObject *receiver, const char *method) @@ -293,13 +308,20 @@ void QDesktopServices::setUrlHandler(const QString &scheme, QObject *receiver, c h.receiver = receiver; h.name = method; registry->handlers.insert(scheme.toLower(), h); +#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0) QObject::connect(receiver, SIGNAL(destroyed(QObject*)), - registry, SLOT(handlerDestroyed(QObject*))); + registry, SLOT(handlerDestroyed(QObject*)), + Qt::DirectConnection); +#endif } /*! Removes a previously set URL handler for the specified \a scheme. + Call this function before the handler object that was registered for \a scheme + is destroyed, to prevent concurrent openUrl() calls from continuing to call + the destroyed handler object. + \sa setUrlHandler() */ void QDesktopServices::unsetUrlHandler(const QString &scheme) diff --git a/src/gui/util/qlayoutpolicy.cpp b/src/gui/util/qlayoutpolicy.cpp index 507df44a..063a220f 100644 --- a/src/gui/util/qlayoutpolicy.cpp +++ b/src/gui/util/qlayoutpolicy.cpp @@ -133,3 +133,5 @@ QDebug operator<<(QDebug dbg, const QLayoutPolicy &p) #endif QT_END_NAMESPACE + +#include "moc_qlayoutpolicy_p.cpp" diff --git a/src/gui/util/qpkmhandler.cpp b/src/gui/util/qpkmhandler.cpp index e0c3b75e..3414f9d8 100644 --- a/src/gui/util/qpkmhandler.cpp +++ b/src/gui/util/qpkmhandler.cpp @@ -57,7 +57,7 @@ struct PkmType quint32 bytesPerBlock; }; -static PkmType typeMap[5] = { +static constexpr PkmType typeMap[5] = { { 0x8D64, 8 }, // GL_ETC1_RGB8_OES { 0x9274, 8 }, // GL_COMPRESSED_RGB8_ETC2 { 0, 0 }, // unused (obsolete) diff --git a/src/gui/util/qvalidator.cpp b/src/gui/util/qvalidator.cpp index 70ed6cca..ed2b9e43 100644 --- a/src/gui/util/qvalidator.cpp +++ b/src/gui/util/qvalidator.cpp @@ -500,7 +500,7 @@ void QIntValidator::setRange(int bottom, int top) \brief the validator's lowest acceptable value By default, this property's value is derived from the lowest signed - integer available (typically -2147483647). + integer available (-2147483648). \sa setRange() */ @@ -514,7 +514,7 @@ void QIntValidator::setBottom(int bottom) \brief the validator's highest acceptable value By default, this property's value is derived from the highest signed - integer available (typically 2147483647). + integer available (2147483647). \sa setRange() */ @@ -1095,4 +1095,6 @@ void QRegularExpressionValidatorPrivate::setRegularExpression(const QRegularExpr QT_END_NAMESPACE +#include "moc_qvalidator.cpp" + #endif // QT_NO_VALIDATOR diff --git a/src/gui/vulkan/qvulkaninstance.cpp b/src/gui/vulkan/qvulkaninstance.cpp index 555dee3a..19a88074 100644 --- a/src/gui/vulkan/qvulkaninstance.cpp +++ b/src/gui/vulkan/qvulkaninstance.cpp @@ -531,6 +531,13 @@ void QVulkanInstance::setExtensions(const QByteArrayList &extensions) \note This function can only be called before create() and has no effect if called afterwards. + + \note Be aware that Vulkan 1.1 changes the behavior with regards to the + Vulkan API version field. In Vulkan 1.0 specifying an unsupported \a + vulkanVersion led to failing create() with \c VK_ERROR_INCOMPATIBLE_DRIVER, + as was mandated by the specification. Starting with Vulkan 1.1, the + specification disallows this, the driver must accept any version without + failing the instance creation. */ void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion) { diff --git a/src/gui/vulkan/qvulkanwindow.cpp b/src/gui/vulkan/qvulkanwindow.cpp index cee1f254..4a679567 100644 --- a/src/gui/vulkan/qvulkanwindow.cpp +++ b/src/gui/vulkan/qvulkanwindow.cpp @@ -195,6 +195,23 @@ Q_LOGGING_CATEGORY(lcGuiVk, "qt.vulkan") \note QVulkanWindow does not expose device layers since this functionality has been deprecated since version 1.0.13 of the Vulkan API. + \section1 Layers, device features, and extensions + + To enable instance layers, call QVulkanInstance::setLayers() before creating + the QVulkanInstance. To query what instance layer are available, call + QVulkanInstance::supportedLayers(). + + To enable device extensions, call setDeviceExtensions() early on when setting + up the QVulkanWindow. To query what device extensions are available, call + supportedDeviceExtensions(). + + Specifying an unsupported layer or extension is handled gracefully: this will + not fail instance or device creation, but the layer or extension request is + rather ignored. + + When it comes to device features, QVulkanWindow enables all Vulkan 1.0 + features that are reported as supported from vkGetPhysicalDeviceFeatures(). + \sa QVulkanInstance, QWindow */ @@ -712,6 +729,12 @@ void QVulkanWindowPrivate::init() devInfo.enabledExtensionCount = devExts.count(); devInfo.ppEnabledExtensionNames = devExts.constData(); + // Enable all 1.0 features. + VkPhysicalDeviceFeatures features; + memset(&features, 0, sizeof(features)); + f->vkGetPhysicalDeviceFeatures(physDev, &features); + devInfo.pEnabledFeatures = &features; + // Device layers are not supported by QVulkanWindow since that's an already deprecated // API. However, have a workaround for systems with older API and layers (f.ex. L4T // 24.2 for the Jetson TX1 provides API 1.0.13 and crashes when the validation layer @@ -2020,7 +2043,7 @@ void QVulkanWindowPrivate::endFrame() // order to circumvent driver frame callbacks inst->presentAboutToBeQueued(q); - err = vkQueuePresentKHR(gfxQueue, &presInfo); + err = vkQueuePresentKHR(presQueue, &presInfo); if (err != VK_SUCCESS) { if (err == VK_ERROR_OUT_OF_DATE_KHR) { recreateSwapChain(); @@ -2729,3 +2752,5 @@ QMatrix4x4 QVulkanWindow::clipCorrectionMatrix() } QT_END_NAMESPACE + +#include "moc_qvulkanwindow.cpp" diff --git a/src/network/access/qhttp2configuration.cpp b/src/network/access/qhttp2configuration.cpp index 408f141e..e4126905 100644 --- a/src/network/access/qhttp2configuration.cpp +++ b/src/network/access/qhttp2configuration.cpp @@ -159,7 +159,7 @@ QHttp2Configuration::~QHttp2Configuration() /*! If \a enable is \c true, a remote server can potentially - use server push to send reponses in advance. + use server push to send responses in advance. \sa serverPushEnabled */ diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp index ddd661cc..39dd4608 100644 --- a/src/network/access/qhttp2protocolhandler.cpp +++ b/src/network/access/qhttp2protocolhandler.cpp @@ -1135,8 +1135,6 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader // moment and we are probably not done yet. So we extract url and set it // here, if needed. int statusCode = 0; - QUrl redirectUrl; - for (const auto &pair : headers) { const auto &name = pair.name; auto value = pair.value; @@ -1159,8 +1157,6 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader if (ok) httpReply->setContentLength(length); } else { - if (name == "location") - redirectUrl = QUrl::fromEncoded(value); QByteArray binder(", "); if (name == "set-cookie") binder = "\n"; @@ -1225,8 +1221,20 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader } } - if (QHttpNetworkReply::isHttpRedirect(statusCode) && redirectUrl.isValid()) - httpReply->setRedirectUrl(redirectUrl); + if (QHttpNetworkReply::isHttpRedirect(statusCode) && httpRequest.isFollowRedirects()) { + QHttpNetworkConnectionPrivate::ParseRedirectResult result = + m_connection->d_func()->parseRedirectResponse(httpReply); + if (result.errorCode != QNetworkReply::NoError) { + auto errorString = m_connection->d_func()->errorDetail(result.errorCode, m_socket); + finishStreamWithError(stream, result.errorCode, errorString); + sendRST_STREAM(stream.streamID, INTERNAL_ERROR); + markAsReset(stream.streamID); + return; + } + + if (result.redirectUrl.isValid()) + httpReply->setRedirectUrl(result.redirectUrl); + } if (httpReplyPrivate->isCompressed() && httpRequest.d->autoDecompress) httpReplyPrivate->removeAutoDecompressHeader(); diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 1bef9157..db4dd591 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -462,7 +462,12 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket else channels[i].authMethod = priv->method; - if (priv->phase == QAuthenticatorPrivate::Done) { + if (priv->phase == QAuthenticatorPrivate::Done || + (priv->phase == QAuthenticatorPrivate::Start + && priv->method == QAuthenticatorPrivate::Ntlm)) { + if (priv->phase == QAuthenticatorPrivate::Start) + priv->phase = QAuthenticatorPrivate::Phase1; + pauseConnection(); if (!isProxy) { if (channels[i].authenticationCredentialsSent) { @@ -528,10 +533,23 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket return false; } -QUrl QHttpNetworkConnectionPrivate::parseRedirectResponse(QAbstractSocket *socket, QHttpNetworkReply *reply) +// Used by the HTTP1 code-path +QUrl QHttpNetworkConnectionPrivate::parseRedirectResponse(QAbstractSocket *socket, + QHttpNetworkReply *reply) +{ + ParseRedirectResult result = parseRedirectResponse(reply); + if (result.errorCode != QNetworkReply::NoError) { + emitReplyError(socket, reply, result.errorCode); + return {}; + } + return std::move(result.redirectUrl); +} + +QHttpNetworkConnectionPrivate::ParseRedirectResult +QHttpNetworkConnectionPrivate::parseRedirectResponse(QHttpNetworkReply *reply) { if (!reply->request().isFollowRedirects()) - return QUrl(); + return {{}, QNetworkReply::NoError}; QUrl redirectUrl; const QList > fields = reply->header(); @@ -542,17 +560,13 @@ QUrl QHttpNetworkConnectionPrivate::parseRedirectResponse(QAbstractSocket *socke } } - // If the location url is invalid/empty, we emit ProtocolUnknownError - if (!redirectUrl.isValid()) { - emitReplyError(socket, reply, QNetworkReply::ProtocolUnknownError); - return QUrl(); - } + // If the location url is invalid/empty, we return ProtocolUnknownError + if (!redirectUrl.isValid()) + return {{}, QNetworkReply::ProtocolUnknownError}; // Check if we have exceeded max redirects allowed - if (reply->request().redirectCount() <= 0) { - emitReplyError(socket, reply, QNetworkReply::TooManyRedirectsError); - return QUrl(); - } + if (reply->request().redirectCount() <= 0) + return {{}, QNetworkReply::TooManyRedirectsError}; // Resolve the URL if it's relative if (redirectUrl.isRelative()) @@ -573,8 +587,7 @@ QUrl QHttpNetworkConnectionPrivate::parseRedirectResponse(QAbstractSocket *socke if (priorUrl.host() != redirectUrl.host() || priorUrl.scheme() != redirectUrl.scheme() || priorUrl.port() != redirectUrl.port()) { - emitReplyError(socket, reply, QNetworkReply::InsecureRedirectError); - return QUrl(); + return {{}, QNetworkReply::InsecureRedirectError}; } break; case QNetworkRequest::UserVerifiedRedirectPolicy: @@ -583,10 +596,9 @@ QUrl QHttpNetworkConnectionPrivate::parseRedirectResponse(QAbstractSocket *socke Q_ASSERT(!"Unexpected redirect policy"); } } else { - emitReplyError(socket, reply, QNetworkReply::ProtocolUnknownError); - return QUrl(); + return {{}, QNetworkReply::ProtocolUnknownError}; } - return redirectUrl; + return {std::move(redirectUrl), QNetworkReply::NoError}; } void QHttpNetworkConnectionPrivate::createAuthorization(QAbstractSocket *socket, QHttpNetworkRequest &request) @@ -1446,7 +1458,7 @@ void QHttpNetworkConnection::setCacheProxy(const QNetworkProxy &networkProxy) d->networkProxy = networkProxy; // update the authenticator if (!d->networkProxy.user().isEmpty()) { - for (int i = 0; i < d->activeChannelCount; ++i) { + for (int i = 0; i < d->channelCount; ++i) { d->channels[i].proxyAuthenticator.setUser(d->networkProxy.user()); d->channels[i].proxyAuthenticator.setPassword(d->networkProxy.password()); } @@ -1462,7 +1474,7 @@ QNetworkProxy QHttpNetworkConnection::cacheProxy() const void QHttpNetworkConnection::setTransparentProxy(const QNetworkProxy &networkProxy) { Q_D(QHttpNetworkConnection); - for (int i = 0; i < d->activeChannelCount; ++i) + for (int i = 0; i < d->channelCount; ++i) d->channels[i].setProxy(networkProxy); } diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index 845b55bc..5fed62fc 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -273,6 +273,12 @@ public: void emitReplyError(QAbstractSocket *socket, QHttpNetworkReply *reply, QNetworkReply::NetworkError errorCode); bool handleAuthenticateChallenge(QAbstractSocket *socket, QHttpNetworkReply *reply, bool isProxy, bool &resend); + struct ParseRedirectResult { + QUrl redirectUrl; + QNetworkReply::NetworkError errorCode; + }; + ParseRedirectResult parseRedirectResponse(QHttpNetworkReply *reply); + // Used by the HTTP1 code-path QUrl parseRedirectResponse(QAbstractSocket *socket, QHttpNetworkReply *reply); #ifndef QT_NO_NETWORKPROXY diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 517c4608..a10fe9e3 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -755,7 +755,7 @@ bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const store is enabled, these policies will be preserved in the store. In case both cache and store contain the same known hosts, policies from cache are considered to be more up-to-date (and thus will overwrite the previous values in the store). - If this behavior is undesired, enable HSTS store before enabling Strict Tranport + If this behavior is undesired, enable HSTS store before enabling Strict Transport Security. By default, the persistent store of HSTS policies is disabled. \sa isStrictTransportSecurityStoreEnabled(), setStrictTransportSecurityEnabled(), diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index bcdf6ee2..3b6deb82 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -680,7 +680,7 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QIODevice *data) // read until EOF from data if (Q_UNLIKELY(copyDevice)) { qCritical("QNetworkReplyImpl: copy from QIODevice already in progress -- " - "backend probly needs to be fixed"); + "backend probably needs to be fixed"); return; } diff --git a/src/network/access/qnetworkreplywasmimpl.cpp b/src/network/access/qnetworkreplywasmimpl.cpp index 2ee57a08..7f23390a 100644 --- a/src/network/access/qnetworkreplywasmimpl.cpp +++ b/src/network/access/qnetworkreplywasmimpl.cpp @@ -234,10 +234,13 @@ void QNetworkReplyWasmImplPrivate::doSendRequest() } } + QByteArray userName, password; // username & password if (!request.url().userInfo().isEmpty()) { - attr.userName = request.url().userName().toUtf8(); - attr.password = request.url().password().toUtf8(); + userName = request.url().userName().toUtf8(); + password = request.url().password().toUtf8(); + attr.userName = userName.constData(); + attr.password = password.constData(); } attr.attributes = EMSCRIPTEN_FETCH_LOAD_TO_MEMORY; @@ -265,7 +268,8 @@ void QNetworkReplyWasmImplPrivate::doSendRequest() attr.userData = reinterpret_cast(this); QString dPath = QStringLiteral("/home/web_user/") + request.url().fileName(); - attr.destinationPath = dPath.toUtf8(); + QByteArray destinationPath = dPath.toUtf8(); + attr.destinationPath = destinationPath.constData(); m_fetch = emscripten_fetch(&attr, request.url().toString().toUtf8()); } diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 03ed2a45..0235790e 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtNetwork module of the Qt Toolkit. @@ -423,6 +423,11 @@ QT_BEGIN_NAMESPACE for example, to ask the user whether to accept the redirect, or to decide based on some app-specific configuration. + + \note When Qt handles redirects it will, for legacy and compatibility + reasons, issue the redirected request using GET when the server returns + a 301 or 302 response, regardless of the original method used, unless it was + HEAD. */ /*! @@ -1036,9 +1041,10 @@ static QByteArray headerValue(QNetworkRequest::KnownHeaders header, const QVaria case QNetworkRequest::LastModifiedHeader: case QNetworkRequest::IfModifiedSinceHeader: switch (value.userType()) { + // Generate RFC 1123/822 dates: case QMetaType::QDate: + return QNetworkHeadersPrivate::toHttpDate(value.toDate().startOfDay(Qt::UTC)); case QMetaType::QDateTime: - // generate RFC 1123/822 dates: return QNetworkHeadersPrivate::toHttpDate(value.toDateTime()); default: @@ -1482,8 +1488,7 @@ QDateTime QNetworkHeadersPrivate::fromHttpDate(const QByteArray &value) QByteArray QNetworkHeadersPrivate::toHttpDate(const QDateTime &dt) { - return QLocale::c().toString(dt, u"ddd, dd MMM yyyy hh:mm:ss 'GMT'") - .toLatin1(); + return QLocale::c().toString(dt.toUTC(), u"ddd, dd MMM yyyy hh:mm:ss 'GMT'").toLatin1(); } QT_END_NAMESPACE diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index d9fe7bc4..ccd04b29 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -50,6 +50,7 @@ #include #include #include +#include "private/qsystemlibrary_p.h" #ifdef Q_OS_WIN #include @@ -1563,7 +1564,7 @@ static bool q_SSPI_library_load() // Initialize security interface if (pSecurityFunctionTable == nullptr) { - securityDLLHandle = LoadLibrary(L"secur32.dll"); + securityDLLHandle = QSystemLibrary::load(L"secur32"); if (securityDLLHandle != nullptr) { INIT_SECURITY_INTERFACE pInitSecurityInterface = reinterpret_cast( diff --git a/src/network/kernel/qauthenticator_p.h b/src/network/kernel/qauthenticator_p.h index 1813634e..b234925a 100644 --- a/src/network/kernel/qauthenticator_p.h +++ b/src/network/kernel/qauthenticator_p.h @@ -91,6 +91,7 @@ public: enum Phase { Start, + Phase1, Phase2, Done, Invalid diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp index 9b0a2ee6..73679c9e 100644 --- a/src/network/kernel/qhostinfo_unix.cpp +++ b/src/network/kernel/qhostinfo_unix.cpp @@ -122,7 +122,6 @@ static QFunctionPointer resolveSymbol(QLibrary &lib, const char *sym) LibResolv::LibResolv() { - QLibrary lib; #ifdef LIBRESOLV_SO lib.setFileName(QStringLiteral(LIBRESOLV_SO)); if (!lib.load()) diff --git a/src/network/kernel/qnetworkinterface.cpp b/src/network/kernel/qnetworkinterface.cpp index 6e87a783..c89d7f89 100644 --- a/src/network/kernel/qnetworkinterface.cpp +++ b/src/network/kernel/qnetworkinterface.cpp @@ -489,7 +489,7 @@ void QNetworkAddressEntry::clearAddressLifetime() \since 5.11 Returns \c true if this address is permanent on this interface, \c false if - it's temporary. A permenant address is one which has no expiration time and + it's temporary. A permanent address is one which has no expiration time and is often static (manually configured). If this information could not be determined, this function returns \c true. diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp index 4c57bff3..e7889b62 100644 --- a/src/network/kernel/qnetworkinterface_unix.cpp +++ b/src/network/kernel/qnetworkinterface_unix.cpp @@ -113,6 +113,7 @@ uint QNetworkInterfaceManager::interfaceIndexFromName(const QString &name) qt_safe_close(socket); return id; #else + Q_UNUSED(name); return 0; #endif } @@ -232,6 +233,7 @@ static QNetworkInterfacePrivate *findInterface(int socket, QList::Iterator if_it = interfaces.begin(); for ( ; if_it != interfaces.end(); ++if_it) diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp index 3cabdd0b..745e26ac 100644 --- a/src/network/kernel/qnetworkproxy.cpp +++ b/src/network/kernel/qnetworkproxy.cpp @@ -189,7 +189,7 @@ QNetworkProxy sets different capabilities by default when the object is created (see QNetworkProxy::ProxyType for a list of the - defaults). However, it is possible to change the capabitilies + defaults). However, it is possible to change the capabilities after the object has been created with setCapabilities(). The capabilities that QNetworkProxy supports are: @@ -1705,4 +1705,6 @@ QDebug operator<<(QDebug debug, const QNetworkProxyQuery &proxyQuery) QT_END_NAMESPACE +#include "moc_qnetworkproxy.cpp" + #endif // QT_NO_NETWORKPROXY diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index e7fc1714..59f8253c 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Copyright (C) 2016 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** @@ -437,7 +437,7 @@ \value DontShareAddress Bind the address and port exclusively, so that no other services are allowed to rebind. By passing this option to - QAbstractSocket::bind(), you are guaranteed that on successs, your service + QAbstractSocket::bind(), you are guaranteed that on success, your service is the only one that listens to the address and port. No services are allowed to rebind, even if they pass ReuseAddressHint. This option provides more security than ShareAddress, but on certain operating @@ -1404,12 +1404,29 @@ void QAbstractSocketPrivate::pauseSocketNotifiers(QAbstractSocket *socket) QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine; if (!socketEngine) return; - socket->d_func()->prePauseReadSocketNotifierState = socketEngine->isReadNotificationEnabled(); - socket->d_func()->prePauseWriteSocketNotifierState = socketEngine->isWriteNotificationEnabled(); - socket->d_func()->prePauseExceptionSocketNotifierState = socketEngine->isExceptionNotificationEnabled(); - socketEngine->setReadNotificationEnabled(false); - socketEngine->setWriteNotificationEnabled(false); - socketEngine->setExceptionNotificationEnabled(false); + bool read = socketEngine->isReadNotificationEnabled(); + bool write = socketEngine->isWriteNotificationEnabled(); + bool except = socketEngine->isExceptionNotificationEnabled(); + +#ifdef QABSTRACTSOCKET_DEBUG + qDebug() << socketEngine->socketDescriptor() + << "pause notifiers, storing 'true' states, currently read:" << read + << "write:" << write << "except:" << except; +#endif + // We do this if-check to avoid accidentally overwriting any previously stored state + // It will reset to false once the socket is re-enabled. + if (read) { + socket->d_func()->prePauseReadSocketNotifierState = true; + socketEngine->setReadNotificationEnabled(false); + } + if (write) { + socket->d_func()->prePauseWriteSocketNotifierState = true; + socketEngine->setWriteNotificationEnabled(false); + } + if (except) { + socket->d_func()->prePauseExceptionSocketNotifierState = true; + socketEngine->setExceptionNotificationEnabled(false); + } } void QAbstractSocketPrivate::resumeSocketNotifiers(QAbstractSocket *socket) @@ -1417,9 +1434,19 @@ void QAbstractSocketPrivate::resumeSocketNotifiers(QAbstractSocket *socket) QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine; if (!socketEngine) return; - socketEngine->setReadNotificationEnabled(socket->d_func()->prePauseReadSocketNotifierState); - socketEngine->setWriteNotificationEnabled(socket->d_func()->prePauseWriteSocketNotifierState); - socketEngine->setExceptionNotificationEnabled(socket->d_func()->prePauseExceptionSocketNotifierState); + QAbstractSocketPrivate *priv = socket->d_func(); +#ifdef QABSTRACTSOCKET_DEBUG + qDebug() << socketEngine->socketDescriptor() + << "Maybe resume notifiers, read:" << priv->prePauseReadSocketNotifierState + << "write:" << priv->prePauseWriteSocketNotifierState + << "exception:" << priv->prePauseExceptionSocketNotifierState; +#endif + if (qExchange(priv->prePauseReadSocketNotifierState, false)) + socketEngine->setReadNotificationEnabled(true); + if (qExchange(priv->prePauseWriteSocketNotifierState, false)) + socketEngine->setWriteNotificationEnabled(true); + if (qExchange(priv->prePauseExceptionSocketNotifierState, false)) + socketEngine->setExceptionNotificationEnabled(true); } QAbstractSocketEngine* QAbstractSocketPrivate::getSocketEngine(QAbstractSocket *socket) diff --git a/src/network/socket/qabstractsocket_p.h b/src/network/socket/qabstractsocket_p.h index 5aa69d74..a20e0aac 100644 --- a/src/network/socket/qabstractsocket_p.h +++ b/src/network/socket/qabstractsocket_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtNetwork module of the Qt Toolkit. @@ -162,9 +162,9 @@ public: QAbstractSocket::NetworkLayerProtocol preferredNetworkLayerProtocol; - bool prePauseReadSocketNotifierState; - bool prePauseWriteSocketNotifierState; - bool prePauseExceptionSocketNotifierState; + bool prePauseReadSocketNotifierState = false; + bool prePauseWriteSocketNotifierState = false; + bool prePauseExceptionSocketNotifierState = false; static void pauseSocketNotifiers(QAbstractSocket*); static void resumeSocketNotifiers(QAbstractSocket*); static QAbstractSocketEngine* getSocketEngine(QAbstractSocket*); diff --git a/src/network/socket/qlocalserver.cpp b/src/network/socket/qlocalserver.cpp index 5ca2db70..6190e278 100644 --- a/src/network/socket/qlocalserver.cpp +++ b/src/network/socket/qlocalserver.cpp @@ -147,7 +147,7 @@ QLocalServer::~QLocalServer() In some cases, such as with Unix domain sockets on Linux, the access to the socket will be determined by file system permissions, and are created based on the umask. Setting the access flags will - overide this and will restrict or permit access as specified. + override this and will restrict or permit access as specified. Other Unix-based operating systems, such as \macos, do not honor file permissions for Unix domain sockets and by default diff --git a/src/network/socket/qlocalsocket.cpp b/src/network/socket/qlocalsocket.cpp index 8d93e1fa..23f5af47 100644 --- a/src/network/socket/qlocalsocket.cpp +++ b/src/network/socket/qlocalsocket.cpp @@ -90,7 +90,7 @@ QT_BEGIN_NAMESPACE Note that unlike in most other QIODevice subclasses, open() may not open the device directly. The function return false if the socket was already connected or if the server to connect to was not defined and true in any other case. The connected() or errorOccurred() signals will be - emitted once the device is actualy open (or the connection failed). + emitted once the device is actually open (or the connection failed). See connectToServer() for more details. */ diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp index e5b9fbbd..feb102b4 100644 --- a/src/network/socket/qnativesocketengine_unix.cpp +++ b/src/network/socket/qnativesocketengine_unix.cpp @@ -46,6 +46,7 @@ #include "qelapsedtimer.h" #include "qvarlengtharray.h" #include "qnetworkinterface.h" +#include "qendian.h" #include #include #include @@ -364,12 +365,12 @@ int QNativeSocketEnginePrivate::option(QNativeSocketEngine::SocketOption opt) co } int n, level; - int v = -1; + int v = 0; QT_SOCKOPTLEN_T len = sizeof(v); convertToLevelAndOption(opt, socketProtocol, level, n); if (n != -1 && ::getsockopt(socketDescriptor, level, n, (char *) &v, &len) != -1) - return v; + return len == 1 ? qFromUnaligned(&v) : v; return -1; } diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index 3a046fd1..97fadca0 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -1296,7 +1296,7 @@ void QSocks5SocketEnginePrivate::_q_udpSocketReadNotification() int pos = 0; const char *buf = inBuf.constData(); if (inBuf.size() < 4) { - QSOCKS5_D_DEBUG << "bugus udp data, discarding"; + QSOCKS5_D_DEBUG << "bogus udp data, discarding"; return; } QSocks5RevivedDatagram datagram; diff --git a/src/network/ssl/qdtls.cpp b/src/network/ssl/qdtls.cpp index 74fb691d..29a4df0f 100644 --- a/src/network/ssl/qdtls.cpp +++ b/src/network/ssl/qdtls.cpp @@ -876,7 +876,7 @@ bool QDtls::startHandshake(QUdpSocket *socket, const QByteArray &datagram) } /*! - If a timeout occures during the handshake, the handshakeTimeout() signal + If a timeout occurs during the handshake, the handshakeTimeout() signal is emitted. The application must call handleTimeout() to retransmit handshake messages; handleTimeout() returns \c true if a timeout has occurred, false otherwise. \a socket must be a valid pointer. diff --git a/src/network/ssl/qocspresponse.cpp b/src/network/ssl/qocspresponse.cpp index 7fc83fa5..51c9f71b 100644 --- a/src/network/ssl/qocspresponse.cpp +++ b/src/network/ssl/qocspresponse.cpp @@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE \ingroup ssl \inmodule QtNetwork - The QOcspResponse class represents the revocation status of a server's certficate, + The QOcspResponse class represents the revocation status of a server's certificate, received by the client-side socket during the TLS handshake. QSslSocket must be configured with OCSP stapling enabled. diff --git a/src/network/ssl/qsslerror.cpp b/src/network/ssl/qsslerror.cpp index cdc018a5..9db82b29 100644 --- a/src/network/ssl/qsslerror.cpp +++ b/src/network/ssl/qsslerror.cpp @@ -385,3 +385,5 @@ QDebug operator<<(QDebug debug, const QSslError::SslError &error) #endif QT_END_NAMESPACE + +#include "moc_qsslerror.cpp" diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 6367ee10..5bb6e7ee 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -188,7 +188,7 @@ behavior is identical to QTcpSocket. \value SslClientMode The socket is a client-side SSL socket. - It is either alreayd encrypted, or it is in the SSL handshake + It is either already encrypted, or it is in the SSL handshake phase (see QSslSocket::isEncrypted()). \value SslServerMode The socket is a server-side SSL socket. diff --git a/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp b/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp index 118940c6..a0d57f39 100644 --- a/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp +++ b/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp @@ -258,3 +258,5 @@ bool QDeviceDiscoveryUDev::checkDeviceType(udev_device *dev) } QT_END_NAMESPACE + +#include "moc_qdevicediscovery_udev_p.cpp" diff --git a/src/platformsupport/fbconvenience/qfbcursor.cpp b/src/platformsupport/fbconvenience/qfbcursor.cpp index e0f6b69e..0762bc4c 100644 --- a/src/platformsupport/fbconvenience/qfbcursor.cpp +++ b/src/platformsupport/fbconvenience/qfbcursor.cpp @@ -210,3 +210,5 @@ void QFbCursor::updateMouseStatus() } QT_END_NAMESPACE + +#include "moc_qfbcursor_p.cpp" diff --git a/src/platformsupport/fbconvenience/qfbscreen.cpp b/src/platformsupport/fbconvenience/qfbscreen.cpp index 76984dfe..72f683d9 100644 --- a/src/platformsupport/fbconvenience/qfbscreen.cpp +++ b/src/platformsupport/fbconvenience/qfbscreen.cpp @@ -259,3 +259,5 @@ QFbScreen::Flags QFbScreen::flags() const } QT_END_NAMESPACE + +#include "moc_qfbscreen_p.cpp" diff --git a/src/platformsupport/fbconvenience/qfbvthandler.cpp b/src/platformsupport/fbconvenience/qfbvthandler.cpp index 8aab0bad..3475442e 100644 --- a/src/platformsupport/fbconvenience/qfbvthandler.cpp +++ b/src/platformsupport/fbconvenience/qfbvthandler.cpp @@ -210,3 +210,5 @@ void QFbVtHandler::handleInt() } QT_END_NAMESPACE + +#include "moc_qfbvthandler_p.cpp" diff --git a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp index 92d6eef8..52ce36b0 100644 --- a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp +++ b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp @@ -750,8 +750,10 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format, // fake bold if ((fontDef.weight >= QFont::Bold) && !(face->style_flags & FT_STYLE_FLAG_BOLD) && !FT_IS_FIXED_WIDTH(face) && !qEnvironmentVariableIsSet("QT_NO_SYNTHESIZED_BOLD")) { if (const TT_OS2 *os2 = reinterpret_cast(FT_Get_Sfnt_Table(face, ft_sfnt_os2))) { - if (os2->usWeightClass < 700 && fontDef.pixelSize < 64) + if (os2->usWeightClass < 700 && + (fontDef.pixelSize < 64 || qEnvironmentVariableIsSet("QT_NO_SYNTHESIZED_BOLD_LIMIT"))) { embolden = true; + } } } // underline metrics diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm index 69750bdb..0672d816 100644 --- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm @@ -143,6 +143,12 @@ void QCoreTextFontDatabase::populateFontDatabase() bool QCoreTextFontDatabase::populateFamilyAliases(const QString &missingFamily) { #if defined(Q_OS_MACOS) + if (isFamilyPopulated(missingFamily)) { + // We got here because one of the other properties of the font mismatched, + // for example the style, so there's no point in populating font aliases. + return false; + } + if (m_hasPopulatedAliases) return false; diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp index 0b1c5548..d5bb76ff 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp +++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp @@ -341,3 +341,5 @@ void QEvdevMouseHandler::readMouseData() } QT_END_NAMESPACE + +#include "moc_qevdevmousehandler_p.cpp" diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp index 80a911a2..7f1f0ebd 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp +++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp @@ -979,3 +979,5 @@ void QEvdevTouchScreenHandlerThread::filterAndSendTouchPoints() QT_END_NAMESPACE + +#include "moc_qevdevtouchhandler_p.cpp" diff --git a/src/platformsupport/input/tslib/qtslib.cpp b/src/platformsupport/input/tslib/qtslib.cpp index e105f5ea..5624458f 100644 --- a/src/platformsupport/input/tslib/qtslib.cpp +++ b/src/platformsupport/input/tslib/qtslib.cpp @@ -124,3 +124,5 @@ void QTsLibMouseHandler::readMouseData() } QT_END_NAMESPACE + +#include "moc_qtslib_p.cpp" diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp index bede7097..b4b1fcab 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp +++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -71,8 +72,12 @@ Q_LOGGING_CATEGORY(qLcTray, "qt.qpa.tray") static QString iconTempPath() { QString tempPath = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); - if (!tempPath.isEmpty()) + if (!tempPath.isEmpty()) { + QString flatpakId = qEnvironmentVariable("FLATPAK_ID"); + if (!flatpakId.isEmpty() && QFileInfo::exists(QLatin1String("/.flatpak-info"))) + tempPath += QLatin1String("/app/") + flatpakId; return tempPath; + } tempPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation); diff --git a/src/plugins/generic/tuiotouch/qtuiohandler.cpp b/src/plugins/generic/tuiotouch/qtuiohandler.cpp index 6ad4597b..a8778865 100644 --- a/src/plugins/generic/tuiotouch/qtuiohandler.cpp +++ b/src/plugins/generic/tuiotouch/qtuiohandler.cpp @@ -560,3 +560,5 @@ void QTuioHandler::process2DObjFseq(const QOscMessage &message) QT_END_NAMESPACE +#include "moc_qtuiohandler_p.cpp" + diff --git a/src/plugins/imageformats/gif/gif.pro b/src/plugins/imageformats/gif/gif.pro index c2625be8..9d6fe396 100644 --- a/src/plugins/imageformats/gif/gif.pro +++ b/src/plugins/imageformats/gif/gif.pro @@ -1,7 +1,7 @@ TARGET = qgif SOURCES += main.cpp qgifhandler.cpp -HEADERS += main.h qgifhandler_p.h +HEADERS += qgifhandler_p.h OTHER_FILES += gif.json diff --git a/src/plugins/imageformats/gif/main.cpp b/src/plugins/imageformats/gif/main.cpp index 99387142..19135072 100644 --- a/src/plugins/imageformats/gif/main.cpp +++ b/src/plugins/imageformats/gif/main.cpp @@ -40,8 +40,6 @@ #include #include -#include "main.h" - #ifdef QT_NO_IMAGEFORMAT_GIF #undef QT_NO_IMAGEFORMAT_GIF #endif @@ -49,6 +47,17 @@ QT_BEGIN_NAMESPACE +class QGifPlugin : public QImageIOPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "gif.json") +public: + QGifPlugin(); + ~QGifPlugin(); + + Capabilities capabilities(QIODevice *device, const QByteArray &format) const override; + QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const override; +}; QGifPlugin::QGifPlugin() { @@ -74,3 +83,5 @@ QImageIOHandler *QGifPlugin::create(QIODevice *device, const QByteArray &format) } QT_END_NAMESPACE + +#include "main.moc" diff --git a/src/plugins/imageformats/gif/main.h b/src/plugins/imageformats/gif/main.h deleted file mode 100644 index 84913a31..00000000 --- a/src/plugins/imageformats/gif/main.h +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include - -#ifdef QT_NO_IMAGEFORMAT_GIF -#undef QT_NO_IMAGEFORMAT_GIF -#endif -#include - -QT_BEGIN_NAMESPACE - -class QGifPlugin : public QImageIOPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "gif.json") -public: - QGifPlugin(); - ~QGifPlugin(); - - Capabilities capabilities(QIODevice *device, const QByteArray &format) const override; - QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const override; -}; - -QT_END_NAMESPACE diff --git a/src/plugins/imageformats/ico/ico.pro b/src/plugins/imageformats/ico/ico.pro index c8bb37ef..1ac0e795 100644 --- a/src/plugins/imageformats/ico/ico.pro +++ b/src/plugins/imageformats/ico/ico.pro @@ -1,6 +1,6 @@ TARGET = qico -HEADERS += main.h qicohandler.h +HEADERS += qicohandler.h SOURCES += main.cpp qicohandler.cpp OTHER_FILES += ico.json QT += core-private diff --git a/src/plugins/imageformats/ico/main.cpp b/src/plugins/imageformats/ico/main.cpp index b00d8c7f..96e9c89c 100644 --- a/src/plugins/imageformats/ico/main.cpp +++ b/src/plugins/imageformats/ico/main.cpp @@ -37,10 +37,25 @@ ** ****************************************************************************/ -#include "main.h" +#include +#include + +#ifdef QT_NO_IMAGEFORMAT_ICO +#undef QT_NO_IMAGEFORMAT_ICO +#endif +#include "qicohandler.h" QT_BEGIN_NAMESPACE +class QICOPlugin : public QImageIOPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "ico.json") +public: + Capabilities capabilities(QIODevice *device, const QByteArray &format) const override; + QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const override; +}; + QImageIOPlugin::Capabilities QICOPlugin::capabilities(QIODevice *device, const QByteArray &format) const { if (format == "ico" || format == "cur") @@ -67,3 +82,5 @@ QImageIOHandler *QICOPlugin::create(QIODevice *device, const QByteArray &format) } QT_END_NAMESPACE + +#include "main.moc" diff --git a/src/plugins/imageformats/ico/main.h b/src/plugins/imageformats/ico/main.h deleted file mode 100644 index b5875183..00000000 --- a/src/plugins/imageformats/ico/main.h +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include - -#ifdef QT_NO_IMAGEFORMAT_ICO -#undef QT_NO_IMAGEFORMAT_ICO -#endif -#include "qicohandler.h" - -QT_BEGIN_NAMESPACE - -class QICOPlugin : public QImageIOPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "ico.json") -public: - Capabilities capabilities(QIODevice *device, const QByteArray &format) const override; - QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const override; -}; - -QT_END_NAMESPACE diff --git a/src/plugins/imageformats/ico/qicohandler.cpp b/src/plugins/imageformats/ico/qicohandler.cpp index dc6753f6..25d3eb7f 100644 --- a/src/plugins/imageformats/ico/qicohandler.cpp +++ b/src/plugins/imageformats/ico/qicohandler.cpp @@ -56,6 +56,8 @@ QT_BEGIN_NAMESPACE +namespace { + // These next two structs represent how the icon information is stored // in an ICO file. typedef struct @@ -95,6 +97,8 @@ typedef struct { // BMP information header } BMP_INFOHDR ,*LPBMP_INFOHDR; #define BMP_INFOHDR_SIZE 40 +} + class ICOReader { public: diff --git a/src/plugins/imageformats/jpeg/jpeg.pro b/src/plugins/imageformats/jpeg/jpeg.pro index fa14dd9c..07ccffbe 100644 --- a/src/plugins/imageformats/jpeg/jpeg.pro +++ b/src/plugins/imageformats/jpeg/jpeg.pro @@ -3,7 +3,7 @@ TARGET = qjpeg QT += core-private gui-private SOURCES += main.cpp qjpeghandler.cpp -HEADERS += main.h qjpeghandler_p.h +HEADERS += qjpeghandler_p.h qtConfig(system-jpeg) { QMAKE_USE += libjpeg diff --git a/src/plugins/imageformats/jpeg/main.cpp b/src/plugins/imageformats/jpeg/main.cpp index 83f13c4a..b07578be 100644 --- a/src/plugins/imageformats/jpeg/main.cpp +++ b/src/plugins/imageformats/jpeg/main.cpp @@ -37,7 +37,8 @@ ** ****************************************************************************/ -#include "main.h" +#include +#include #ifdef QT_NO_IMAGEFORMAT_JPEG #undef QT_NO_IMAGEFORMAT_JPEG @@ -46,6 +47,15 @@ QT_BEGIN_NAMESPACE +class QJpegPlugin : public QImageIOPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "jpeg.json") +public: + Capabilities capabilities(QIODevice *device, const QByteArray &format) const override; + QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const override; +}; + QImageIOPlugin::Capabilities QJpegPlugin::capabilities(QIODevice *device, const QByteArray &format) const { if (format == "jpeg" || format == "jpg") @@ -72,3 +82,5 @@ QImageIOHandler *QJpegPlugin::create(QIODevice *device, const QByteArray &format } QT_END_NAMESPACE + +#include "main.moc" diff --git a/src/plugins/imageformats/jpeg/main.h b/src/plugins/imageformats/jpeg/main.h deleted file mode 100644 index 1845c8c1..00000000 --- a/src/plugins/imageformats/jpeg/main.h +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include - -#ifdef QT_NO_IMAGEFORMAT_JPEG -#undef QT_NO_IMAGEFORMAT_JPEG -#endif - -QT_BEGIN_NAMESPACE - -class QJpegPlugin : public QImageIOPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "jpeg.json") -public: - Capabilities capabilities(QIODevice *device, const QByteArray &format) const override; - QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const override; -}; - -QT_END_NAMESPACE diff --git a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp index da5235e4..7c640a21 100644 --- a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp +++ b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp @@ -170,3 +170,5 @@ void QComposeInputContext::update(Qt::InputMethodQueries q) } QT_END_NAMESPACE + +#include "moc_qcomposeplatforminputcontext.cpp" diff --git a/src/plugins/platforminputcontexts/ibus/qibusinputcontextproxy.cpp b/src/plugins/platforminputcontexts/ibus/qibusinputcontextproxy.cpp index 793c9dd9..8e202727 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusinputcontextproxy.cpp +++ b/src/plugins/platforminputcontexts/ibus/qibusinputcontextproxy.cpp @@ -24,3 +24,4 @@ QIBusInputContextProxy::~QIBusInputContextProxy() { } +#include "moc_qibusinputcontextproxy.cpp" diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp index 16c0ebfe..d61e85bd 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp +++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp @@ -782,3 +782,5 @@ QDBusConnection *QIBusPlatformInputContextPrivate::createConnection() } QT_END_NAMESPACE + +#include "moc_qibusplatforminputcontext.cpp" diff --git a/src/plugins/platforminputcontexts/ibus/qibusproxy.cpp b/src/plugins/platforminputcontexts/ibus/qibusproxy.cpp index 6b46e106..ea758f14 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusproxy.cpp +++ b/src/plugins/platforminputcontexts/ibus/qibusproxy.cpp @@ -96,3 +96,4 @@ void QIBusProxy::globalEngineChanged(const QString &engine_name) emit GlobalEngineChanged(engine_name); } +#include "moc_qibusproxy.cpp" diff --git a/src/plugins/platforminputcontexts/ibus/qibusproxyportal.cpp b/src/plugins/platforminputcontexts/ibus/qibusproxyportal.cpp index 50482e2d..54d8f731 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusproxyportal.cpp +++ b/src/plugins/platforminputcontexts/ibus/qibusproxyportal.cpp @@ -24,3 +24,4 @@ QIBusProxyPortal::~QIBusProxyPortal() { } +#include "moc_qibusproxyportal.cpp" diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp index 989d0d18..b5783bb6 100644 --- a/src/plugins/platforms/android/androidjniaccessibility.cpp +++ b/src/plugins/platforms/android/androidjniaccessibility.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #include "qdebug.h" @@ -69,12 +70,35 @@ namespace QtAndroidAccessibility static jmethodID m_setEnabledMethodID = 0; static jmethodID m_setFocusableMethodID = 0; static jmethodID m_setFocusedMethodID = 0; + static jmethodID m_setHeadingMethodID = 0; static jmethodID m_setScrollableMethodID = 0; static jmethodID m_setTextSelectionMethodID = 0; static jmethodID m_setVisibleToUserMethodID = 0; static bool m_accessibilityActivated = false; + // This object is needed to schedule the execution of the code that + // deals with accessibility instances to the Qt main thread. + // Because of that almost every method here is split into two parts. + // The _helper part is executed in the context of m_accessibilityContext + // on the main thread. The other part is executed in Java thread. + static QPointer m_accessibilityContext = nullptr; + + // This method is called from the Qt main thread, and normally a + // QGuiApplication instance will be used as a parent. + void createAccessibilityContextObject(QObject *parent) + { + if (m_accessibilityContext) + m_accessibilityContext->deleteLater(); + m_accessibilityContext = new QObject(parent); + } + + template + void runInObjectContext(QObject *context, Func &&func, Ret *retVal) + { + QMetaObject::invokeMethod(context, func, Qt::BlockingQueuedConnection, retVal); + } + void initialize() { QJNIObjectPrivate::callStaticMethod(QtAndroid::applicationClass(), @@ -110,14 +134,17 @@ namespace QtAndroidAccessibility return iface; } - void notifyLocationChange() + void notifyLocationChange(uint accessibilityObjectId) { - QtAndroid::notifyAccessibilityLocationChange(); + QtAndroid::notifyAccessibilityLocationChange(accessibilityObjectId); } + static int parentId_helper(int objectId); // forward declaration + void notifyObjectHide(uint accessibilityObjectId) { - QtAndroid::notifyObjectHide(accessibilityObjectId); + const auto parentObjectId = parentId_helper(accessibilityObjectId); + QtAndroid::notifyObjectHide(accessibilityObjectId, parentObjectId); } void notifyObjectFocus(uint accessibilityObjectId) @@ -125,7 +152,15 @@ namespace QtAndroidAccessibility QtAndroid::notifyObjectFocus(accessibilityObjectId); } - static jintArray childIdListForAccessibleObject(JNIEnv *env, jobject /*thiz*/, jint objectId) + static jstring jvalueForAccessibleObject(int objectId); // forward declaration + + void notifyValueChanged(uint accessibilityObjectId) + { + jstring value = jvalueForAccessibleObject(accessibilityObjectId); + QtAndroid::notifyValueChanged(accessibilityObjectId, value); + } + + static QVarLengthArray childIdListForAccessibleObject_helper(int objectId) { QAccessibleInterface *iface = interfaceFromId(objectId); if (iface && iface->isValid()) { @@ -137,6 +172,18 @@ namespace QtAndroidAccessibility if (child && child->isValid()) ifaceIdArray.append(QAccessible::uniqueId(child)); } + return ifaceIdArray; + } + return {}; + } + + static jintArray childIdListForAccessibleObject(JNIEnv *env, jobject /*thiz*/, jint objectId) + { + if (m_accessibilityContext) { + QVarLengthArray ifaceIdArray; + runInObjectContext(m_accessibilityContext, [objectId]() { + return childIdListForAccessibleObject_helper(objectId); + }, &ifaceIdArray); jintArray jArray = env->NewIntArray(jsize(ifaceIdArray.count())); env->SetIntArrayRegion(jArray, 0, ifaceIdArray.count(), ifaceIdArray.data()); return jArray; @@ -145,7 +192,7 @@ namespace QtAndroidAccessibility return env->NewIntArray(jsize(0)); } - static jint parentId(JNIEnv */*env*/, jobject /*thiz*/, jint objectId) + static int parentId_helper(int objectId) { QAccessibleInterface *iface = interfaceFromId(objectId); if (iface && iface->isValid()) { @@ -159,7 +206,18 @@ namespace QtAndroidAccessibility return -1; } - static jobject screenRect(JNIEnv *env, jobject /*thiz*/, jint objectId) + static jint parentId(JNIEnv */*env*/, jobject /*thiz*/, jint objectId) + { + jint result = -1; + if (m_accessibilityContext) { + runInObjectContext(m_accessibilityContext, [objectId]() { + return parentId_helper(objectId); + }, &result); + } + return result; + } + + static QRect screenRect_helper(int objectId) { QRect rect; QAccessibleInterface *iface = interfaceFromId(objectId); @@ -171,14 +229,24 @@ namespace QtAndroidAccessibility const auto parentRect = QHighDpi::toNativePixels(iface->parent()->rect(), iface->parent()->window()); rect = rect.intersected(parentRect); } + return rect; + } + static jobject screenRect(JNIEnv *env, jobject /*thiz*/, jint objectId) + { + QRect rect; + if (m_accessibilityContext) { + runInObjectContext(m_accessibilityContext, [objectId]() { + return screenRect_helper(objectId); + }, &rect); + } jclass rectClass = env->FindClass("android/graphics/Rect"); jmethodID ctor = env->GetMethodID(rectClass, "", "(IIII)V"); jobject jrect = env->NewObject(rectClass, ctor, rect.left(), rect.top(), rect.right(), rect.bottom()); return jrect; } - static jint hitTest(JNIEnv */*env*/, jobject /*thiz*/, jfloat x, jfloat y) + static int hitTest_helper(float x, float y) { QAccessibleInterface *root = interfaceFromId(-1); if (root && root->isValid()) { @@ -196,17 +264,29 @@ namespace QtAndroidAccessibility return -1; } + static jint hitTest(JNIEnv */*env*/, jobject /*thiz*/, jfloat x, jfloat y) + { + jint result = -1; + if (m_accessibilityContext) { + runInObjectContext(m_accessibilityContext, [x, y]() { + return hitTest_helper(x, y); + }, &result); + } + return result; + } + static void invokeActionOnInterfaceInMainThread(QAccessibleActionInterface* actionInterface, const QString& action) { + // Queue the action and return back to Java thread, so that we do not + // block it for too long QMetaObject::invokeMethod(qApp, [actionInterface, action]() { actionInterface->doAction(action); - }); + }, Qt::QueuedConnection); } - static jboolean clickAction(JNIEnv */*env*/, jobject /*thiz*/, jint objectId) + static bool clickAction_helper(int objectId) { -// qDebug() << "A11Y: CLICK: " << objectId; QAccessibleInterface *iface = interfaceFromId(objectId); if (!iface || !iface->isValid() || !iface->actionInterface()) return false; @@ -225,20 +305,45 @@ namespace QtAndroidAccessibility return true; } - static jboolean scrollForward(JNIEnv */*env*/, jobject /*thiz*/, jint objectId) + static jboolean clickAction(JNIEnv */*env*/, jobject /*thiz*/, jint objectId) + { + bool result = false; + if (m_accessibilityContext) { + runInObjectContext(m_accessibilityContext, [objectId]() { + return clickAction_helper(objectId); + }, &result); + } + return result; + } + + static bool scroll_helper(int objectId, const QString &actionName) { QAccessibleInterface *iface = interfaceFromId(objectId); if (iface && iface->isValid()) - return QAccessibleBridgeUtils::performEffectiveAction(iface, QAccessibleActionInterface::increaseAction()); + return QAccessibleBridgeUtils::performEffectiveAction(iface, actionName); return false; } + static jboolean scrollForward(JNIEnv */*env*/, jobject /*thiz*/, jint objectId) + { + bool result = false; + if (m_accessibilityContext) { + runInObjectContext(m_accessibilityContext, [objectId]() { + return scroll_helper(objectId, QAccessibleActionInterface::increaseAction()); + }, &result); + } + return result; + } + static jboolean scrollBackward(JNIEnv */*env*/, jobject /*thiz*/, jint objectId) { - QAccessibleInterface *iface = interfaceFromId(objectId); - if (iface && iface->isValid()) - return QAccessibleBridgeUtils::performEffectiveAction(iface, QAccessibleActionInterface::decreaseAction()); - return false; + bool result = false; + if (m_accessibilityContext) { + runInObjectContext(m_accessibilityContext, [objectId]() { + return scroll_helper(objectId, QAccessibleActionInterface::decreaseAction()); + }, &result); + } + return result; } @@ -251,68 +356,182 @@ if (!clazz) { \ //__android_log_print(ANDROID_LOG_FATAL, m_qtTag, m_methodErrorMsg, METHOD_NAME, METHOD_SIGNATURE); + static QString textFromValue(QAccessibleInterface *iface) + { + QString valueStr; + QAccessibleValueInterface *valueIface = iface->valueInterface(); + if (valueIface) { + const QVariant valueVar = valueIface->currentValue(); + const auto type = static_cast(valueVar.type()); + if (type == QMetaType::Double || type == QMetaType::Float) { + // QVariant's toString() formats floating-point values with + // FloatingPointShortest, which is not an accessible + // representation; nor, in many cases, is it suitable to the UI + // element whose value we're looking at. So roll our own + // A11Y-friendly conversion to string. + const double val = valueVar.toDouble(); + // Try to use minimumStepSize() to determine precision + bool stepIsValid = false; + const double step = qAbs(valueIface->minimumStepSize().toDouble(&stepIsValid)); + if (!stepIsValid || qFuzzyIsNull(step)) { + // Ignore step, use default precision + valueStr = qFuzzyIsNull(val) ? QStringLiteral("0") : QString::number(val, 'f'); + } else { + const int precision = [](double s) { + int count = 0; + while (s < 1. && !qFuzzyCompare(s, 1.)) { + ++count; + s *= 10; + } + // If s is now 1.25, we want to show some more digits, + // but don't want to get silly with a step like 1./7; + // so only include a few extra digits. + const int stop = count + 3; + const auto fractional = [](double v) { + double whole = 0.0; + std::modf(v + 0.5, &whole); + return qAbs(v - whole); + }; + s = fractional(s); + while (count < stop && !qFuzzyIsNull(s)) { + ++count; + s = fractional(s * 10); + } + return count; + }(step); + valueStr = qFuzzyIsNull(val / step) ? QStringLiteral("0") + : QString::number(val, 'f', precision); + } + } else { + valueStr = valueVar.toString(); + } + } + return valueStr; + } + static jstring jvalueForAccessibleObject(int objectId) + { + QAccessibleInterface *iface = interfaceFromId(objectId); + const QString value = textFromValue(iface); + QJNIEnvironmentPrivate env; + jstring jstr = env->NewString((jchar*)value.constData(), (jsize)value.size()); +#ifdef QT_DEBUG + env->ExceptionDescribe(); +#endif // QT_DEBUG + env->ExceptionClear(); + return jstr; + } - static jstring descriptionForAccessibleObject_helper(JNIEnv *env, QAccessibleInterface *iface) + static QString descriptionForInterface(QAccessibleInterface *iface) { QString desc; if (iface && iface->isValid()) { + bool hasValue = false; desc = iface->text(QAccessible::Name); if (desc.isEmpty()) desc = iface->text(QAccessible::Description); if (desc.isEmpty()) { desc = iface->text(QAccessible::Value); - if (desc.isEmpty()) { - if (QAccessibleValueInterface *valueIface = iface->valueInterface()) { - desc= valueIface->currentValue().toString(); - } + hasValue = !desc.isEmpty(); + } + if (!hasValue && iface->valueInterface()) { + const QString valueStr = textFromValue(iface); + if (!valueStr.isEmpty()) { + if (!desc.isEmpty()) + desc.append(QChar(QChar::Space)); + desc.append(valueStr); } } } - return env->NewString((jchar*) desc.constData(), (jsize) desc.size()); + return desc; + } + + static QString descriptionForAccessibleObject_helper(int objectId) + { + QAccessibleInterface *iface = interfaceFromId(objectId); + return descriptionForInterface(iface); } static jstring descriptionForAccessibleObject(JNIEnv *env, jobject /*thiz*/, jint objectId) { - QAccessibleInterface *iface = interfaceFromId(objectId); - return descriptionForAccessibleObject_helper(env, iface); + QString desc; + if (m_accessibilityContext) { + runInObjectContext(m_accessibilityContext, [objectId]() { + return descriptionForAccessibleObject_helper(objectId); + }, &desc); + } + return env->NewString((jchar*) desc.constData(), (jsize) desc.size()); } - static bool populateNode(JNIEnv *env, jobject /*thiz*/, jint objectId, jobject node) + + struct NodeInfo { + bool valid = false; + QAccessible::State state; + QAccessible::Role role; + QStringList actions; + QString description; + bool hasTextSelection = false; + int selectionStart = 0; + int selectionEnd = 0; + }; + + static NodeInfo populateNode_helper(int objectId) + { + NodeInfo info; QAccessibleInterface *iface = interfaceFromId(objectId); - if (!iface || !iface->isValid()) { + if (iface && iface->isValid()) { + info.valid = true; + info.state = iface->state(); + info.role = iface->role(); + info.actions = QAccessibleBridgeUtils::effectiveActionNames(iface); + info.description = descriptionForInterface(iface); + QAccessibleTextInterface *textIface = iface->textInterface(); + if (textIface && (textIface->selectionCount() > 0)) { + info.hasTextSelection = true; + textIface->selection(0, &info.selectionStart, &info.selectionEnd); + } + } + return info; + } + + static jboolean populateNode(JNIEnv *env, jobject /*thiz*/, jint objectId, jobject node) + { + NodeInfo info; + if (m_accessibilityContext) { + runInObjectContext(m_accessibilityContext, [objectId]() { + return populateNode_helper(objectId); + }, &info); + } + if (!info.valid) { __android_log_print(ANDROID_LOG_WARN, m_qtTag, "Accessibility: populateNode for Invalid ID"); return false; } - QAccessible::State state = iface->state(); - const QStringList actions = QAccessibleBridgeUtils::effectiveActionNames(iface); - const bool hasClickableAction = actions.contains(QAccessibleActionInterface::pressAction()) - || actions.contains(QAccessibleActionInterface::toggleAction()); - const bool hasIncreaseAction = actions.contains(QAccessibleActionInterface::increaseAction()); - const bool hasDecreaseAction = actions.contains(QAccessibleActionInterface::decreaseAction()); - // try to fill in the text property, this is what the screen reader reads - jstring jdesc = descriptionForAccessibleObject_helper(env, iface); + const bool hasClickableAction = + info.actions.contains(QAccessibleActionInterface::pressAction()) || + info.actions.contains(QAccessibleActionInterface::toggleAction()); + const bool hasIncreaseAction = + info.actions.contains(QAccessibleActionInterface::increaseAction()); + const bool hasDecreaseAction = + info.actions.contains(QAccessibleActionInterface::decreaseAction()); - if (QAccessibleTextInterface *textIface = iface->textInterface()) { - if (m_setTextSelectionMethodID && textIface->selectionCount() > 0) { - int startSelection; - int endSelection; - textIface->selection(0, &startSelection, &endSelection); - env->CallVoidMethod(node, m_setTextSelectionMethodID, startSelection, endSelection); - } + if (info.hasTextSelection && m_setTextSelectionMethodID) { + env->CallVoidMethod(node, m_setTextSelectionMethodID, info.selectionStart, + info.selectionEnd); } - env->CallVoidMethod(node, m_setCheckableMethodID, (bool)state.checkable); - env->CallVoidMethod(node, m_setCheckedMethodID, (bool)state.checked); - env->CallVoidMethod(node, m_setEditableMethodID, state.editable); - env->CallVoidMethod(node, m_setEnabledMethodID, !state.disabled); - env->CallVoidMethod(node, m_setFocusableMethodID, (bool)state.focusable); - env->CallVoidMethod(node, m_setFocusedMethodID, (bool)state.focused); - env->CallVoidMethod(node, m_setVisibleToUserMethodID, !state.invisible); + env->CallVoidMethod(node, m_setCheckableMethodID, (bool)info.state.checkable); + env->CallVoidMethod(node, m_setCheckedMethodID, (bool)info.state.checked); + env->CallVoidMethod(node, m_setEditableMethodID, info.state.editable); + env->CallVoidMethod(node, m_setEnabledMethodID, !info.state.disabled); + env->CallVoidMethod(node, m_setFocusableMethodID, (bool)info.state.focusable); + env->CallVoidMethod(node, m_setFocusedMethodID, (bool)info.state.focused); + if (m_setHeadingMethodID) + env->CallVoidMethod(node, m_setHeadingMethodID, info.role == QAccessible::Heading); + env->CallVoidMethod(node, m_setVisibleToUserMethodID, !info.state.invisible); env->CallVoidMethod(node, m_setScrollableMethodID, hasIncreaseAction || hasDecreaseAction); - env->CallVoidMethod(node, m_setClickableMethodID, hasClickableAction); + env->CallVoidMethod(node, m_setClickableMethodID, hasClickableAction || info.role == QAccessible::Link); // Add ACTION_CLICK if (hasClickableAction) @@ -326,7 +545,9 @@ if (!clazz) { \ if (hasDecreaseAction) env->CallVoidMethod(node, m_addActionMethodID, (int)0x00002000); // ACTION_SCROLL_BACKWARD defined in AccessibilityNodeInfo - + // try to fill in the text property, this is what the screen reader reads + jstring jdesc = env->NewString((jchar*)info.description.constData(), + (jsize)info.description.size()); //CALL_METHOD(node, "setText", "(Ljava/lang/CharSequence;)V", jdesc) env->CallVoidMethod(node, m_setContentDescriptionMethodID, jdesc); @@ -374,6 +595,9 @@ if (!clazz) { \ GET_AND_CHECK_STATIC_METHOD(m_setEnabledMethodID, nodeInfoClass, "setEnabled", "(Z)V"); GET_AND_CHECK_STATIC_METHOD(m_setFocusableMethodID, nodeInfoClass, "setFocusable", "(Z)V"); GET_AND_CHECK_STATIC_METHOD(m_setFocusedMethodID, nodeInfoClass, "setFocused", "(Z)V"); + if (QtAndroidPrivate::androidSdkVersion() >= 28) { + GET_AND_CHECK_STATIC_METHOD(m_setHeadingMethodID, nodeInfoClass, "setHeading", "(Z)V"); + } GET_AND_CHECK_STATIC_METHOD(m_setScrollableMethodID, nodeInfoClass, "setScrollable", "(Z)V"); GET_AND_CHECK_STATIC_METHOD(m_setVisibleToUserMethodID, nodeInfoClass, "setVisibleToUser", "(Z)V"); GET_AND_CHECK_STATIC_METHOD(m_setTextSelectionMethodID, nodeInfoClass, "setTextSelection", "(II)V"); diff --git a/src/plugins/platforms/android/androidjniaccessibility.h b/src/plugins/platforms/android/androidjniaccessibility.h index de9d32a0..99d151bc 100644 --- a/src/plugins/platforms/android/androidjniaccessibility.h +++ b/src/plugins/platforms/android/androidjniaccessibility.h @@ -44,14 +44,18 @@ QT_BEGIN_NAMESPACE +class QObject; + namespace QtAndroidAccessibility { void initialize(); bool isActive(); bool registerNatives(JNIEnv *env); - void notifyLocationChange(); + void notifyLocationChange(uint accessibilityObjectId); void notifyObjectHide(uint accessibilityObjectId); void notifyObjectFocus(uint accessibilityObjectId); + void notifyValueChanged(uint accessibilityObjectId); + void createAccessibilityContextObject(QObject *parent); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp index 05516929..1abd2348 100644 --- a/src/plugins/platforms/android/androidjniinput.cpp +++ b/src/plugins/platforms/android/androidjniinput.cpp @@ -263,18 +263,14 @@ namespace QtAndroidInput } } - static void touchEnd(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint /*action*/) + static QTouchDevice *getTouchDevice() { - if (m_touchPoints.isEmpty()) - return; - - QMutexLocker lock(QtAndroid::platformInterfaceMutex()); QAndroidPlatformIntegration *platformIntegration = QtAndroid::androidPlatformIntegration(); if (!platformIntegration) - return; + return nullptr; QTouchDevice *touchDevice = platformIntegration->touchDevice(); - if (touchDevice == 0) { + if (!touchDevice) { touchDevice = new QTouchDevice; touchDevice->setType(QTouchDevice::TouchScreen); touchDevice->setCapabilities(QTouchDevice::Position @@ -285,10 +281,37 @@ namespace QtAndroidInput platformIntegration->setTouchDevice(touchDevice); } + return touchDevice; + } + + static void touchEnd(JNIEnv * /*env*/, jobject /*thiz*/, jint /*winId*/, jint /*action*/) + { + if (m_touchPoints.isEmpty()) + return; + + QMutexLocker lock(QtAndroid::platformInterfaceMutex()); + QTouchDevice *touchDevice = getTouchDevice(); + if (!touchDevice) + return; + QWindow *window = QtAndroid::topLevelWindowAt(m_touchPoints.at(0).area.center().toPoint()); QWindowSystemInterface::handleTouchEvent(window, touchDevice, m_touchPoints); } + static void touchCancel(JNIEnv * /*env*/, jobject /*thiz*/, jint /*winId*/) + { + if (m_touchPoints.isEmpty()) + return; + + QMutexLocker lock(QtAndroid::platformInterfaceMutex()); + QTouchDevice *touchDevice = getTouchDevice(); + if (!touchDevice) + return; + + QWindow *window = QtAndroid::topLevelWindowAt(m_touchPoints.at(0).area.center().toPoint()); + QWindowSystemInterface::handleTouchCancelEvent(window, touchDevice); + } + static bool isTabletEventSupported(JNIEnv */*env*/, jobject /*thiz*/) { #if QT_CONFIG(tabletevent) @@ -840,6 +863,7 @@ namespace QtAndroidInput {"touchBegin","(I)V",(void*)touchBegin}, {"touchAdd","(IIIZIIFFFF)V",(void*)touchAdd}, {"touchEnd","(II)V",(void*)touchEnd}, + {"touchCancel", "(I)V", (void *)touchCancel}, {"mouseDown", "(III)V", (void *)mouseDown}, {"mouseUp", "(III)V", (void *)mouseUp}, {"mouseMove", "(III)V", (void *)mouseMove}, diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index 8c6d9d9b..ad141a92 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2014 BogDan Vatra -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -107,7 +107,6 @@ static sem_t m_exitSemaphore, m_terminateSemaphore; QHash m_surfaces; static QBasicMutex m_surfacesMutex; -static int m_surfaceId = 1; static QAndroidPlatformIntegration *m_androidPlatformIntegration = nullptr; @@ -226,14 +225,17 @@ namespace QtAndroid m_statusBarShowing = false; } - void notifyAccessibilityLocationChange() + void notifyAccessibilityLocationChange(uint accessibilityObjectId) { - QJNIObjectPrivate::callStaticMethod(m_applicationClass, "notifyAccessibilityLocationChange"); + QJNIObjectPrivate::callStaticMethod(m_applicationClass, + "notifyAccessibilityLocationChange", + "(I)V", accessibilityObjectId); } - void notifyObjectHide(uint accessibilityObjectId) + void notifyObjectHide(uint accessibilityObjectId, uint parentObjectId) { - QJNIObjectPrivate::callStaticMethod(m_applicationClass, "notifyObjectHide","(I)V", accessibilityObjectId); + QJNIObjectPrivate::callStaticMethod(m_applicationClass, "notifyObjectHide", "(II)V", + accessibilityObjectId, parentObjectId); } void notifyObjectFocus(uint accessibilityObjectId) @@ -241,6 +243,13 @@ namespace QtAndroid QJNIObjectPrivate::callStaticMethod(m_applicationClass, "notifyObjectFocus","(I)V", accessibilityObjectId); } + void notifyValueChanged(uint accessibilityObjectId, jstring value) + { + QJNIObjectPrivate::callStaticMethod(m_applicationClass, "notifyValueChanged", + "(ILjava/lang/String;)V", accessibilityObjectId, + value); + } + void notifyQtAndroidPluginRunning(bool running) { QJNIObjectPrivate::callStaticMethod(m_applicationClass, "notifyQtAndroidPluginRunning","(Z)V", running); @@ -340,6 +349,12 @@ namespace QtAndroid return manufacturer + QLatin1Char(' ') + model; } + jint generateViewId() + { + return QJNIObjectPrivate::callStaticMethod("android/view/View","generateViewId", + "()I"); + } + int createSurface(AndroidSurfaceClient *client, const QRect &geometry, bool onTop, int imageDepth) { QJNIEnvironmentPrivate env; @@ -347,7 +362,7 @@ namespace QtAndroid return -1; m_surfacesMutex.lock(); - int surfaceId = m_surfaceId++; + jint surfaceId = generateViewId(); m_surfaces[surfaceId] = client; m_surfacesMutex.unlock(); @@ -370,7 +385,7 @@ namespace QtAndroid int insertNativeView(jobject view, const QRect &geometry) { m_surfacesMutex.lock(); - const int surfaceId = m_surfaceId++; + jint surfaceId = generateViewId(); m_surfaces[surfaceId] = nullptr; // dummy m_surfacesMutex.unlock(); @@ -554,16 +569,21 @@ static void startQtApplication(JNIEnv */*env*/, jclass /*clazz*/) vm->AttachCurrentThread(&env, &args); } + // Register type for invokeMethod() calls. + qRegisterMetaType("Qt::ScreenOrientation"); + // Register resources if they are available if (QFile{QStringLiteral("assets:/android_rcc_bundle.rcc")}.exists()) QResource::registerResource(QStringLiteral("assets:/android_rcc_bundle.rcc")); - QVarLengthArray params(m_applicationParams.size()); - for (int i = 0; i < m_applicationParams.size(); i++) - params[i] = static_cast(m_applicationParams[i].constData()); + const int argc = m_applicationParams.size(); + QVarLengthArray argv(argc + 1); + for (int i = 0; i < argc; i++) + argv[i] = m_applicationParams[i].data(); + argv[argc] = nullptr; startQtAndroidPluginCalled.fetchAndAddRelease(1); - int ret = m_main(m_applicationParams.length(), const_cast(params.data())); + int ret = m_main(argc, argv.data()); if (m_mainLibraryHnd) { int res = dlclose(m_mainLibraryHnd); @@ -655,12 +675,11 @@ static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/, jint widthPixels, jint heightPixels, jint desktopWidthPixels, jint desktopHeightPixels, jdouble xdpi, jdouble ydpi, - jdouble scaledDensity, jdouble density, bool forceUpdate) + jdouble scaledDensity, jdouble density, jfloat refreshRate) { // Android does not give us the correct screen size for immersive mode, but // the surface does have the right size - bool updateDesktopSize = m_desktopWidthPixels != desktopWidthPixels; widthPixels = qMax(widthPixels, desktopWidthPixels); heightPixels = qMax(heightPixels, desktopHeightPixels); @@ -678,12 +697,13 @@ static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/, widthPixels, heightPixels); } else { - m_androidPlatformIntegration->setDisplayMetrics(qRound(double(widthPixels) / xdpi * 25.4), - qRound(double(heightPixels) / ydpi * 25.4)); - m_androidPlatformIntegration->setScreenSize(widthPixels, heightPixels); - if (updateDesktopSize || forceUpdate) { - m_androidPlatformIntegration->setDesktopSize(desktopWidthPixels, desktopHeightPixels); - } + const QSize physicalSize(qRound(double(widthPixels) / xdpi * 25.4), + qRound(double(heightPixels) / ydpi * 25.4)); + const QSize screenSize(widthPixels, heightPixels); + const QRect availableGeometry(0, 0, desktopWidthPixels, desktopHeightPixels); + m_androidPlatformIntegration->setScreenSizeParameters(physicalSize, screenSize, + availableGeometry); + m_androidPlatformIntegration->setRefreshRate(refreshRate); } } @@ -778,12 +798,22 @@ static void handleOrientationChanged(JNIEnv */*env*/, jobject /*thiz*/, jint new QAndroidPlatformIntegration::setScreenOrientation(screenOrientation, native); QMutexLocker lock(&m_platformMutex); if (m_androidPlatformIntegration) { - QPlatformScreen *screen = m_androidPlatformIntegration->screen(); - QWindowSystemInterface::handleScreenOrientationChange(screen->screen(), - screenOrientation); + QAndroidPlatformScreen *screen = m_androidPlatformIntegration->screen(); + // Use invokeMethod to keep the certain order of the "geometry change" + // and "orientation change" event handling. + if (screen) { + QMetaObject::invokeMethod(screen, "setOrientation", Qt::AutoConnection, + Q_ARG(Qt::ScreenOrientation, screenOrientation)); + } } } +static void handleRefreshRateChanged(JNIEnv */*env*/, jclass /*cls*/, jfloat refreshRate) +{ + if (m_androidPlatformIntegration) + m_androidPlatformIntegration->setRefreshRate(refreshRate); +} + static void onActivityResult(JNIEnv */*env*/, jclass /*cls*/, jint requestCode, jint resultCode, @@ -809,14 +839,15 @@ static JNINativeMethod methods[] = { {"quitQtCoreApplication", "()V", (void *)quitQtCoreApplication}, {"terminateQt", "()V", (void *)terminateQt}, {"waitForServiceSetup", "()V", (void *)waitForServiceSetup}, - {"setDisplayMetrics", "(IIIIDDDDZ)V", (void *)setDisplayMetrics}, + {"setDisplayMetrics", "(IIIIDDDDF)V", (void *)setDisplayMetrics}, {"setSurface", "(ILjava/lang/Object;II)V", (void *)setSurface}, {"updateWindow", "()V", (void *)updateWindow}, {"updateApplicationState", "(I)V", (void *)updateApplicationState}, {"handleOrientationChanged", "(II)V", (void *)handleOrientationChanged}, {"onActivityResult", "(IILandroid/content/Intent;)V", (void *)onActivityResult}, {"onNewIntent", "(Landroid/content/Intent;)V", (void *)onNewIntent}, - {"onBind", "(Landroid/content/Intent;)Landroid/os/IBinder;", (void *)onBind} + {"onBind", "(Landroid/content/Intent;)Landroid/os/IBinder;", (void *)onBind}, + {"handleRefreshRateChanged", "(F)V", (void *)handleRefreshRateChanged} }; #define FIND_AND_CHECK_CLASS(CLASS_NAME) \ diff --git a/src/plugins/platforms/android/androidjnimain.h b/src/plugins/platforms/android/androidjnimain.h index 641b2dbd..9aaaa667 100644 --- a/src/plugins/platforms/android/androidjnimain.h +++ b/src/plugins/platforms/android/androidjnimain.h @@ -95,9 +95,10 @@ namespace QtAndroid jobject createBitmap(int width, int height, QImage::Format format, JNIEnv *env); jobject createBitmapDrawable(jobject bitmap, JNIEnv *env = 0); - void notifyAccessibilityLocationChange(); - void notifyObjectHide(uint accessibilityObjectId); + void notifyAccessibilityLocationChange(uint accessibilityObjectId); + void notifyObjectHide(uint accessibilityObjectId, uint parentObjectId); void notifyObjectFocus(uint accessibilityObjectId); + void notifyValueChanged(uint accessibilityObjectId, jstring value); void notifyQtAndroidPluginRunning(bool running); const char *classErrorMsgFmt(); diff --git a/src/plugins/platforms/android/qandroidinputcontext.h b/src/plugins/platforms/android/qandroidinputcontext.h index e9bfb98e..6b72cca1 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.h +++ b/src/plugins/platforms/android/qandroidinputcontext.h @@ -41,6 +41,7 @@ #ifndef ANDROIDINPUTCONTEXT_H #define ANDROIDINPUTCONTEXT_H +#include #include #include #include @@ -163,7 +164,7 @@ private: QMetaObject::Connection m_updateCursorPosConnection; HandleModes m_handleMode; int m_batchEditNestingLevel; - QObject *m_focusObject; + QPointer m_focusObject; QTimer m_hideCursorHandleTimer; }; Q_DECLARE_OPERATORS_FOR_FLAGS(QAndroidInputContext::HandleModes) diff --git a/src/plugins/platforms/android/qandroidplatformaccessibility.cpp b/src/plugins/platforms/android/qandroidplatformaccessibility.cpp index cc05dad7..bdbf709b 100644 --- a/src/plugins/platforms/android/qandroidplatformaccessibility.cpp +++ b/src/plugins/platforms/android/qandroidplatformaccessibility.cpp @@ -61,12 +61,20 @@ void QAndroidPlatformAccessibility::notifyAccessibilityUpdate(QAccessibleEvent * // so that the element can be moved on the screen if it's focused. if (event->type() == QAccessible::LocationChanged) { - QtAndroidAccessibility::notifyLocationChange(); + QtAndroidAccessibility::notifyLocationChange(event->uniqueId()); } else if (event->type() == QAccessible::ObjectHide) { QtAndroidAccessibility::notifyObjectHide(event->uniqueId()); } else if (event->type() == QAccessible::Focus) { QtAndroidAccessibility::notifyObjectFocus(event->uniqueId()); + } else if (event->type() == QAccessible::ValueChanged) { + QtAndroidAccessibility::notifyValueChanged(event->uniqueId()); } } +void QAndroidPlatformAccessibility::setRootObject(QObject *obj) +{ + QPlatformAccessibility::setRootObject(obj); + QtAndroidAccessibility::createAccessibilityContextObject(obj); +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/android/qandroidplatformaccessibility.h b/src/plugins/platforms/android/qandroidplatformaccessibility.h index 8216c05f..df3fe43a 100644 --- a/src/plugins/platforms/android/qandroidplatformaccessibility.h +++ b/src/plugins/platforms/android/qandroidplatformaccessibility.h @@ -52,6 +52,7 @@ public: ~QAndroidPlatformAccessibility(); void notifyAccessibilityUpdate(QAccessibleEvent *event) override; + void setRootObject(QObject *obj) override; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index 3074dee2..6fe0caba 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -188,9 +188,10 @@ QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList ¶ m_primaryScreen = new QAndroidPlatformScreen(); QWindowSystemInterface::handleScreenAdded(m_primaryScreen); - m_primaryScreen->setPhysicalSize(QSize(m_defaultPhysicalSizeWidth, m_defaultPhysicalSizeHeight)); - m_primaryScreen->setSize(QSize(m_defaultScreenWidth, m_defaultScreenHeight)); - m_primaryScreen->setAvailableGeometry(QRect(0, 0, m_defaultGeometryWidth, m_defaultGeometryHeight)); + const QSize physicalSize(m_defaultPhysicalSizeWidth, m_defaultPhysicalSizeHeight); + const QSize screenSize(m_defaultScreenWidth, m_defaultScreenHeight); + const QRect geometry(0, 0, m_defaultGeometryWidth, m_defaultGeometryHeight); + m_primaryScreen->setSizeParameters(physicalSize, screenSize, geometry); m_mainThread = QThread::currentThread(); @@ -463,10 +464,10 @@ void QAndroidPlatformIntegration::setScreenOrientation(Qt::ScreenOrientation cur void QAndroidPlatformIntegration::flushPendingUpdates() { - m_primaryScreen->setPhysicalSize(QSize(m_defaultPhysicalSizeWidth, - m_defaultPhysicalSizeHeight)); - m_primaryScreen->setSize(QSize(m_defaultScreenWidth, m_defaultScreenHeight)); - m_primaryScreen->setAvailableGeometry(QRect(0, 0, m_defaultGeometryWidth, m_defaultGeometryHeight)); + const QSize physicalSize(m_defaultPhysicalSizeWidth, m_defaultPhysicalSizeHeight); + const QSize screenSize(m_defaultScreenWidth, m_defaultScreenHeight); + const QRect geometry(0, 0, m_defaultGeometryWidth, m_defaultGeometryHeight); + m_primaryScreen->setSizeParameters(physicalSize, screenSize, geometry); } #ifndef QT_NO_ACCESSIBILITY @@ -494,6 +495,23 @@ void QAndroidPlatformIntegration::setScreenSize(int width, int height) QMetaObject::invokeMethod(m_primaryScreen, "setSize", Qt::AutoConnection, Q_ARG(QSize, QSize(width, height))); } +void QAndroidPlatformIntegration::setScreenSizeParameters(const QSize &physicalSize, + const QSize &screenSize, + const QRect &availableGeometry) +{ + if (m_primaryScreen) { + QMetaObject::invokeMethod(m_primaryScreen, "setSizeParameters", Qt::AutoConnection, + Q_ARG(QSize, physicalSize), Q_ARG(QSize, screenSize), + Q_ARG(QRect, availableGeometry)); + } +} + +void QAndroidPlatformIntegration::setRefreshRate(qreal refreshRate) +{ + if (m_primaryScreen) + QMetaObject::invokeMethod(m_primaryScreen, "setRefreshRate", Qt::AutoConnection, + Q_ARG(qreal, refreshRate)); +} #if QT_CONFIG(vulkan) QPlatformVulkanInstance *QAndroidPlatformIntegration::createPlatformVulkanInstance(QVulkanInstance *instance) const diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h index ecbde4f9..f34972b8 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.h +++ b/src/plugins/platforms/android/qandroidplatformintegration.h @@ -96,6 +96,13 @@ public: virtual void setDesktopSize(int width, int height); virtual void setDisplayMetrics(int width, int height); void setScreenSize(int width, int height); + // The 3 methods above were replaced by a new one, so that we could have + // a better control over "geometry changed" event handling. Technically + // they are no longer used and can be removed. Not doing it now, because + // I'm not sure if it might be helpful to have them or not. + void setScreenSizeParameters(const QSize &physicalSize, const QSize &screenSize, + const QRect &availableGeometry); + void setRefreshRate(qreal refreshRate); bool isVirtualDesktop() { return true; } QPlatformFontDatabase *fontDatabase() const override; diff --git a/src/plugins/platforms/android/qandroidplatformscreen.cpp b/src/plugins/platforms/android/qandroidplatformscreen.cpp index 7e036868..0f60202e 100644 --- a/src/plugins/platforms/android/qandroidplatformscreen.cpp +++ b/src/plugins/platforms/android/qandroidplatformscreen.cpp @@ -55,6 +55,7 @@ #include #include +#include #include #include #include @@ -104,6 +105,42 @@ QAndroidPlatformScreen::QAndroidPlatformScreen() m_physicalSize.setHeight(QAndroidPlatformIntegration::m_defaultPhysicalSizeHeight); m_physicalSize.setWidth(QAndroidPlatformIntegration::m_defaultPhysicalSizeWidth); connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidPlatformScreen::applicationStateChanged); + + QJNIObjectPrivate activity(QtAndroid::activity()); + if (!activity.isValid()) + return; + QJNIObjectPrivate display; + if (QtAndroidPrivate::androidSdkVersion() < 30) { + display = activity.callObjectMethod("getWindowManager", "()Landroid/view/WindowManager;") + .callObjectMethod("getDefaultDisplay", "()Landroid/view/Display;"); + } else { + display = activity.callObjectMethod("getDisplay", "()Landroid/view/Display;"); + } + if (!display.isValid()) + return; + m_name = display.callObjectMethod("getName", "()Ljava/lang/String;").toString(); + m_refreshRate = display.callMethod("getRefreshRate"); + if (QtAndroidPrivate::androidSdkVersion() < 23) { + m_modes << Mode { .size = m_physicalSize.toSize(), .refreshRate = m_refreshRate }; + return; + } + QJNIEnvironmentPrivate env; + const jint currentMode = display.callObjectMethod("getMode", "()Landroid/view/Display$Mode;") + .callMethod("getModeId"); + const auto modes = display.callObjectMethod("getSupportedModes", + "()[Landroid/view/Display$Mode;"); + const auto modesArray = jobjectArray(modes.object()); + const auto sz = env->GetArrayLength(modesArray); + for (jsize i = 0; i < sz; ++i) { + auto mode = QJNIObjectPrivate::fromLocalRef(env->GetObjectArrayElement(modesArray, i)); + if (currentMode == mode.callMethod("getModeId")) + m_currentMode = m_modes.size(); + m_modes << Mode { .size = QSize { mode.callMethod("getPhysicalHeight"), + mode.callMethod("getPhysicalWidth") }, + .refreshRate = mode.callMethod("getRefreshRate") }; + } + if (m_modes.isEmpty()) + m_modes << Mode { .size = m_physicalSize.toSize(), .refreshRate = m_refreshRate }; } QAndroidPlatformScreen::~QAndroidPlatformScreen() @@ -243,6 +280,37 @@ void QAndroidPlatformScreen::setSize(const QSize &size) QWindowSystemInterface::handleScreenGeometryChange(QPlatformScreen::screen(), geometry(), availableGeometry()); } +void QAndroidPlatformScreen::setSizeParameters(const QSize &physicalSize, const QSize &size, + const QRect &availableGeometry) +{ + // The goal of this method is to set all geometry-related parameters + // at the same time and generate only one screen geometry change event. + m_physicalSize = physicalSize; + m_size = size; + // If available geometry has changed, the event will be handled in + // setAvailableGeometry. Otherwise we need to explicitly handle it to + // retain the behavior, because setSize() does the handling unconditionally. + if (m_availableGeometry != availableGeometry) { + setAvailableGeometry(availableGeometry); + } else { + QWindowSystemInterface::handleScreenGeometryChange(QPlatformScreen::screen(), geometry(), + this->availableGeometry()); + } +} + +void QAndroidPlatformScreen::setRefreshRate(qreal refreshRate) +{ + if (refreshRate == m_refreshRate) + return; + m_refreshRate = refreshRate; + QWindowSystemInterface::handleScreenRefreshRateChange(QPlatformScreen::screen(), refreshRate); +} + +void QAndroidPlatformScreen::setOrientation(Qt::ScreenOrientation orientation) +{ + QWindowSystemInterface::handleScreenOrientationChange(QPlatformScreen::screen(), orientation); +} + void QAndroidPlatformScreen::setAvailableGeometry(const QRect &rect) { QMutexLocker lock(&m_surfaceMutex); diff --git a/src/plugins/platforms/android/qandroidplatformscreen.h b/src/plugins/platforms/android/qandroidplatformscreen.h index 54b3c5b8..e73ea31a 100644 --- a/src/plugins/platforms/android/qandroidplatformscreen.h +++ b/src/plugins/platforms/android/qandroidplatformscreen.h @@ -69,6 +69,12 @@ public: QImage::Format format() const override { return m_format; } QSizeF physicalSize() const override { return m_physicalSize; } + QString name() const override { return m_name; } + QVector modes() const override { return m_modes; } + int currentMode() const override { return m_currentMode; } + int preferredMode() const override { return m_currentMode; } + qreal refreshRate() const override { return m_refreshRate; } + inline QWindow *topWindow() const; QWindow *topLevelAt(const QPoint & p) const override; @@ -87,6 +93,10 @@ public slots: void setPhysicalSize(const QSize &size); void setAvailableGeometry(const QRect &rect); void setSize(const QSize &size); + void setSizeParameters(const QSize &physicalSize, const QSize &size, + const QRect &availableGeometry); + void setRefreshRate(qreal refreshRate); + void setOrientation(Qt::ScreenOrientation orientation); protected: bool event(QEvent *event) override; @@ -100,6 +110,10 @@ protected: int m_depth; QImage::Format m_format; QSizeF m_physicalSize; + qreal m_refreshRate; + QString m_name; + QVector m_modes; + int m_currentMode = 0; private: QDpi logicalDpi() const override; diff --git a/src/plugins/platforms/cocoa/qcocoacursor.mm b/src/plugins/platforms/cocoa/qcocoacursor.mm index 8ca72ec6..c963ff93 100644 --- a/src/plugins/platforms/cocoa/qcocoacursor.mm +++ b/src/plugins/platforms/cocoa/qcocoacursor.mm @@ -45,6 +45,15 @@ #include +#if !defined(QT_APPLE_NO_PRIVATE_APIS) +@interface NSCursor() ++ (id)_windowResizeNorthWestSouthEastCursor; ++ (id)_windowResizeNorthEastSouthWestCursor; ++ (id)_windowResizeNorthSouthCursor; ++ (id)_windowResizeEastWestCursor; +@end +#endif // QT_APPLE_NO_PRIVATE_APIS + QT_BEGIN_NAMESPACE QCocoaCursor::QCocoaCursor() @@ -116,7 +125,7 @@ NSCursor *QCocoaCursor::convertCursor(QCursor *cursor) return nil; const Qt::CursorShape newShape = cursor->shape(); - NSCursor *cocoaCursor; + NSCursor *cocoaCursor = nil; // Check for a suitable built-in NSCursor first: switch (newShape) { @@ -157,7 +166,29 @@ NSCursor *QCocoaCursor::convertCursor(QCursor *cursor) case Qt::DragLinkCursor: cocoaCursor = [NSCursor dragLinkCursor]; break; - default : { +#if !defined(QT_APPLE_NO_PRIVATE_APIS) + case Qt::SizeVerCursor: + if ([NSCursor respondsToSelector:@selector(_windowResizeNorthSouthCursor)]) + cocoaCursor = [NSCursor _windowResizeNorthSouthCursor]; + break; + case Qt::SizeHorCursor: + if ([NSCursor respondsToSelector:@selector(_windowResizeEastWestCursor)]) + cocoaCursor = [NSCursor _windowResizeEastWestCursor]; + break; + case Qt::SizeBDiagCursor: + if ([NSCursor respondsToSelector:@selector(_windowResizeNorthEastSouthWestCursor)]) + cocoaCursor = [NSCursor _windowResizeNorthEastSouthWestCursor]; + break; + case Qt::SizeFDiagCursor: + if ([NSCursor respondsToSelector:@selector(_windowResizeNorthWestSouthEastCursor)]) + cocoaCursor = [NSCursor _windowResizeNorthWestSouthEastCursor]; + break; +#endif // QT_APPLE_NO_PRIVATE_APIS + default: + break; + } + + if (!cocoaCursor) { // No suitable OS cursor exist, use cursors provided // by Qt for the rest. Check for a cached cursor: cocoaCursor = m_cursors.value(newShape); @@ -172,8 +203,6 @@ NSCursor *QCocoaCursor::convertCursor(QCursor *cursor) m_cursors.insert(newShape, cocoaCursor); } - - break; } } return cocoaCursor; } diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm index 5dac9b9a..7c3f69b4 100644 --- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm @@ -292,7 +292,12 @@ static QString strippedText(QString s) } } - QString qtFileName = QFileInfo(QString::fromNSString(filename)).fileName(); + // Treat symbolic links and aliases to directories like directories + QFileInfo fileInfo(QString::fromNSString(filename)); + if (fileInfo.isSymLink() && QFileInfo(fileInfo.symLinkTarget()).isDir()) + return YES; + + QString qtFileName = fileInfo.fileName(); // No filter means accept everything bool nameMatches = mSelectedNameFilter->isEmpty(); // Check if the current file name filter accepts the file: diff --git a/src/plugins/platforms/cocoa/qcocoascreen.mm b/src/plugins/platforms/cocoa/qcocoascreen.mm index 581ea01f..1c2daef3 100644 --- a/src/plugins/platforms/cocoa/qcocoascreen.mm +++ b/src/plugins/platforms/cocoa/qcocoascreen.mm @@ -230,13 +230,13 @@ static QString displayName(CGDirectDisplayID displayID) NSDictionary *info = [(__bridge NSDictionary*)IODisplayCreateInfoDictionary( display, kIODisplayOnlyPreferredName) autorelease]; - if ([[info objectForKey:@kDisplayVendorID] longValue] != CGDisplayVendorNumber(displayID)) + if ([[info objectForKey:@kDisplayVendorID] unsignedIntValue] != CGDisplayVendorNumber(displayID)) continue; - if ([[info objectForKey:@kDisplayProductID] longValue] != CGDisplayModelNumber(displayID)) + if ([[info objectForKey:@kDisplayProductID] unsignedIntValue] != CGDisplayModelNumber(displayID)) continue; - if ([[info objectForKey:@kDisplaySerialNumber] longValue] != CGDisplaySerialNumber(displayID)) + if ([[info objectForKey:@kDisplaySerialNumber] unsignedIntValue] != CGDisplaySerialNumber(displayID)) continue; NSDictionary *localizedNames = [info objectForKey:@kDisplayProductName]; @@ -625,8 +625,8 @@ bool QCocoaScreen::isOnline() const // returning -1 to signal that the displayId is invalid. Some functions // will also assert or even crash in this case, so it's important that // we double check if a display is online before calling other functions. - auto isOnline = CGDisplayIsOnline(m_displayId); - static const uint32_t kCGDisplayIsDisconnected = int32_t(-1); + int isOnline = CGDisplayIsOnline(m_displayId); + static const int kCGDisplayIsDisconnected = 0xffffffff; return isOnline != kCGDisplayIsDisconnected && isOnline; } diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 2be08314..932e4a3a 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -104,7 +104,7 @@ static void qRegisterNotificationCallbacks() if (QNSView *qnsView = qnsview_cast(notification.object)) cocoaWindows += qnsView.platformWindow; } else { - qCWarning(lcCocoaNotifications) << "Unhandled notifcation" + qCWarning(lcCocoaNotifications) << "Unhandled notification" << notification.name << "for" << notification.object; return; } diff --git a/src/plugins/platforms/cocoa/qnsview_mouse.mm b/src/plugins/platforms/cocoa/qnsview_mouse.mm index ef80a47e..81f2e4fd 100644 --- a/src/plugins/platforms/cocoa/qnsview_mouse.mm +++ b/src/plugins/platforms/cocoa/qnsview_mouse.mm @@ -93,7 +93,7 @@ - (void)resetMouseButtons { - qCDebug(lcQpaMouse) << "Reseting mouse buttons"; + qCDebug(lcQpaMouse) << "Resetting mouse buttons"; m_buttons = Qt::NoButton; m_frameStrutButtons = Qt::NoButton; } @@ -678,7 +678,11 @@ } } else if (theEvent.momentumPhase == NSEventPhaseBegan) { Q_ASSERT(!pixelDelta.isNull() && !angleDelta.isNull()); - phase = Qt::ScrollUpdate; // Send as update, it has a delta + // If we missed finding a momentum NSEventPhaseBegan when the non-momentum + // phase ended we need to treat this as a scroll begin, to not confuse client + // code. Otherwise we treat it as a continuation of the existing scroll. + phase = m_scrolling ? Qt::ScrollUpdate : Qt::ScrollBegin; + m_scrolling = true; } else if (theEvent.momentumPhase == NSEventPhaseChanged) { phase = Qt::ScrollMomentum; } else if (theEvent.phase == NSEventPhaseCancelled @@ -690,6 +694,16 @@ Q_ASSERT(theEvent.momentumPhase != NSEventPhaseStationary); } + // Sanitize deltas for events that should not result in scrolling. + // On macOS 12.1 this phase has been observed to report deltas. + if (theEvent.phase == NSEventPhaseCancelled) { + if (!pixelDelta.isNull() || !angleDelta.isNull()) { + qCInfo(lcQpaMouse) << "Ignoring unexpected delta for" << theEvent; + pixelDelta = QPoint(); + angleDelta = QPoint(); + } + } + // Prevent keyboard modifier state from changing during scroll event streams. // A two-finger trackpad flick generates a stream of scroll events. We want // the keyboard modifier state to be the state at the beginning of the diff --git a/src/plugins/platforms/cocoa/qnsview_tablet.mm b/src/plugins/platforms/cocoa/qnsview_tablet.mm index ba1fa558..f3654035 100644 --- a/src/plugins/platforms/cocoa/qnsview_tablet.mm +++ b/src/plugins/platforms/cocoa/qnsview_tablet.mm @@ -148,9 +148,6 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) device = QTabletEvent::Stylus; } else { switch (bits & 0x0F06) { - case 0x0802: - device = QTabletEvent::Stylus; - break; case 0x0902: device = QTabletEvent::Airbrush; break; @@ -163,8 +160,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) case 0x0804: device = QTabletEvent::RotationStylus; break; - default: - device = QTabletEvent::NoDevice; + default: // usually 0x0802, but 0 on iPad sidecar with Apple Pencil + device = QTabletEvent::Stylus; } } return device; diff --git a/src/plugins/platforms/eglfs/api/qeglfscursor.cpp b/src/plugins/platforms/eglfs/api/qeglfscursor.cpp index 98e05195..b35935bb 100644 --- a/src/plugins/platforms/eglfs/api/qeglfscursor.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfscursor.cpp @@ -548,3 +548,5 @@ void QEglFSCursor::draw(const QRectF &r) } QT_END_NAMESPACE + +#include "moc_qeglfscursor_p.cpp" diff --git a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp index b985386a..02567ad0 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp @@ -410,3 +410,5 @@ EGLConfig QEglFSDeviceIntegration::chooseConfig(EGLDisplay display, const QSurfa } QT_END_NAMESPACE + +#include "moc_qeglfsdeviceintegration_p.cpp" diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp index ce5a7219..33382cb3 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp @@ -61,7 +61,7 @@ private: QEglFSX11Integration *m_integration; }; -QAtomicInt running; +static QBasicAtomicInt running; void EventReader::run() { diff --git a/src/plugins/platforms/ios/qiosdocumentpickercontroller.h b/src/plugins/platforms/ios/qiosdocumentpickercontroller.h index dba6f24f..2fe3c9e3 100644 --- a/src/plugins/platforms/ios/qiosdocumentpickercontroller.h +++ b/src/plugins/platforms/ios/qiosdocumentpickercontroller.h @@ -41,6 +41,8 @@ #include "qiosfiledialog.h" -@interface QIOSDocumentPickerController : UIDocumentPickerViewController +@interface QIOSDocumentPickerController : UIDocumentPickerViewController - (instancetype)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog; @end diff --git a/src/plugins/platforms/ios/qiosdocumentpickercontroller.mm b/src/plugins/platforms/ios/qiosdocumentpickercontroller.mm index c1b641e8..da78d411 100644 --- a/src/plugins/platforms/ios/qiosdocumentpickercontroller.mm +++ b/src/plugins/platforms/ios/qiosdocumentpickercontroller.mm @@ -72,6 +72,7 @@ m_fileDialog = fileDialog; self.modalPresentationStyle = UIModalPresentationFormSheet; self.delegate = self; + self.presentationController.delegate = self; if (m_fileDialog->options()->fileMode() == QFileDialogOptions::ExistingFiles) self.allowsMultipleSelection = YES; @@ -100,4 +101,18 @@ emit m_fileDialog->reject(); } +- (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController +{ + Q_UNUSED(presentationController); + + // "Called on the delegate when the user has taken action to dismiss the + // presentation successfully, after all animations are finished. + // This is not called if the presentation is dismissed programatically." + + // So if document picker's view was dismissed, for example by swiping it away, + // we got this method called. But not if the dialog was cancelled or a file + // was selected. + emit m_fileDialog->reject(); +} + @end diff --git a/src/plugins/platforms/ios/quiaccessibilityelement.mm b/src/plugins/platforms/ios/quiaccessibilityelement.mm index 4dd1f9f0..3ebded0e 100644 --- a/src/plugins/platforms/ios/quiaccessibilityelement.mm +++ b/src/plugins/platforms/ios/quiaccessibilityelement.mm @@ -157,6 +157,9 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QMacAccessibilityElement); if (state.searchEdit) traits |= UIAccessibilityTraitSearchField; + if (state.selected) + traits |= UIAccessibilityTraitSelected; + const auto accessibleRole = iface->role(); if (accessibleRole == QAccessible::Button) { traits |= UIAccessibilityTraitButton; @@ -166,6 +169,14 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QMacAccessibilityElement); return textField.accessibilityTraits; }(); traits |= defaultTextFieldTraits; + } else if (accessibleRole == QAccessible::Graphic) { + traits |= UIAccessibilityTraitImage; + } else if (accessibleRole == QAccessible::Heading) { + traits |= UIAccessibilityTraitHeader; + } else if (accessibleRole == QAccessible::Link) { + traits |= UIAccessibilityTraitLink; + } else if (accessibleRole == QAccessible::StaticText) { + traits |= UIAccessibilityTraitStaticText; } if (iface->valueInterface()) diff --git a/src/plugins/platforms/linuxfb/qlinuxfbdrmscreen.cpp b/src/plugins/platforms/linuxfb/qlinuxfbdrmscreen.cpp index dcc1ef27..2c9ca564 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbdrmscreen.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbdrmscreen.cpp @@ -466,3 +466,5 @@ QPixmap QLinuxFbDrmScreen::grabWindow(WId wid, int x, int y, int width, int heig } QT_END_NAMESPACE + +#include "moc_qlinuxfbdrmscreen.cpp" diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp index cb8962d4..7467df2b 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp @@ -448,3 +448,5 @@ QPixmap QLinuxFbScreen::grabWindow(WId wid, int x, int y, int width, int height) QT_END_NAMESPACE +#include "moc_qlinuxfbscreen.cpp" + diff --git a/src/plugins/platforms/vnc/qvnc.cpp b/src/plugins/platforms/vnc/qvnc.cpp index a518cb31..e3017a93 100644 --- a/src/plugins/platforms/vnc/qvnc.cpp +++ b/src/plugins/platforms/vnc/qvnc.cpp @@ -684,3 +684,5 @@ inline QImage QVncServer::screenImage() const } QT_END_NAMESPACE + +#include "moc_qvnc_p.cpp" diff --git a/src/plugins/platforms/vnc/qvncclient.cpp b/src/plugins/platforms/vnc/qvncclient.cpp index 186922a6..c169d44d 100644 --- a/src/plugins/platforms/vnc/qvncclient.cpp +++ b/src/plugins/platforms/vnc/qvncclient.cpp @@ -666,3 +666,5 @@ bool QVncClient::pixelConversionNeeded() const } QT_END_NAMESPACE + +#include "moc_qvncclient.cpp" diff --git a/src/plugins/platforms/vnc/qvncscreen.cpp b/src/plugins/platforms/vnc/qvncscreen.cpp index abbdbbc5..83ef5088 100644 --- a/src/plugins/platforms/vnc/qvncscreen.cpp +++ b/src/plugins/platforms/vnc/qvncscreen.cpp @@ -214,3 +214,5 @@ QFbScreen::Flags QVncScreen::flags() const QT_END_NAMESPACE +#include "moc_qvncscreen.cpp" + diff --git a/src/plugins/platforms/windows/openglblacklists/default.json b/src/plugins/platforms/windows/openglblacklists/default.json index e37351f9..072acdd1 100644 --- a/src/plugins/platforms/windows/openglblacklists/default.json +++ b/src/plugins/platforms/windows/openglblacklists/default.json @@ -93,7 +93,7 @@ }, { "id": 8, - "description": "Standard VGA: Insufficent support for OpenGL, D3D9 and D3D11", + "description": "Standard VGA: Insufficient support for OpenGL, D3D9 and D3D11", "vendor_id": "0x0000", "device_id": ["0x0000"], "os": { diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index 58d29884..d5c30220 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -924,7 +924,7 @@ static inline QString errorMessageFromComError(const _com_error &comError) TCHAR *message = nullptr; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, nullptr, DWORD(comError.Error()), MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), - message, 0, nullptr); + reinterpret_cast(&message), 0, nullptr); if (message) { const QString result = QString::fromWCharArray(message).trimmed(); LocalFree(static_cast(message)); diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp index 6fc90035..0ebe5bd4 100644 --- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp +++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp @@ -148,7 +148,7 @@ void eatMouseMove() Base classes for native dialogs (using the CLSID-based dialog interfaces "IFileDialog", etc. available from Windows - Vista on) that mimick the behaviour of their QDialog + Vista on) that mimic the behavior of their QDialog counterparts as close as possible. Instances of derived classes are controlled by diff --git a/src/plugins/platforms/windows/qwindowsdrag.cpp b/src/plugins/platforms/windows/qwindowsdrag.cpp index ba049cf3..612e8cd9 100644 --- a/src/plugins/platforms/windows/qwindowsdrag.cpp +++ b/src/plugins/platforms/windows/qwindowsdrag.cpp @@ -420,7 +420,7 @@ QWindowsOleDropSource::QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) } /*! - \brief Give feedback: Change cursor accoding to action. + \brief Give feedback: Change cursor according to action. */ QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP diff --git a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp index 6fa5a8a2..1f49f0ae 100644 --- a/src/plugins/platforms/windows/qwindowsglcontext.cpp +++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp @@ -48,6 +48,7 @@ #include #include +#include #include #include @@ -162,19 +163,25 @@ QFunctionPointer QWindowsOpengl32DLL::resolve(const char *name) bool QWindowsOpengl32DLL::init(bool softwareRendering) { - const QByteArray opengl32 = QByteArrayLiteral("opengl32.dll"); - const QByteArray swopengl = QByteArrayLiteral("opengl32sw.dll"); + const QByteArray opengl32 = QByteArrayLiteral("opengl32"); + const QByteArray swopengl = QByteArrayLiteral("opengl32sw"); + bool useSystemLib = false; QByteArray openglDll = qgetenv("QT_OPENGL_DLL"); - if (openglDll.isEmpty()) + if (openglDll.isEmpty()) { openglDll = softwareRendering ? swopengl : opengl32; + useSystemLib = !softwareRendering; + } openglDll = openglDll.toLower(); m_nonOpengl32 = openglDll != opengl32; qCDebug(lcQpaGl) << "Qt: Using WGL and OpenGL from" << openglDll; - m_lib = ::LoadLibraryA(openglDll.constData()); + if (useSystemLib) + m_lib = QSystemLibrary::load((wchar_t*)(QString::fromLatin1(openglDll).utf16())); + else + m_lib = LoadLibraryA(openglDll.constData()); if (!m_lib) { qErrnoWarning(::GetLastError(), "Failed to load %s", openglDll.constData()); return false; @@ -184,7 +191,7 @@ bool QWindowsOpengl32DLL::init(bool softwareRendering) // Load opengl32.dll always. GDI functions like ChoosePixelFormat do // GetModuleHandle for opengl32.dll and behave differently (and call back into // opengl32) when the module is present. This is fine for dummy contexts and windows. - ::LoadLibraryA("opengl32.dll"); + QSystemLibrary::load(L"opengl32"); } wglCreateContext = reinterpret_cast(resolve("wglCreateContext")); diff --git a/src/plugins/platforms/windows/qwindowsopengltester.cpp b/src/plugins/platforms/windows/qwindowsopengltester.cpp index d7d186e8..9eb4011b 100644 --- a/src/plugins/platforms/windows/qwindowsopengltester.cpp +++ b/src/plugins/platforms/windows/qwindowsopengltester.cpp @@ -49,6 +49,7 @@ #include #include #include +#include #ifndef QT_NO_OPENGL #include @@ -396,7 +397,7 @@ bool QWindowsOpenGLTester::testDesktopGL() // Test #1: Load opengl32.dll and try to resolve an OpenGL 2 function. // This will typically fail on systems that do not have a real OpenGL driver. - lib = LoadLibraryA("opengl32.dll"); + lib = QSystemLibrary::load(L"opengl32"); if (lib) { CreateContext = reinterpret_cast( reinterpret_cast(::GetProcAddress(lib, "wglCreateContext"))); diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 3f7f9258..9d9180e4 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -2047,7 +2047,7 @@ HDC QWindowsWindow::getDC() } /*! - Relases the HDC for the window or does nothing in + Releases the HDC for the window or does nothing in case it was obtained from WinAPI BeginPaint within a WM_PAINT event. \sa getDC() @@ -2683,32 +2683,30 @@ void QWindowsWindow::getSizeHints(MINMAXINFO *mmi) const // This block fixes QTBUG-8361, QTBUG-4362: Frameless/title-less windows shouldn't cover the // taskbar when maximized - if ((testFlag(WithinMaximize) || window()->windowStates().testFlag(Qt::WindowMinimized)) - && (m_data.flags.testFlag(Qt::FramelessWindowHint) - || (m_data.flags.testFlag(Qt::CustomizeWindowHint) && !m_data.flags.testFlag(Qt::WindowTitleHint)))) { - const QScreen *screen = window()->screen(); - - // Documentation of MINMAXINFO states that it will only work for the primary screen - if (screen && screen == QGuiApplication::primaryScreen()) { - const QRect availableGeometry = QHighDpi::toNativePixels(screen->availableGeometry(), screen); + if (m_data.flags.testFlag(Qt::FramelessWindowHint) + || (m_data.flags.testFlag(Qt::CustomizeWindowHint) && !m_data.flags.testFlag(Qt::WindowTitleHint))) { + if (QPlatformScreen *currentScreen = screen()) { + const QRect geometry = currentScreen->geometry(); + const QRect availableGeometry = currentScreen->availableGeometry(); mmi->ptMaxSize.y = availableGeometry.height(); // Width, because you can have the taskbar on the sides too. mmi->ptMaxSize.x = availableGeometry.width(); // If you have the taskbar on top, or on the left you don't want it at (0,0): - mmi->ptMaxPosition.x = availableGeometry.x(); - mmi->ptMaxPosition.y = availableGeometry.y(); + QPoint availablePositionDiff = availableGeometry.topLeft() - geometry.topLeft(); + mmi->ptMaxPosition.x = availablePositionDiff.x(); + mmi->ptMaxPosition.y = availablePositionDiff.y(); if (!m_data.flags.testFlag(Qt::FramelessWindowHint)) { - const int borderWidth = getBorderWidth(screen->handle()); + const int borderWidth = getBorderWidth(currentScreen); mmi->ptMaxSize.x += borderWidth * 2; mmi->ptMaxSize.y += borderWidth * 2; mmi->ptMaxTrackSize = mmi->ptMaxSize; mmi->ptMaxPosition.x -= borderWidth; mmi->ptMaxPosition.y -= borderWidth; } - } else if (!screen){ - qWarning("window()->screen() returned a null screen"); + } else { + qWarning("screen() returned a null screen"); } } diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp index 93b96226..50888d4a 100644 --- a/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp +++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp @@ -58,6 +58,7 @@ QT_BEGIN_NAMESPACE using namespace QWindowsUiAutomation; +bool QWindowsUiaAccessibility::m_accessibleActive = false; QWindowsUiaAccessibility::QWindowsUiaAccessibility() { @@ -72,6 +73,7 @@ bool QWindowsUiaAccessibility::handleWmGetObject(HWND hwnd, WPARAM wParam, LPARA { // Start handling accessibility internally QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true); + m_accessibleActive = true; // Ignoring all requests while starting up / shutting down if (QCoreApplication::startingUp() || QCoreApplication::closingDown()) @@ -131,6 +133,11 @@ void QWindowsUiaAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event if (!event) return; + // Ignore events sent before the first UI Automation + // request or while QAccessible is being activated. + if (!m_accessibleActive) + return; + switch (event->type()) { case QAccessible::PopupMenuStart: playSystemSound(QStringLiteral("MenuPopup")); diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.h index 48b4f9fa..ac01a51e 100644 --- a/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.h +++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.h @@ -56,6 +56,8 @@ public: virtual ~QWindowsUiaAccessibility(); static bool handleWmGetObject(HWND hwnd, WPARAM wParam, LPARAM lParam, LRESULT *lResult); void notifyAccessibilityUpdate(QAccessibleEvent *event) override; +private: + static bool m_accessibleActive; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp index 3bb0d08d..754ded14 100644 --- a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp +++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp @@ -108,19 +108,11 @@ void QWindowsUiaMainProvider::notifyFocusChange(QAccessibleEvent *event) { if (QAccessibleInterface *accessible = event->accessibleInterface()) { // If this is a table/tree/list, raise event for the focused cell/item instead. - if (accessible->tableInterface()) { - int count = accessible->childCount(); - for (int i = 0; i < count; ++i) { - QAccessibleInterface *item = accessible->child(i); - if (item && item->isValid() && item->state().focused) { - accessible = item; - break; - } - } - } - if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) { + if (accessible->tableInterface()) + if (QAccessibleInterface *child = accessible->focusChild()) + accessible = child; + if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) QWindowsUiaWrapper::instance()->raiseAutomationEvent(provider, UIA_AutomationFocusChangedEventId); - } } } @@ -214,12 +206,16 @@ void QWindowsUiaMainProvider::notifyValueChange(QAccessibleValueChangeEvent *eve void QWindowsUiaMainProvider::notifyNameChange(QAccessibleEvent *event) { if (QAccessibleInterface *accessible = event->accessibleInterface()) { - if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) { - VARIANT oldVal, newVal; - clearVariant(&oldVal); - setVariantString(accessible->text(QAccessible::Name), &newVal); - QWindowsUiaWrapper::instance()->raiseAutomationPropertyChangedEvent(provider, UIA_NamePropertyId, oldVal, newVal); - ::SysFreeString(newVal.bstrVal); + // Restrict notification to combo boxes, which need it for accessibility, + // in order to avoid slowdowns with unnecessary notifications. + if (accessible->role() == QAccessible::ComboBox) { + if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) { + VARIANT oldVal, newVal; + clearVariant(&oldVal); + setVariantString(accessible->text(QAccessible::Name), &newVal); + QWindowsUiaWrapper::instance()->raiseAutomationPropertyChangedEvent(provider, UIA_NamePropertyId, oldVal, newVal); + ::SysFreeString(newVal.bstrVal); + } } } } diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp index 5e406017..e8c9c27b 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp @@ -58,7 +58,7 @@ const xcb_visualtype_t *QXcbGlxWindow::createVisual() { QXcbScreen *scr = xcbScreen(); if (!scr) - return nullptr; + return QXcbWindow::createVisual(); qCDebug(lcQpaGl) << "Requested format before FBConfig/Visual selection:" << m_format; @@ -71,10 +71,13 @@ const xcb_visualtype_t *QXcbGlxWindow::createVisual() flags |= QGLX_SUPPORTS_SRGB; } + const auto formatBackup = m_format; XVisualInfo *visualInfo = qglx_findVisualInfo(dpy, scr->screenNumber(), &m_format, GLX_WINDOW_BIT, flags); if (!visualInfo) { - qWarning() << "No XVisualInfo for format" << m_format; - return nullptr; + qCDebug(lcQpaGl) << "No XVisualInfo for format" << m_format; + // restore initial format before requesting it again + m_format = formatBackup; + return QXcbWindow::createVisual(); } const xcb_visualtype_t *xcb_visualtype = scr->visualForId(visualInfo->visualid); XFree(visualInfo); diff --git a/src/plugins/platforms/xcb/qxcbclipboard.cpp b/src/plugins/platforms/xcb/qxcbclipboard.cpp index b9ae5879..2f37ee64 100644 --- a/src/plugins/platforms/xcb/qxcbclipboard.cpp +++ b/src/plugins/platforms/xcb/qxcbclipboard.cpp @@ -926,4 +926,5 @@ QByteArray QXcbClipboard::getSelection(xcb_atom_t selection, xcb_atom_t target, QT_END_NAMESPACE +#include "moc_qxcbclipboard.cpp" #include "qxcbclipboard.moc" diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 9e2a37a6..0eafb9b3 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -750,7 +750,7 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event) case XCB_XKB_NEW_KEYBOARD_NOTIFY: { xcb_xkb_new_keyboard_notify_event_t *ev = &xkb_event->new_keyboard_notify; if (ev->changed & XCB_XKB_NKN_DETAIL_KEYCODES) - m_keyboard->updateKeymap(ev); + m_keyboard->updateKeymap(); break; } default: @@ -1199,3 +1199,5 @@ void QXcbConnectionGrabber::release() } QT_END_NAMESPACE + +#include "moc_qxcbconnection.cpp" diff --git a/src/plugins/platforms/xcb/qxcbconnection_basic.cpp b/src/plugins/platforms/xcb/qxcbconnection_basic.cpp index 9dd608cd..115a1967 100644 --- a/src/plugins/platforms/xcb/qxcbconnection_basic.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection_basic.cpp @@ -430,3 +430,5 @@ void QXcbBasicConnection::initializeXKB() } QT_END_NAMESPACE + +#include "moc_qxcbconnection_basic.cpp" diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp index 27a2526d..5a36cfa0 100644 --- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp @@ -645,7 +645,7 @@ void QXcbConnection::xi2ProcessTouch(void *xiDevEvent, QXcbWindow *platformWindo continue; if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled())) qCDebug(lcQpaXInputEvents, " valuator %20s value %lf from range %lf -> %lf", - atomName(vci.label).constData(), value, vci.min, vci.max); + atomName(atom(vci.label)).constData(), value, vci.min, vci.max); if (value > vci.max) value = vci.max; if (value < vci.min) diff --git a/src/plugins/platforms/xcb/qxcbeventdispatcher.cpp b/src/plugins/platforms/xcb/qxcbeventdispatcher.cpp index 3cb2a5b5..eb0280cf 100644 --- a/src/plugins/platforms/xcb/qxcbeventdispatcher.cpp +++ b/src/plugins/platforms/xcb/qxcbeventdispatcher.cpp @@ -160,3 +160,5 @@ QAbstractEventDispatcher *QXcbEventDispatcher::createEventDispatcher(QXcbConnect } QT_END_NAMESPACE + +#include "moc_qxcbeventdispatcher.cpp" diff --git a/src/plugins/platforms/xcb/qxcbeventqueue.cpp b/src/plugins/platforms/xcb/qxcbeventqueue.cpp index 9f3c3812..14f53106 100644 --- a/src/plugins/platforms/xcb/qxcbeventqueue.cpp +++ b/src/plugins/platforms/xcb/qxcbeventqueue.cpp @@ -400,3 +400,5 @@ bool QXcbEventQueue::isCloseConnectionEvent(const xcb_generic_event_t *event) } QT_END_NAMESPACE + +#include "moc_qxcbeventqueue.cpp" diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index efecd7e2..e8286381 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -365,17 +365,6 @@ void QXcbKeyboard::updateKeymap(xcb_mapping_notify_event_t *event) updateKeymap(); } -void QXcbKeyboard::updateKeymap(xcb_xkb_new_keyboard_notify_event_t *event) -{ - if (!event) - return; - - if (event->deviceID != event->oldDeviceID) - m_config = false; - - updateKeymap(); -} - void QXcbKeyboard::updateKeymap() { KeysymModifierMap keysymMods; @@ -383,6 +372,8 @@ void QXcbKeyboard::updateKeymap() keysymMods = keysymsToModifiers(); updateModifiers(keysymMods); + m_config = true; + if (!m_xkbContext) { m_xkbContext.reset(xkb_context_new(XKB_CONTEXT_NO_DEFAULT_INCLUDES)); if (!m_xkbContext) { @@ -398,13 +389,8 @@ void QXcbKeyboard::updateKeymap() if (connection()->hasXKB()) { m_xkbKeymap.reset(xkb_x11_keymap_new_from_device(m_xkbContext.get(), xcb_connection(), core_device_id, XKB_KEYMAP_COMPILE_NO_FLAGS)); - if (m_xkbKeymap) { - if (m_config) - m_xkbState.reset(xkb_state_new(m_xkbKeymap.get())); - else - m_xkbState.reset(xkb_x11_state_new_from_device(m_xkbKeymap.get(), xcb_connection(), core_device_id)); - - } + if (m_xkbKeymap) + m_xkbState.reset(xkb_x11_state_new_from_device(m_xkbKeymap.get(), xcb_connection(), core_device_id)); } else { m_xkbKeymap.reset(keymapFromCore(keysymMods)); if (m_xkbKeymap) @@ -425,8 +411,6 @@ void QXcbKeyboard::updateKeymap() updateXKBMods(); QXkbCommon::verifyHasLatinLayout(m_xkbKeymap.get()); - - m_config = true; } QList QXcbKeyboard::possibleKeys(const QKeyEvent *event) const diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.h b/src/plugins/platforms/xcb/qxcbkeyboard.h index b652c85f..0ee08aef 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.h +++ b/src/plugins/platforms/xcb/qxcbkeyboard.h @@ -69,7 +69,6 @@ public: Qt::KeyboardModifiers translateModifiers(int s) const; void updateKeymap(xcb_mapping_notify_event_t *event); - void updateKeymap(xcb_xkb_new_keyboard_notify_event_t *event); void updateKeymap(); QList possibleKeys(const QKeyEvent *event) const; diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp index 0b3219f7..bbce6961 100644 --- a/src/plugins/platforms/xcb/qxcbmime.cpp +++ b/src/plugins/platforms/xcb/qxcbmime.cpp @@ -319,3 +319,5 @@ xcb_atom_t QXcbMime::mimeAtomForFormat(QXcbConnection *connection, const QString } QT_END_NAMESPACE + +#include "moc_qxcbmime.cpp" diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp index 30fa6864..c96bcb1d 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp @@ -675,3 +675,5 @@ QString QXcbNativeInterface::dumpNativeWindows(WId root) const } QT_END_NAMESPACE + +#include "moc_qxcbnativeinterface.cpp" diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h index 4656f46b..f80f23f0 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.h +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h @@ -133,8 +133,6 @@ signals: private: const QByteArray m_nativeEventType = QByteArrayLiteral("xcb_generic_event_t"); - xcb_atom_t m_sysTraySelectionAtom = XCB_ATOM_NONE; - static QXcbScreen *qPlatformScreenForWindow(QWindow *window); QList m_handlers; diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index 464d0386..9edba725 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -271,7 +271,7 @@ void QXcbVirtualDesktop::handleScreenChange(xcb_randr_screen_change_notify_event _NET_WORKAREA means with multiple attached monitors. This gets worse when monitors have different dimensions and/or screens are not virtually aligned. In Qt we want the available geometry per monitor (QScreen), not desktop (represented by _NET_WORKAREA). WM specification - does not have an atom for this. Thus, QScreen is limted by the lack of support from the + does not have an atom for this. Thus, QScreen is limited by the lack of support from the underlying system. One option could be that Qt does WM's job of calculating this by subtracting geometries of diff --git a/src/plugins/platforms/xcb/qxcbsystemtraytracker.cpp b/src/plugins/platforms/xcb/qxcbsystemtraytracker.cpp index ff5ad98c..7f1fc7f5 100644 --- a/src/plugins/platforms/xcb/qxcbsystemtraytracker.cpp +++ b/src/plugins/platforms/xcb/qxcbsystemtraytracker.cpp @@ -176,3 +176,5 @@ xcb_visualid_t QXcbSystemTrayTracker::netSystemTrayVisual() } QT_END_NAMESPACE + +#include "moc_qxcbsystemtraytracker.cpp" diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index ffda7b6a..bffad0fa 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -93,6 +93,8 @@ enum { QT_BEGIN_NAMESPACE +Q_LOGGING_CATEGORY(lcQpaWindow, "qt.qpa.window"); + Q_DECLARE_TYPEINFO(xcb_rectangle_t, Q_PRIMITIVE_TYPE); #undef FocusIn @@ -555,6 +557,7 @@ void QXcbWindow::destroy() } m_mapped = false; + m_recreationReasons = RecreationNotNeeded; if (m_pendingSyncRequest) m_pendingSyncRequest->invalidate(); @@ -564,11 +567,6 @@ void QXcbWindow::setGeometry(const QRect &rect) { QPlatformWindow::setGeometry(rect); - if (shouldDeferTask(Task::SetGeometry)) { - m_deferredGeometry = rect; - return; - } - propagateSizeHints(); QXcbScreen *currentScreen = xcbScreen(); @@ -693,10 +691,12 @@ void QXcbWindow::setVisible(bool visible) void QXcbWindow::show() { - if (shouldDeferTask(Task::Map)) - return; - if (window()->isTopLevel()) { + if (m_recreationReasons != RecreationNotNeeded) { + qCDebug(lcQpaWindow) << "QXcbWindow: need to recreate window" << window() << m_recreationReasons; + create(); + m_recreationReasons = RecreationNotNeeded; + } // update WM_NORMAL_HINTS propagateSizeHints(); @@ -706,7 +706,7 @@ void QXcbWindow::show() if (isTransient(window())) { const QWindow *tp = window()->transientParent(); if (tp && tp->handle()) - transientXcbParent = static_cast(tp->handle())->winId(); + transientXcbParent = tp->handle()->winId(); // Default to client leader if there is no transient parent, else modal dialogs can // be hidden by their parents. if (!transientXcbParent) @@ -746,10 +746,6 @@ void QXcbWindow::show() void QXcbWindow::hide() { - if (shouldDeferTask(Task::Unmap)) - return; - - m_wmStateValid = false; xcb_unmap_window(xcb_connection(), m_window); // send synthetic UnmapNotify event according to icccm 4.1.4 @@ -909,9 +905,6 @@ QXcbWindow::NetWmStates QXcbWindow::netWmStates() void QXcbWindow::setWindowFlags(Qt::WindowFlags flags) { - if (shouldDeferTask(Task::SetWindowFlags)) - return; - Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); if (type == Qt::ToolTip) @@ -919,6 +912,12 @@ void QXcbWindow::setWindowFlags(Qt::WindowFlags flags) if (type == Qt::Popup) flags |= Qt::X11BypassWindowManagerHint; + Qt::WindowFlags oldflags = window()->flags(); + if ((oldflags & Qt::WindowStaysOnTopHint) != (flags & Qt::WindowStaysOnTopHint)) + m_recreationReasons |= WindowStaysOnTopHintChanged; + if ((oldflags & Qt::WindowStaysOnBottomHint) != (flags & Qt::WindowStaysOnBottomHint)) + m_recreationReasons |= WindowStaysOnBottomHintChanged; + const quint32 mask = XCB_CW_OVERRIDE_REDIRECT | XCB_CW_EVENT_MASK; const quint32 values[] = { // XCB_CW_OVERRIDE_REDIRECT @@ -941,8 +940,6 @@ void QXcbWindow::setWindowFlags(Qt::WindowFlags flags) setTransparentForMouseEvents(flags & Qt::WindowTransparentForInput); updateDoesNotAcceptFocus(flags & Qt::WindowDoesNotAcceptFocus); - - m_isWmManagedWindow = !(flags & Qt::X11BypassWindowManagerHint); } void QXcbWindow::setMotifWmHints(Qt::WindowFlags flags) @@ -1142,9 +1139,6 @@ void QXcbWindow::setWindowState(Qt::WindowStates state) if (state == m_windowState) return; - if (shouldDeferTask(Task::SetWindowState)) - return; - // unset old state if (m_windowState & Qt::WindowMinimized) xcb_map_window(xcb_connection(), m_window); @@ -1350,6 +1344,12 @@ void QXcbWindow::setWindowIcon(const QIcon &icon) } if (!icon_data.isEmpty()) { + // Ignore icon exceeding maximum xcb request length + if (size_t(icon_data.size()) > xcb_get_maximum_request_length(xcb_connection())) { + qWarning("Ignoring window icon: Size %d exceeds maximum xcb request length %u.", + icon_data.size(), xcb_get_maximum_request_length(xcb_connection())); + return; + } xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window, @@ -1639,7 +1639,7 @@ void QXcbWindow::setWmWindowType(QXcbWindowFunctions::WmWindowTypes types, Qt::W break; } - if ((flags & Qt::FramelessWindowHint) && !(type & QXcbWindowFunctions::KdeOverride)) { + if ((flags & Qt::FramelessWindowHint) && !(types & QXcbWindowFunctions::KdeOverride)) { // override netwm type - quick and easy for KDE noborder atoms.append(atom(QXcbAtom::_KDE_NET_WM_WINDOW_TYPE_OVERRIDE)); } @@ -1894,10 +1894,6 @@ void QXcbWindow::handleUnmapNotifyEvent(const xcb_unmap_notify_event_t *event) if (event->window == m_window) { m_mapped = false; QWindowSystemInterface::handleExposeEvent(window(), QRegion()); - if (!m_isWmManagedWindow || parent()) { - m_wmStateValid = true; - handleDeferredTasks(); - } } } @@ -2212,98 +2208,30 @@ void QXcbWindow::handleLeaveNotifyEvent(const xcb_leave_notify_event_t *event) handleLeaveNotifyEvent(event->root_x, event->root_y, event->mode, event->detail, event->time); } -bool QXcbWindow::shouldDeferTask(Task task) -{ - if (m_wmStateValid) - return false; - - m_deferredTasks.append(task); - return true; -} - -void QXcbWindow::handleDeferredTasks() -{ - Q_ASSERT(m_wmStateValid == true); - if (m_deferredTasks.isEmpty()) - return; - - bool map = false; - bool unmap = false; - - QVector tasks; - for (auto taskIt = m_deferredTasks.rbegin(); taskIt != m_deferredTasks.rend(); ++taskIt) { - if (!tasks.contains(*taskIt)) - tasks.prepend(*taskIt); - } - - for (Task task : tasks) { - switch (task) { - case Task::Map: - map = true; - unmap = false; - break; - case Task::Unmap: - unmap = true; - map = false; - break; - case Task::SetGeometry: - setGeometry(m_deferredGeometry); - break; - case Task::SetWindowFlags: - setWindowFlags(window()->flags()); - break; - case Task::SetWindowState: - setWindowState(window()->windowState()); - break; - } - } - m_deferredTasks.clear(); - - if (map) { - Q_ASSERT(unmap == false); - show(); - } - if (unmap) { - Q_ASSERT(map == false); - hide(); - } -} - void QXcbWindow::handlePropertyNotifyEvent(const xcb_property_notify_event_t *event) { connection()->setTime(event->time); - const bool wmStateChanged = event->atom == atom(QXcbAtom::WM_STATE); - const bool netWmStateChanged = event->atom == atom(QXcbAtom::_NET_WM_STATE); - if (netWmStateChanged || wmStateChanged) { - if (wmStateChanged && !m_wmStateValid && m_isWmManagedWindow) { - // ICCCM 4.1.4 - // Clients that want to re-use a client window (e.g. by mapping it again) - // after withdrawing it must wait for the withdrawal to be complete before - // proceeding. The preferred method for doing this is for clients to wait for - // a window manager to update or remove the WM_STATE property. - m_wmStateValid = true; - handleDeferredTasks(); - } - if (event->state == XCB_PROPERTY_DELETE) + const bool propertyDeleted = event->state == XCB_PROPERTY_DELETE; + + if (event->atom == atom(QXcbAtom::_NET_WM_STATE) || event->atom == atom(QXcbAtom::WM_STATE)) { + if (propertyDeleted) return; - if (wmStateChanged) { + Qt::WindowStates newState = Qt::WindowNoState; + + if (event->atom == atom(QXcbAtom::WM_STATE)) { // WM_STATE: Quick check for 'Minimize'. auto reply = Q_XCB_REPLY(xcb_get_property, xcb_connection(), 0, m_window, atom(QXcbAtom::WM_STATE), XCB_ATOM_ANY, 0, 1024); if (reply && reply->format == 32 && reply->type == atom(QXcbAtom::WM_STATE)) { - auto data = static_cast(xcb_get_property_value(reply.get())); - if (reply->length != 0) { - const bool changedToWithdrawn = data[0] == XCB_ICCCM_WM_STATE_WITHDRAWN; - const bool changedToIconic = data[0] == XCB_ICCCM_WM_STATE_ICONIC; - m_minimized = changedToIconic || (changedToWithdrawn && m_minimized); - } + const quint32 *data = (const quint32 *)xcb_get_property_value(reply.get()); + if (reply->length != 0) + m_minimized = (data[0] == XCB_ICCCM_WM_STATE_ICONIC + || (data[0] == XCB_ICCCM_WM_STATE_WITHDRAWN && m_minimized)); } } - // _NET_WM_STATE handling - Qt::WindowStates newState = Qt::WindowNoState; const NetWmStates states = netWmStates(); // _NET_WM_STATE_HIDDEN should be set by the Window Manager to indicate that a window would // not be visible on the screen if its desktop/viewport were active and its coordinates were @@ -2325,6 +2253,7 @@ void QXcbWindow::handlePropertyNotifyEvent(const xcb_property_notify_event_t *ev if ((m_windowState & Qt::WindowMinimized) && connection()->mouseGrabber() == this) connection()->setMouseGrabber(nullptr); } + return; } else if (event->atom == atom(QXcbAtom::_NET_FRAME_EXTENTS)) { m_dirtyFrameMargins = true; } diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index 55af9279..8de486c6 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -74,13 +74,12 @@ public: Q_DECLARE_FLAGS(NetWmStates, NetWmState) - enum Task { - Map, - Unmap, - SetGeometry, - SetWindowFlags, - SetWindowState + enum RecreationReason { + RecreationNotNeeded = 0, + WindowStaysOnTopHintChanged = 0x1, + WindowStaysOnBottomHintChanged = 0x2 }; + Q_DECLARE_FLAGS(RecreationReasons, RecreationReason) QXcbWindow(QWindow *window); ~QXcbWindow(); @@ -151,9 +150,6 @@ public: QXcbWindow *toWindow() override; - bool shouldDeferTask(Task task); - void handleDeferredTasks(); - void handleMouseEvent(xcb_timestamp_t time, const QPoint &local, const QPoint &global, Qt::KeyboardModifiers modifiers, QEvent::Type type, Qt::MouseEventSource source); @@ -293,10 +289,7 @@ protected: qreal m_sizeHintsScaleFactor = 1.0; - bool m_wmStateValid = true; - QVector m_deferredTasks; - bool m_isWmManagedWindow = true; - QRect m_deferredGeometry; + RecreationReasons m_recreationReasons = RecreationNotNeeded; }; class QXcbForeignWindow : public QXcbWindow diff --git a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp index 65564b59..6c14093e 100644 --- a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp @@ -625,4 +625,6 @@ void QGtk3FontDialogHelper::applyOptions() QT_END_NAMESPACE +#include "moc_qgtk3dialoghelpers.cpp" + #include "qgtk3dialoghelpers.moc" diff --git a/src/plugins/platformthemes/gtk3/qgtk3menu.cpp b/src/plugins/platformthemes/gtk3/qgtk3menu.cpp index d9d117fa..d264fabf 100644 --- a/src/plugins/platformthemes/gtk3/qgtk3menu.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3menu.cpp @@ -483,3 +483,5 @@ void QGtk3Menu::onHide(GtkWidget *, void *data) } QT_END_NAMESPACE + +#include "moc_qgtk3menu.cpp" diff --git a/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp index 0048bbc1..32b2e84f 100644 --- a/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp +++ b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp @@ -302,6 +302,7 @@ void QXdgDesktopPortalFileDialog::openPortal() this, SLOT(gotResponse(uint,QVariantMap))); } + watcher->deleteLater(); }); } @@ -466,3 +467,5 @@ void QXdgDesktopPortalFileDialog::gotResponse(uint response, const QVariantMap & } QT_END_NAMESPACE + +#include "moc_qxdgdesktopportalfiledialog_p.cpp" diff --git a/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp index fb324afb..2fc3167f 100644 --- a/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp +++ b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp @@ -111,6 +111,7 @@ QXdgDesktopPortalTheme::QXdgDesktopPortalTheme() if (reply.isValid()) { d->fileChooserPortalVersion = reply.value().toUInt(); } + watcher->deleteLater(); }); } diff --git a/src/plugins/printsupport/cups/qcupsprintengine.cpp b/src/plugins/printsupport/cups/qcupsprintengine.cpp index 43d5e119..1f9cbc45 100644 --- a/src/plugins/printsupport/cups/qcupsprintengine.cpp +++ b/src/plugins/printsupport/cups/qcupsprintengine.cpp @@ -89,8 +89,10 @@ void QCupsPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &v break; case PPK_Duplex: { QPrint::DuplexMode mode = QPrint::DuplexMode(value.toInt()); - if (mode != d->duplex && d->m_printDevice.supportedDuplexModes().contains(mode)) + if (d->m_printDevice.supportedDuplexModes().contains(mode)) { d->duplex = mode; + d->duplexRequestedExplicitly = true; + } break; } case PPK_PrinterName: @@ -277,9 +279,12 @@ void QCupsPrintEnginePrivate::changePrinter(const QString &newPrinter) m_printDevice.swap(printDevice); printerName = m_printDevice.id(); - // Check if new printer supports current settings, otherwise us defaults - if (duplex != QPrint::DuplexAuto && !m_printDevice.supportedDuplexModes().contains(duplex)) + // in case a duplex value was explicitly set, check if new printer supports current value, + // otherwise use device default + if (!duplexRequestedExplicitly || !m_printDevice.supportedDuplexModes().contains(duplex)) { duplex = m_printDevice.defaultDuplexMode(); + duplexRequestedExplicitly = false; + } QPrint::ColorMode colorMode = grayscale ? QPrint::GrayScale : QPrint::Color; if (!m_printDevice.supportedColorModes().contains(colorMode)) grayscale = m_printDevice.defaultColorMode() == QPrint::GrayScale; diff --git a/src/plugins/printsupport/cups/qcupsprintengine_p.h b/src/plugins/printsupport/cups/qcupsprintengine_p.h index c021b0c6..8f81fe47 100644 --- a/src/plugins/printsupport/cups/qcupsprintengine_p.h +++ b/src/plugins/printsupport/cups/qcupsprintengine_p.h @@ -100,6 +100,7 @@ private: QStringList cupsOptions; QString cupsTempFile; QPrint::DuplexMode duplex; + bool duplexRequestedExplicitly = false; }; QT_END_NAMESPACE diff --git a/src/plugins/printsupport/windows/qwindowsprintdevice.cpp b/src/plugins/printsupport/windows/qwindowsprintdevice.cpp index f01e93d6..bcc3d9a0 100644 --- a/src/plugins/printsupport/windows/qwindowsprintdevice.cpp +++ b/src/plugins/printsupport/windows/qwindowsprintdevice.cpp @@ -496,7 +496,7 @@ QStringList QWindowsPrintDevice::availablePrintDeviceIds() QString QWindowsPrintDevice::defaultPrintDeviceId() { DWORD size = 0; - if (GetDefaultPrinter(NULL, &size) == ERROR_FILE_NOT_FOUND) + if (GetDefaultPrinter(NULL, &size) == ERROR_FILE_NOT_FOUND || size < 2) return QString(); QScopedArrayPointer name(new wchar_t[size]); diff --git a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp index 67e7154f..40876152 100644 --- a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp +++ b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp @@ -817,7 +817,7 @@ bool QIBaseResultPrivate::writeArray(int column, const QList &list) ba.resize(int(bufLen)); if (list.size() > arraySize) { - error = QLatin1String("Array size missmatch: size of %1 is %2, size of provided list is %3"); + error = QLatin1String("Array size mismatch: size of %1 is %2, size of provided list is %3"); error = error.arg(QLatin1String(sqlname)).arg(arraySize).arg(list.size()); q->setLastError(QSqlError(error, QLatin1String(""), QSqlError::StatementError)); return false; diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp index 7ca055ee..4427efb7 100644 --- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp +++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp @@ -223,7 +223,7 @@ public: struct QMyField { char *outField = nullptr; - MYSQL_FIELD *myField = nullptr; + const MYSQL_FIELD *myField = nullptr; QMetaType::Type type = QMetaType::UnknownType; my_bool nullIndicator = false; ulong bufLength = 0ul; @@ -360,12 +360,9 @@ static bool qIsInteger(int t) void QMYSQLResultPrivate::bindBlobs() { - int i; - MYSQL_FIELD *fieldInfo; MYSQL_BIND *bind; - - for(i = 0; i < fields.count(); ++i) { - fieldInfo = fields.at(i).myField; + for (int i = 0; i < fields.count(); ++i) { + const MYSQL_FIELD *fieldInfo = fields.at(i).myField; if (qIsBlob(inBinds[i].buffer_type) && meta && fieldInfo) { bind = &inBinds[i]; bind->buffer_length = fieldInfo->max_length; @@ -378,8 +375,6 @@ void QMYSQLResultPrivate::bindBlobs() bool QMYSQLResultPrivate::bindInValues() { - MYSQL_BIND *bind; - char *field; int i = 0; if (!meta) @@ -392,35 +387,34 @@ bool QMYSQLResultPrivate::bindInValues() inBinds = new MYSQL_BIND[fields.size()]; memset(inBinds, 0, fields.size() * sizeof(MYSQL_BIND)); - MYSQL_FIELD *fieldInfo; + const MYSQL_FIELD *fieldInfo; while((fieldInfo = mysql_fetch_field(meta))) { + MYSQL_BIND *bind = &inBinds[i]; + QMyField &f = fields[i]; f.myField = fieldInfo; - + bind->buffer_length = f.bufLength = fieldInfo->length + 1; + bind->buffer_type = fieldInfo->type; f.type = qDecodeMYSQLType(fieldInfo->type, fieldInfo->flags); if (qIsBlob(fieldInfo->type)) { // the size of a blob-field is available as soon as we call // mysql_stmt_store_result() // after mysql_stmt_exec() in QMYSQLResult::exec() - fieldInfo->length = 0; + bind->buffer_length = f.bufLength = 0; hasBlobs = true; } else if (qIsInteger(f.type)) { - fieldInfo->length = 8; + bind->buffer_length = f.bufLength = 8; } else { - fieldInfo->type = MYSQL_TYPE_STRING; + bind->buffer_type = MYSQL_TYPE_STRING; } - bind = &inBinds[i]; - field = new char[fieldInfo->length + 1]; - memset(field, 0, fieldInfo->length + 1); - bind->buffer_type = fieldInfo->type; - bind->buffer = field; - bind->buffer_length = f.bufLength = fieldInfo->length + 1; bind->is_null = &f.nullIndicator; bind->length = &f.bufLength; bind->is_unsigned = fieldInfo->flags & UNSIGNED_FLAG ? 1 : 0; - f.outField=field; + + char *field = new char[bind->buffer_length + 1]{}; + bind->buffer = f.outField = field; ++i; } @@ -1597,3 +1591,5 @@ bool QMYSQLDriver::isIdentifierEscaped(const QString &identifier, IdentifierType } QT_END_NAMESPACE + +#include "moc_qsql_mysql_p.cpp" diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp index 36cb7e1a..a290b74f 100644 --- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp +++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp @@ -1066,3 +1066,5 @@ QT_WARNING_POP } QT_END_NAMESPACE + +#include "moc_qsql_sqlite_p.cpp" diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm index 2a37a951..4171e082 100644 --- a/src/plugins/styles/mac/qmacstyle_mac.mm +++ b/src/plugins/styles/mac/qmacstyle_mac.mm @@ -1680,8 +1680,8 @@ bool QMacStylePrivate::CocoaControl::getCocoaButtonTypeAndBezelStyle(NSButtonTyp *bezelStyle = NSShadowlessSquareBezelStyle; break; case Button_PushButton: - *buttonType = NSPushOnPushOffButton; - *bezelStyle = NSRoundedBezelStyle; + *buttonType = NSButtonTypeMomentaryPushIn; + *bezelStyle = NSBezelStyleRounded; break; default: return false; @@ -3725,8 +3725,20 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter pb.frame = frameRect.toCGRect(); pb.enabled = isEnabled; + + // With the 'momentary push in' type this gives an impression of a + // button in a 'pressed' state (the 'momentary push in' does + // not show its state otherwise): [pb highlight:isPressed]; - pb.state = isHighlighted && !isPressed ? NSOnState : NSOffState; + + if (cw.type == QMacStylePrivate::Button_SquareButton) { + pb.state = isHighlighted && !isPressed ? NSControlStateValueOn : NSControlStateValueOff; + } else { + // For default/checked button this will give the required + // button accent color: + pb.keyEquivalent = isHighlighted ? @"\r" : @""; + } + d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) { [pb.cell drawBezelWithFrame:r inView:pb.superview]; }); @@ -3768,16 +3780,22 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter const bool hasText = !btn.text.isEmpty(); const bool isActive = btn.state & State_Active; const bool isPressed = btn.state & State_Sunken; + const bool isDefault = (btn.features & QStyleOptionButton::DefaultButton && !d->autoDefaultButton) + || d->autoDefaultButton == btn.styleObject; const auto ct = cocoaControlType(&btn, w); if (!hasMenu && ct != QMacStylePrivate::Button_SquareButton) { - if (isPressed - || (isActive && isEnabled - && ((btn.state & State_On) - || ((btn.features & QStyleOptionButton::DefaultButton) && !d->autoDefaultButton) - || d->autoDefaultButton == btn.styleObject))) - btn.palette.setColor(QPalette::ButtonText, Qt::white); + if (isPressed || (isActive && isEnabled && ((btn.state & State_On) || isDefault))) + btn.palette.setColor(QPalette::ButtonText, Qt::white); + } + + if (isEnabled && !isDarkMode() && QOperatingSystemVersion::current() > QOperatingSystemVersion::MacOSBigSur) { + if (!isDefault && !(btn.state & State_On)) { + // On macOS 12 it's a gray button, white text color (if set in the + // previous statement) would be almost invisible. + btn.palette.setColor(QPalette::ButtonText, Qt::black); + } } if ((!hasIcon && !hasMenu) || (hasIcon && !hasText)) { @@ -3955,6 +3973,13 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter } pb.frame = frameRect.toCGRect(); + if (!isPopupButton) { + // Note: these days we use 'momentary push in' for Button_PushButton, + // but tabs are also rendered using NSButton/ButtonPushButton, and + // here we need 'push on/off' to make it work (tab highlight colors). + pb.buttonType = NSButtonTypePushOnPushOff; + } + pb.enabled = isEnabled; [pb highlight:isPressed]; // Set off state when inactive. See needsInactiveHack for when it's selected @@ -4073,27 +4098,6 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter } p->restore(); } - - // TODO Needs size adjustment to fit the focus ring - if (tabOpt->state & State_HasFocus) { - QMacStylePrivate::CocoaControlType focusRingType; - switch (tp) { - case QStyleOptionTab::Beginning: - focusRingType = verticalTabs ? QMacStylePrivate::SegmentedControl_Last - : QMacStylePrivate::SegmentedControl_First; - break; - case QStyleOptionTab::Middle: - focusRingType = QMacStylePrivate::SegmentedControl_Middle; - break; - case QStyleOptionTab::End: - focusRingType = verticalTabs ? QMacStylePrivate::SegmentedControl_First - : QMacStylePrivate::SegmentedControl_Last; - break; - case QStyleOptionTab::OnlyOneTab: - focusRingType = QMacStylePrivate::SegmentedControl_Single; - break; - } - } } break; case CE_TabBarTabLabel: diff --git a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp index 11cffd8c..3148abf5 100644 --- a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp +++ b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp @@ -325,7 +325,7 @@ void QWindowsXPStylePrivate::cleanupVistaTreeViewTheming() /* \internal Closes all open theme data handles to ensure that we don't leak - resources, and that we don't refere to old handles when for + resources, and that we don't refer to old handles when for example the user changes the theme style. */ void QWindowsXPStylePrivate::cleanupHandleMap() @@ -572,7 +572,7 @@ bool QWindowsXPStylePrivate::hasAlphaChannel(const QRect &rect) The rule of thumb for premultiplied pixmaps is that the color values of a pixel can never be higher than the alpha values, so we use this to our advantage here, and fix all instances where - this occures. + this occurs. */ bool QWindowsXPStylePrivate::fixAlphaChannel(const QRect &rect) { @@ -600,7 +600,7 @@ bool QWindowsXPStylePrivate::fixAlphaChannel(const QRect &rect) Swaps the alpha values on certain pixels: 0xFF?????? -> 0x00?????? 0x00?????? -> 0xFF?????? - Used to determin the mask of a non-alpha transparent pixmap in + Used to determine the mask of a non-alpha transparent pixmap in the native doublebuffer, and swap the alphas so we may paint the image as a Premultiplied QImage with drawImage(), and obtain the mask transparency. @@ -784,7 +784,7 @@ bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeDa It should only be used when the painteengine doesn't provide a proper HDC for direct painting (e.g. when doing a grabWidget(), painting to other pixmaps etc), or when special transformations are needed (e.g. - flips (horizonal mirroring only, vertical are handled by the theme + flips (horizontal mirroring only, vertical are handled by the theme engine). \a correctionFactor is an additional factor used to scale up controls @@ -3957,7 +3957,7 @@ static QList all_props; directly. Since we cannot rely on the pixel data we get from Microsoft when drawing into the DIB section, we use this function to - see the actual data we got, and can determin the appropriate + see the actual data we got, and can determine the appropriate action. */ void QWindowsXPStylePrivate::dumpNativeDIB(int w, int h) diff --git a/src/printsupport/dialogs/qabstractprintdialog.cpp b/src/printsupport/dialogs/qabstractprintdialog.cpp index b0d03037..f39b245e 100644 --- a/src/printsupport/dialogs/qabstractprintdialog.cpp +++ b/src/printsupport/dialogs/qabstractprintdialog.cpp @@ -483,3 +483,5 @@ void QPrintDialog::open(QObject *receiver, const char *member) } QT_END_NAMESPACE + +#include "moc_qabstractprintdialog.cpp" diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp index 78e5b8d1..92331f89 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp @@ -532,6 +532,7 @@ void QPageSetupWidget::updateWidget() void QPageSetupWidget::setupPrinter() const { m_printer->setPageLayout(m_pageLayout); + m_printer->setPageOrientation(m_pageLayout.orientation()); #if QT_CONFIG(cups) QCUPSSupport::PagesPerSheet pagesPerSheet = qvariant_cast(m_ui.pagesPerSheetCombo->currentData() ); @@ -748,4 +749,6 @@ int QPageSetupDialog::exec() QT_END_NAMESPACE +#include "moc_qpagesetupdialog_unix_p.cpp" + #include "moc_qpagesetupdialog.cpp" diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index c5b845f4..5a5ba1d0 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -702,13 +702,14 @@ void QPrintDialogPrivate::selectPrinter(const QPrinter::OutputFormat outputForma else options.grayscale->setChecked(true); - // keep duplex value explicitly set by user, if any, and selected printer supports it; - // use device default otherwise + // duplex priorities to be as follows: + // 1) a user-selected duplex value in the dialog has highest prority + // 2) duplex value set in the QPrinter QPrint::DuplexMode duplex; if (explicitDuplexMode != QPrint::DuplexAuto && supportedDuplexMode.contains(explicitDuplexMode)) duplex = explicitDuplexMode; else - duplex = top->d->m_currentPrintDevice.defaultDuplexMode(); + duplex = static_cast(p->duplex()); switch (duplex) { case QPrint::DuplexNone: options.noDuplex->setChecked(true); break; @@ -1242,10 +1243,10 @@ void QUnixPrintWidgetPrivate::_q_printerChanged(int index) QString filename = widget.filename->text(); widget.filename->setText(filename); widget.lOutput->setEnabled(true); - if (optionsPane) - optionsPane->selectPrinter(QPrinter::PdfFormat); printer->setOutputFormat(QPrinter::PdfFormat); m_currentPrintDevice = QPrintDevice(); + if (optionsPane) + optionsPane->selectPrinter(QPrinter::PdfFormat); return; } } diff --git a/src/printsupport/kernel/qplatformprintplugin.cpp b/src/printsupport/kernel/qplatformprintplugin.cpp index 9a7656f7..bdd3a410 100644 --- a/src/printsupport/kernel/qplatformprintplugin.cpp +++ b/src/printsupport/kernel/qplatformprintplugin.cpp @@ -99,4 +99,6 @@ QPlatformPrinterSupport *QPlatformPrinterSupportPlugin::get() QT_END_NAMESPACE +#include "moc_qplatformprintplugin.cpp" + #endif diff --git a/src/printsupport/widgets/qcupsjobwidget.cpp b/src/printsupport/widgets/qcupsjobwidget.cpp index 456ed9db..1b3044aa 100644 --- a/src/printsupport/widgets/qcupsjobwidget.cpp +++ b/src/printsupport/widgets/qcupsjobwidget.cpp @@ -261,3 +261,5 @@ QCUPSSupport::BannerPage QCupsJobWidget::endBannerPage() const } QT_END_NAMESPACE + +#include "moc_qcupsjobwidget_p.cpp" diff --git a/src/sql/doc/src/sql-driver.qdoc b/src/sql/doc/src/sql-driver.qdoc index 38de3f11..a3f145b6 100644 --- a/src/sql/doc/src/sql-driver.qdoc +++ b/src/sql/doc/src/sql-driver.qdoc @@ -479,7 +479,7 @@ database connections, or if we execute query2 after the while loop. \note Some methods of QSqlDatabase like tables(), primaryIndex() - implicity execute SQL queries, so these also cannot be used while + implicitly execute SQL queries, so these also cannot be used while navigating the results of forward-only query. \note QPSQL will print the following warning if it detects a loss of @@ -758,7 +758,7 @@ You should always use client libraries that have been compiled with the same compiler as you are using for your project. If you cannot get - a source distibution to compile the client libraries yourself, you + a source distribution to compile the client libraries yourself, you must make sure that the pre-compiled library is compatible with your compiler, otherwise you will get a lot of "undefined symbols" errors. Some compilers have tools to convert libraries, e.g. Borland diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index d1c9057a..202222c5 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -845,3 +845,5 @@ bool QSqlDriver::cancelQuery() } QT_END_NAMESPACE + +#include "moc_qsqldriver.cpp" diff --git a/src/sql/kernel/qsqldriverplugin.cpp b/src/sql/kernel/qsqldriverplugin.cpp index 8e9982fc..26257842 100644 --- a/src/sql/kernel/qsqldriverplugin.cpp +++ b/src/sql/kernel/qsqldriverplugin.cpp @@ -100,3 +100,5 @@ QSqlDriverPlugin::~QSqlDriverPlugin() } QT_END_NAMESPACE + +#include "moc_qsqldriverplugin.cpp" diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp index 32c6166c..60afef10 100644 --- a/src/sql/kernel/qsqlquery.cpp +++ b/src/sql/kernel/qsqlquery.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtSql module of the Qt Toolkit. @@ -377,6 +377,10 @@ bool QSqlQuery::exec(const QString& query) QElapsedTimer t; t.start(); #endif + if (!driver()) { + qWarning("QSqlQuery::exec: called before driver has been set up"); + return false; + } if (d->ref.loadRelaxed() != 1) { bool fo = isForwardOnly(); *this = QSqlQuery(driver()->createResult()); diff --git a/src/sql/models/qsqlquerymodel.cpp b/src/sql/models/qsqlquerymodel.cpp index 6d4e2c09..d7deffec 100644 --- a/src/sql/models/qsqlquerymodel.cpp +++ b/src/sql/models/qsqlquerymodel.cpp @@ -702,3 +702,5 @@ QModelIndex QSqlQueryModel::indexInQuery(const QModelIndex &item) const } QT_END_NAMESPACE + +#include "moc_qsqlquerymodel.cpp" diff --git a/src/sql/models/qsqlrelationaltablemodel.cpp b/src/sql/models/qsqlrelationaltablemodel.cpp index 20adec6a..72f4da7e 100644 --- a/src/sql/models/qsqlrelationaltablemodel.cpp +++ b/src/sql/models/qsqlrelationaltablemodel.cpp @@ -789,3 +789,5 @@ bool QSqlRelationalTableModel::removeColumns(int column, int count, const QModel } QT_END_NAMESPACE + +#include "moc_qsqlrelationaltablemodel.cpp" diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index e1b95e46..5bfbe1dd 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -1472,3 +1472,5 @@ QSqlRecord QSqlTableModel::primaryValues(int row) const } QT_END_NAMESPACE + +#include "moc_qsqltablemodel.cpp" diff --git a/src/testlib/qabstractitemmodeltester.cpp b/src/testlib/qabstractitemmodeltester.cpp index 8efb9c53..1cd18b98 100644 --- a/src/testlib/qabstractitemmodeltester.cpp +++ b/src/testlib/qabstractitemmodeltester.cpp @@ -845,3 +845,5 @@ bool QAbstractItemModelTesterPrivate::compare(const T1 &t1, const T2 &t2, QT_END_NAMESPACE + +#include "moc_qabstractitemmodeltester.cpp" diff --git a/src/testlib/qabstracttestlogger_p.h b/src/testlib/qabstracttestlogger_p.h index 3e4f725a..06a39ee6 100644 --- a/src/testlib/qabstracttestlogger_p.h +++ b/src/testlib/qabstracttestlogger_p.h @@ -63,6 +63,7 @@ class QTestData; class Q_TESTLIB_EXPORT QAbstractTestLogger { + Q_DISABLE_COPY_MOVE(QAbstractTestLogger) public: enum IncidentTypes { Pass, diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp index 5d9283d8..851a2846 100644 --- a/src/testlib/qplaintestlogger.cpp +++ b/src/testlib/qplaintestlogger.cpp @@ -225,7 +225,8 @@ void QPlainTestLogger::outputMessage(const char *str) outputString(str); } -void QPlainTestLogger::printMessage(const char *type, const char *msg, const char *file, int line) +void QPlainTestLogger::printMessage(MessageSource source, const char *type, const char *msg, + const char *file, int line) { QTEST_ASSERT(type); QTEST_ASSERT(msg); @@ -233,13 +234,23 @@ void QPlainTestLogger::printMessage(const char *type, const char *msg, const cha QTestCharBuffer messagePrefix; QTestCharBuffer failureLocation; - if (file) { #ifdef Q_OS_WIN -#define FAILURE_LOCATION_STR "\n%s(%d) : failure location" + constexpr const char *INCIDENT_LOCATION_STR = "\n%s(%d) : failure location"; + constexpr const char *OTHER_LOCATION_STR = "\n%s(%d) : message location"; #else -#define FAILURE_LOCATION_STR "\n Loc: [%s(%d)]" + constexpr const char *INCIDENT_LOCATION_STR = "\n Loc: [%s(%d)]"; + constexpr const char *OTHER_LOCATION_STR = INCIDENT_LOCATION_STR; #endif - QTest::qt_asprintf(&failureLocation, FAILURE_LOCATION_STR, file, line); + + if (file) { + switch (source) { + case MessageSource::Incident: + QTest::qt_asprintf(&failureLocation, INCIDENT_LOCATION_STR, file, line); + break; + case MessageSource::Other: + QTest::qt_asprintf(&failureLocation, OTHER_LOCATION_STR, file, line); + break; + } } const char *msgFiller = msg[0] ? " " : ""; @@ -360,7 +371,7 @@ void QPlainTestLogger::stopLogging() void QPlainTestLogger::enterTestFunction(const char * /*function*/) { if (QTestLog::verboseLevel() >= 1) - printMessage(QTest::messageType2String(Info), "entering"); + printMessage(MessageSource::Other, QTest::messageType2String(Info), "entering"); } void QPlainTestLogger::leaveTestFunction() @@ -375,7 +386,7 @@ void QPlainTestLogger::addIncident(IncidentTypes type, const char *description, && QTestLog::verboseLevel() < 0) return; - printMessage(QTest::incidentType2String(type), description, file, line); + printMessage(MessageSource::Incident, QTest::incidentType2String(type), description, file, line); } void QPlainTestLogger::addBenchmarkResult(const QBenchmarkResult &result) @@ -399,7 +410,7 @@ void QPlainTestLogger::addMessage(MessageTypes type, const QString &message, if (type != QAbstractTestLogger::QFatal && QTestLog::verboseLevel() < 0) return; - printMessage(QTest::messageType2String(type), qPrintable(message), file, line); + printMessage(MessageSource::Other, QTest::messageType2String(type), qPrintable(message), file, line); } QT_END_NAMESPACE diff --git a/src/testlib/qplaintestlogger_p.h b/src/testlib/qplaintestlogger_p.h index 80ef4864..1a19b994 100644 --- a/src/testlib/qplaintestlogger_p.h +++ b/src/testlib/qplaintestlogger_p.h @@ -78,7 +78,12 @@ public: const char *file = nullptr, int line = 0) override; private: - void printMessage(const char *type, const char *msg, const char *file = nullptr, int line = 0); + enum class MessageSource { + Incident, + Other, + }; + void printMessage(MessageSource source, const char *type, const char *msg, + const char *file = nullptr, int line = 0); void outputMessage(const char *str); void printBenchmarkResult(const QBenchmarkResult &result); }; diff --git a/src/testlib/qteamcitylogger.cpp b/src/testlib/qteamcitylogger.cpp index 8a771434..1afec294 100644 --- a/src/testlib/qteamcitylogger.cpp +++ b/src/testlib/qteamcitylogger.cpp @@ -268,9 +268,8 @@ void QTeamCityLogger::addPendingMessage(const char *type, const QString &msg, co if (file) { pendMessage += QString(QLatin1String("%1 |[Loc: %2(%3)|]: %4")) - .arg(QString::fromUtf8(type), QString::fromUtf8(file)) - .arg(line) - .arg(msg); + .arg(QString::fromUtf8(type), QString::fromUtf8(file), + QString::number(line), msg); } else { diff --git a/src/testlib/qtestdata.h b/src/testlib/qtestdata.h index cf10fed8..ed81a9de 100644 --- a/src/testlib/qtestdata.h +++ b/src/testlib/qtestdata.h @@ -85,6 +85,14 @@ inline QTestData &operator<<(QTestData &data, const char * value) return data; } +#ifdef __cpp_char8_t +Q_WEAK_OVERLOAD +inline QTestData &operator<<(QTestData &data, const char8_t *value) +{ + return data << reinterpret_cast(value); +} +#endif + #ifdef QT_USE_QSTRINGBUILDER template inline QTestData &operator<<(QTestData &data, const QStringBuilder &value) diff --git a/src/testlib/qtestutil_macos.mm b/src/testlib/qtestutil_macos.mm index 880cd0f9..e6638e5c 100644 --- a/src/testlib/qtestutil_macos.mm +++ b/src/testlib/qtestutil_macos.mm @@ -53,8 +53,11 @@ namespace QTestPrivate { to start with a clean slate and prevents the "previous restore failed" dialog from showing if there was a test crash. */ - void disableWindowRestore() { - [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ApplePersistenceIgnoreState"]; + void disableWindowRestore() + { + [NSUserDefaults.standardUserDefaults registerDefaults:@{ + @"ApplePersistenceIgnoreState" : @YES + }]; } bool macCrashReporterWillShowDialog() diff --git a/src/tools/androiddeployqt/main.cpp b/src/tools/androiddeployqt/main.cpp index de746d2e..6a3d03c3 100644 --- a/src/tools/androiddeployqt/main.cpp +++ b/src/tools/androiddeployqt/main.cpp @@ -157,6 +157,7 @@ struct Options QString sdkPath; QString sdkBuildToolsVersion; QString ndkPath; + QString ndkVersion; QString jdkPath; // Build paths @@ -893,6 +894,30 @@ bool readInputFile(Options *options) options->ndkPath = ndk.toString(); } + { + const QString ndkPropertiesPath = options->ndkPath + QStringLiteral("/source.properties"); + QFile file(ndkPropertiesPath); + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { + const char pkgRevisionKey[] = "Pkg.Revision"; + while (!file.atEnd()) { + const QByteArray line = file.readLine(); + if (line.startsWith(pkgRevisionKey)) { + const QList parts = line.split('='); + if (parts.size() == 2 && parts.at(0).trimmed() == QByteArray(pkgRevisionKey)) { + options->ndkVersion = QString::fromLocal8Bit(parts.at(1).trimmed()); + break; + } + } + } + } + + if (options->ndkVersion.isEmpty()) { + fprintf(stderr, "Couldn't retrieve the NDK version from \"%s\".\n", + qPrintable(ndkPropertiesPath)); + return false; + } + } + { const QJsonValue toolchainPrefix = jsonObject.value(QLatin1String("toolchain-prefix")); if (toolchainPrefix.isUndefined()) { @@ -2270,15 +2295,16 @@ static GradleProperties readGradleProperties(const QString &path) static bool mergeGradleProperties(const QString &path, GradleProperties properties) { - QFile::remove(path + QLatin1Char('~')); - QFile::rename(path, path + QLatin1Char('~')); + const QString oldPathStr = path + QLatin1Char('~'); + QFile::remove(oldPathStr); + QFile::rename(path, oldPathStr); QFile file(path); if (!file.open(QIODevice::Truncate | QIODevice::WriteOnly | QIODevice::Text)) { fprintf(stderr, "Can't open file: %s for writing\n", qPrintable(file.fileName())); return false; } - QFile oldFile(path + QLatin1Char('~')); + QFile oldFile(oldPathStr); if (oldFile.open(QIODevice::ReadOnly)) { while (!oldFile.atEnd()) { QByteArray line(oldFile.readLine()); @@ -2294,6 +2320,7 @@ static bool mergeGradleProperties(const QString &path, GradleProperties properti file.write(line); } oldFile.close(); + QFile::remove(oldPathStr); } for (GradleProperties::const_iterator it = properties.begin(); it != properties.end(); ++it) @@ -2328,9 +2355,8 @@ bool buildAndroidProject(const Options &options) { GradleProperties localProperties; localProperties["sdk.dir"] = QDir::fromNativeSeparators(options.sdkPath).toUtf8(); - localProperties["ndk.dir"] = QDir::fromNativeSeparators(options.ndkPath).toUtf8(); - - if (!mergeGradleProperties(options.outputDirectory + QLatin1String("local.properties"), localProperties)) + const QString localPropertiesPath = options.outputDirectory + QLatin1String("local.properties"); + if (!mergeGradleProperties(localPropertiesPath, localProperties)) return false; QString gradlePropertiesPath = options.outputDirectory + QLatin1String("gradle.properties"); @@ -2341,6 +2367,7 @@ bool buildAndroidProject(const Options &options) gradleProperties["androidCompileSdkVersion"] = options.androidPlatform.split(QLatin1Char('-')).last().toLocal8Bit(); gradleProperties["qtMinSdkVersion"] = options.minSdkVersion; gradleProperties["qtTargetSdkVersion"] = options.targetSdkVersion; + gradleProperties["androidNdkVersion"] = options.ndkVersion.toUtf8(); if (gradleProperties["androidBuildToolsVersion"].isEmpty()) gradleProperties["androidBuildToolsVersion"] = options.sdkBuildToolsVersion.toLocal8Bit(); diff --git a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp index 768594ef..1d7fa1f7 100644 --- a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp +++ b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp @@ -61,7 +61,7 @@ static const char docTypeHeader[] = #define PROGRAMNAME "qdbuscpp2xml" #define PROGRAMVERSION "0.2" -#define PROGRAMCOPYRIGHT "Copyright (C) 2020 The Qt Company Ltd." +#define PROGRAMCOPYRIGHT "Copyright (C) 2022 The Qt Company Ltd." static QString outputFile; static int flags; diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp index 9825596f..f2d60610 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp @@ -46,7 +46,7 @@ #define PROGRAMNAME "qdbusxml2cpp" #define PROGRAMVERSION "0.8" -#define PROGRAMCOPYRIGHT "Copyright (C) 2020 The Qt Company Ltd." +#define PROGRAMCOPYRIGHT "Copyright (C) 2022 The Qt Company Ltd." #define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply" diff --git a/src/widgets/accessible/itemviews.cpp b/src/widgets/accessible/itemviews.cpp index a7b536ae..e485744d 100644 --- a/src/widgets/accessible/itemviews.cpp +++ b/src/widgets/accessible/itemviews.cpp @@ -425,6 +425,15 @@ QAccessibleInterface *QAccessibleTable::childAt(int x, int y) const return nullptr; } +QAccessibleInterface *QAccessibleTable::focusChild() const +{ + QModelIndex index = view()->currentIndex(); + if (!index.isValid()) + return nullptr; + + return child(logicalIndex(index)); +} + int QAccessibleTable::childCount() const { if (!view()->model()) @@ -692,6 +701,20 @@ QAccessibleInterface *QAccessibleTree::childAt(int x, int y) const return child(i); } +QAccessibleInterface *QAccessibleTree::focusChild() const +{ + QModelIndex index = view()->currentIndex(); + if (!index.isValid()) + return nullptr; + + const QTreeView *treeView = qobject_cast(view()); + int row = treeView->d_func()->viewIndex(index) + (horizontalHeader() ? 1 : 0); + int column = index.column(); + + int i = row * view()->model()->columnCount() + column; + return child(i); +} + int QAccessibleTree::childCount() const { const QTreeView *treeView = qobject_cast(view()); diff --git a/src/widgets/accessible/itemviews_p.h b/src/widgets/accessible/itemviews_p.h index 683ae9c9..1fc6a3e5 100644 --- a/src/widgets/accessible/itemviews_p.h +++ b/src/widgets/accessible/itemviews_p.h @@ -79,6 +79,7 @@ public: QRect rect() const override; QAccessibleInterface *childAt(int x, int y) const override; + QAccessibleInterface *focusChild() const override; int childCount() const override; int indexOfChild(const QAccessibleInterface *) const override; @@ -154,6 +155,7 @@ public: QAccessibleInterface *childAt(int x, int y) const override; + QAccessibleInterface *focusChild() const override; int childCount() const override; QAccessibleInterface *child(int index) const override; diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 3152a8dd..711effef 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -161,9 +161,10 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) By default, a platform-native file dialog will be used if the platform has one. In that case, the widgets which would otherwise be used to construct the dialog will not be instantiated, so related accessors such as layout() and - itemDelegate() will return null. You can set the \l DontUseNativeDialog option to - ensure that the widget-based implementation will be used instead of the - native dialog. + itemDelegate() will return null. Also, not all platforms show file dialogs + with a title bar, so be aware that the caption text might not be visible to + the user. You can set the \l DontUseNativeDialog option to ensure that the + widget-based implementation will be used instead of the native dialog. \sa QDir, QFileInfo, QFile, QColorDialog, QFontDialog, {Standard Dialogs Example}, {Application Example} @@ -1256,8 +1257,9 @@ QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList &files QFileInfo info(name); // if the filename has no suffix, add the default suffix const QString defaultSuffix = options->defaultSuffix(); - if (!defaultSuffix.isEmpty() && !info.isDir() && name.lastIndexOf(QLatin1Char('.')) == -1) + if (!defaultSuffix.isEmpty() && !info.isDir() && !info.fileName().contains(u'.')) name += QLatin1Char('.') + defaultSuffix; + if (info.isAbsolute()) { files.append(name); } else { @@ -1283,8 +1285,12 @@ QList QFileDialogPrivate::addDefaultSuffixToUrls(const QList &urlsTo QUrl url = urlsToFix.at(i); // if the filename has no suffix, add the default suffix const QString defaultSuffix = options->defaultSuffix(); - if (!defaultSuffix.isEmpty() && !url.path().endsWith(QLatin1Char('/')) && url.path().lastIndexOf(QLatin1Char('.')) == -1) - url.setPath(url.path() + QLatin1Char('.') + defaultSuffix); + if (!defaultSuffix.isEmpty()) { + const QString urlPath = url.path(); + const auto idx = urlPath.lastIndexOf(u'/'); + if (idx != (urlPath.size() - 1) && !QStringView{urlPath}.mid(idx + 1).contains(u'.')) + url.setPath(urlPath + u'.' + defaultSuffix); + } urls.append(url); } return urls; @@ -2183,7 +2189,8 @@ QString QFileDialog::labelText(DialogLabel label) const then a default caption will be used. On Windows, and \macos, this static function will use the - native file dialog and not a QFileDialog. + native file dialog and not a QFileDialog. Note that the \macos native file + dialog does not show a title bar. On Windows the dialog will spin a blocking modal event loop that will not dispatch any QTimers, and if \a parent is not \nullptr then it will position @@ -2294,7 +2301,8 @@ QUrl QFileDialog::getOpenFileUrl(QWidget *parent, then a default caption will be used. On Windows, and \macos, this static function will use the - native file dialog and not a QFileDialog. + native file dialog and not a QFileDialog. Note that the \macos native file + dialog does not show a title bar. On Windows the dialog will spin a blocking modal event loop that will not dispatch any QTimers, and if \a parent is not \nullptr then it will position @@ -2461,7 +2469,7 @@ void QFileDialog::getOpenFileContent(const QString &nameFilter, const std::funct auto dialogClosed = [=](int code) { Q_UNUSED(code); - delete dialog; + dialog->deleteLater(); }; connect(dialog, &QFileDialog::fileSelected, fileSelected); @@ -2506,7 +2514,7 @@ void QFileDialog::saveFileContent(const QByteArray &fileContent, const QString & auto dialogClosed = [=](int code) { Q_UNUSED(code); - delete dialog; + dialog->deleteLater(); }; connect(dialog, &QFileDialog::fileSelected, fileSelected); @@ -2659,6 +2667,8 @@ QUrl QFileDialog::getSaveFileUrl(QWidget *parent, to pass \l{QFileDialog::}{DontUseNativeDialog} to display files using a QFileDialog. + Note that the \macos native file dialog does not show a title bar. + On Unix/X11, the normal behavior of the file dialog is to resolve and follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp}, the file dialog will change to \c{/var/tmp} after entering \c{/usr/tmp}. If diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp index be6b4a23..8aaab722 100644 --- a/src/widgets/dialogs/qmessagebox.cpp +++ b/src/widgets/dialogs/qmessagebox.cpp @@ -1894,7 +1894,7 @@ void QMessageBox::aboutQt(QWidget *parent, const QString &title) "

Qt and the Qt logo are trademarks of The Qt Company Ltd.

" "

Qt is The Qt Company Ltd product developed as an open source " "project. See %3 for more information.

" - ).arg(QStringLiteral("2020"), + ).arg(QStringLiteral("2022"), QStringLiteral("qt.io/licensing"), QStringLiteral("qt.io")); QMessageBox *msgBox = new QMessageBox(parent); diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp index 00c5d5d4..d1639de2 100644 --- a/src/widgets/dialogs/qwizard.cpp +++ b/src/widgets/dialogs/qwizard.cpp @@ -256,11 +256,11 @@ public: bool extension = false; bool sideWidget = false; - bool operator==(const QWizardLayoutInfo &other); - inline bool operator!=(const QWizardLayoutInfo &other) { return !operator==(other); } + bool operator==(const QWizardLayoutInfo &other) const; + inline bool operator!=(const QWizardLayoutInfo &other) const { return !operator==(other); } }; -bool QWizardLayoutInfo::operator==(const QWizardLayoutInfo &other) +bool QWizardLayoutInfo::operator==(const QWizardLayoutInfo &other) const { return topLevelMarginLeft == other.topLevelMarginLeft && topLevelMarginRight == other.topLevelMarginRight diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc index a82462a4..d0673f20 100644 --- a/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc +++ b/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc @@ -35,7 +35,7 @@ The widgets examples show how some of the widgets available in Qt might appear when configured to use the a particular style. Each style is only - available on the respective platfom, and provides native look and feel by + available on the respective platform, and provides native look and feel by integrating to the platform theme. Thus, the final appearance varies depending on the active theme. diff --git a/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc b/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc index 8dc68117..c4b77f42 100644 --- a/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc +++ b/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc @@ -1033,7 +1033,7 @@ The slider can be styled using the \l{#handle-sub}{::handle} subcontrol. Setting the \l{#min-width-prop}{min-width} or \l{#min-height-prop}{min-height} - provides size contraints for the slider depending on the orientation. + provides size constraints for the slider depending on the orientation. The \l{add-line-sub}{::add-line} subcontrol can be used to style the button to add a line. By default, the add-line subcontrol is placed in @@ -1950,7 +1950,7 @@ The only widget currently supporting this property is QPushButton. - \note It's the application's responsibilty to assign an icon to a + \note It's the application's responsibility to assign an icon to a button (using the QAbstractButton API), and not the style's. So be careful setting it unless your stylesheet is targeting a specific application. diff --git a/src/widgets/effects/qgraphicseffect.cpp b/src/widgets/effects/qgraphicseffect.cpp index 2eb74ce2..235991b1 100644 --- a/src/widgets/effects/qgraphicseffect.cpp +++ b/src/widgets/effects/qgraphicseffect.cpp @@ -86,7 +86,7 @@ any other existing effects) and reimplement the virtual function draw(). This function is called whenever the effect needs to redraw. The draw() function takes the painter with which to draw as an argument. For more - information, refer to the documenation for draw(). In the draw() function + information, refer to the documentation for draw(). In the draw() function you can call sourcePixmap() to get a pixmap of the graphics effect source which you can then process. @@ -750,7 +750,7 @@ void QGraphicsColorizeEffect::draw(QPainter *painter) at the potential cost of lower performance. \value AnimationHint Indicates that the blur radius is going to be animated, hinting - that the implementation can keep a cache of blurred verisons of the source. + that the implementation can keep a cache of blurred versions of the source. Do not use this hint if the source is going to be dynamically changing. \sa blurHints(), setBlurHints() diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp b/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp index af0ee3d3..7cc23339 100644 --- a/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp +++ b/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp @@ -2078,7 +2078,7 @@ QList getVariables(const QList &constraints) In a nutshell it should do: 1) Refresh anchor nominal sizes, that is, the size that each anchor would - have if no other restrictions applied. This is done by quering the + have if no other restrictions applied. This is done by querying the layout style and the sizeHints of the items belonging to the layout. 2) Simplify the graph by grouping together parallel and sequential anchors diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index 944bd95c..b26b9c2f 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -244,7 +244,7 @@ \li keyPressEvent() and keyReleaseEvent() handle key press and release events \li mousePressEvent(), mouseMoveEvent(), mouseReleaseEvent(), and mouseDoubleClickEvent() handles mouse press, move, release, click and - doubleclick events + double-click events \endlist You can filter events for any other item by installing event filters. This @@ -2738,7 +2738,7 @@ void QGraphicsItemPrivate::setEnabledHelper(bool newEnabled, bool explicitly, bo If you disable a parent item, all its children will also be disabled. If you enable a parent item, all children will be enabled, unless they have been explicitly disabled (i.e., if you call setEnabled(false) on a child, - it will not be reenabled if its parent is disabled, and then enabled + it will not be re-enabled if its parent is disabled, and then enabled again). Items are enabled by default. @@ -3031,7 +3031,7 @@ QRectF QGraphicsItemPrivate::effectiveBoundingRect(const QRectF &rect) const Returns the effective bounding rect of the item. If the item has no effect, this is the same as the item's bounding rect. If the item has an effect, the effective rect can be larger than the item's - bouding rect, depending on the effect. + bounding rect, depending on the effect. \sa boundingRect() */ @@ -4357,7 +4357,8 @@ QMatrix QGraphicsItem::sceneMatrix() const \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 4 Unlike transform(), which returns only an item's local transformation, this - function includes the item's (and any parents') position, and all the transfomation properties. + function includes the item's (and any parents') position, and all the + transformation properties. \sa transform(), setTransform(), scenePos(), {The Graphics View Coordinate System}, {Transformations} */ @@ -4610,7 +4611,7 @@ QT_WARNING_POP To simplify interaction with items using a transformed view, QGraphicsItem provides mapTo... and mapFrom... functions that can translate between items' and the scene's coordinates. For example, you can call mapToScene() - to map an item coordiate to a scene coordinate, or mapFromScene() to map + to map an item coordinate to a scene coordinate, or mapFromScene() to map from scene coordinates to item coordinates. The transformation matrix is combined with the item's rotation(), scale() @@ -5167,7 +5168,7 @@ bool QGraphicsItem::contains(const QPointF &point) const The default implementation is based on shape intersection, and it calls shape() on both items. Because the complexity of arbitrary shape-shape intersection grows with an order of magnitude when the shapes are complex, - this operation can be noticably time consuming. You have the option of + this operation can be noticeably time-consuming. You have the option of reimplementing this function in a subclass of QGraphicsItem to provide a custom algorithm. This allows you to make use of natural constraints in the shapes of your own items, in order to improve the performance of the @@ -7231,7 +7232,7 @@ void QGraphicsItem::keyReleaseEvent(QKeyEvent *event) If you do reimplement this function, \a event will by default be accepted (see QEvent::accept()), and this item is then the mouse grabber. This allows the item to receive future move, release and - doubleclick events. If you call QEvent::ignore() on \a event, this + double-click events. If you call QEvent::ignore() on \a event, this item will lose the mouse grab, and \a event will propagate to any topmost item beneath. No further mouse events will be delivered to this item unless a new mouse press event is received. @@ -7452,11 +7453,11 @@ void QGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) /*! This event handler, for event \a event, can be reimplemented to - receive mouse doubleclick events for this item. + receive mouse double-click events for this item. When doubleclicking an item, the item will first receive a mouse press event, followed by a release event (i.e., a click), then a - doubleclick event, and finally a release event. + double-click event, and finally a release event. Calling QEvent::ignore() or QEvent::accept() on \a event has no effect. @@ -8127,7 +8128,7 @@ void QGraphicsItemPrivate::resetHeight() /*! \fn QGraphicsObject::rotationChanged() - This signal gets emitted whenever the roation of the item changes. + This signal gets emitted whenever the rotation of the item changes. */ /*! @@ -8166,7 +8167,7 @@ void QGraphicsItemPrivate::resetHeight() /*! \fn void QGraphicsObject::enabledChanged() - This signal gets emitted whenever the item get's enabled or disabled. + This signal gets emitted whenever the item gets enabled or disabled. \sa isEnabled() */ @@ -8194,7 +8195,7 @@ void QGraphicsItemPrivate::resetHeight() \property QGraphicsObject::transformOriginPoint \brief the transformation origin - This property sets a specific point in the items coordiante system as the + This property sets a specific point in the item's coordinate system as the origin for scale and rotation. \sa scale, rotation, QGraphicsItem::transformOriginPoint() @@ -10601,16 +10602,17 @@ QWidgetTextControl *QGraphicsTextItemPrivate::textControl() const control = new QWidgetTextControl(that); control->setTextInteractionFlags(Qt::NoTextInteraction); - QObject::connect(control, SIGNAL(updateRequest(QRectF)), - qq, SLOT(_q_update(QRectF))); - QObject::connect(control, SIGNAL(documentSizeChanged(QSizeF)), - qq, SLOT(_q_updateBoundingRect(QSizeF))); - QObject::connect(control, SIGNAL(visibilityRequest(QRectF)), - qq, SLOT(_q_ensureVisible(QRectF))); - QObject::connect(control, SIGNAL(linkActivated(QString)), - qq, SIGNAL(linkActivated(QString))); - QObject::connect(control, SIGNAL(linkHovered(QString)), - qq, SIGNAL(linkHovered(QString))); + auto dd = that->dd; + QObject::connect(control, &QWidgetTextControl::updateRequest, qq, + [dd](const QRectF &rect) { dd->_q_update(rect); }); + QObject::connect(control, &QWidgetTextControl::documentSizeChanged, qq, + [dd](QSizeF size) { dd->_q_updateBoundingRect(size); }); + QObject::connect(control, &QWidgetTextControl::visibilityRequest, qq, + [dd](const QRectF &rect) { dd->_q_ensureVisible(rect); }); + QObject::connect(control, &QWidgetTextControl::linkActivated, qq, + &QGraphicsTextItem::linkActivated); + QObject::connect(control, &QWidgetTextControl::linkHovered, qq, + &QGraphicsTextItem::linkHovered); const QSizeF pgSize = control->document()->pageSize(); if (pgSize.height() != -1) { diff --git a/src/widgets/graphicsview/qgraphicsitem.h b/src/widgets/graphicsview/qgraphicsitem.h index d66a4917..428b2697 100644 --- a/src/widgets/graphicsview/qgraphicsitem.h +++ b/src/widgets/graphicsview/qgraphicsitem.h @@ -964,9 +964,6 @@ protected: private: Q_DISABLE_COPY(QGraphicsTextItem) - Q_PRIVATE_SLOT(dd, void _q_updateBoundingRect(const QSizeF &)) - Q_PRIVATE_SLOT(dd, void _q_update(QRectF)) - Q_PRIVATE_SLOT(dd, void _q_ensureVisible(QRectF)) QGraphicsTextItemPrivate *dd; friend class QGraphicsTextItemPrivate; }; diff --git a/src/widgets/graphicsview/qgraphicslayout.cpp b/src/widgets/graphicsview/qgraphicslayout.cpp index 8b52b575..f7987cdd 100644 --- a/src/widgets/graphicsview/qgraphicslayout.cpp +++ b/src/widgets/graphicsview/qgraphicslayout.cpp @@ -146,7 +146,7 @@ QT_BEGIN_NAMESPACE */ /*! - Contructs a QGraphicsLayout object. + Constructs a QGraphicsLayout object. \a parent is passed to QGraphicsLayoutItem's constructor and the QGraphicsLayoutItem's isLayout argument is set to \e true. diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp index a428329a..0db33855 100644 --- a/src/widgets/graphicsview/qgraphicsscene.cpp +++ b/src/widgets/graphicsview/qgraphicsscene.cpp @@ -1852,7 +1852,7 @@ void QGraphicsScene::render(QPainter *painter, const QRectF &target, const QRect item discovery functions like items() and itemAt(). Indexing is most efficient for static scenes (i.e., where items don't move around). For dynamic scenes, or scenes with many animated items, the index bookkeeping - can outweight the fast lookup speeds. + can outweigh the fast lookup speeds. For the common case, the default index method BspTreeIndex works fine. If your scene uses many animations and you are experiencing slowness, you can @@ -2480,7 +2480,7 @@ void QGraphicsScene::destroyItemGroup(QGraphicsItemGroup *group) } /*! - Adds or moves the \a item and all its childen to this scene. + Adds or moves the \a item and all its children to this scene. This scene takes ownership of the \a item. If the item is visible (i.e., QGraphicsItem::isVisible() returns @@ -4142,15 +4142,15 @@ void QGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) /*! This event handler, for event \a mouseEvent, can be reimplemented - in a subclass to receive mouse doubleclick events for the scene. + in a subclass to receive mouse double-click events for the scene. If someone doubleclicks on the scene, the scene will first receive a mouse press event, followed by a release event (i.e., a click), - then a doubleclick event, and finally a release event. If the - doubleclick event is delivered to a different item than the one + then a double-click event, and finally a release event. If the + double-click event is delivered to a different item than the one that received the first press and release, it will be delivered as a press event. However, tripleclick events are not delivered as - doubleclick events in this case. + double-click events in this case. The default implementation is similar to mousePressEvent(). diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index 90bddf6e..e1ff2c93 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -107,7 +107,7 @@ static const int QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS = 503; // largest prime < the events and reacts to them. For example, if you click on a selectable item, the item will typically let the scene know that it has been selected, and it will also redraw itself to display a selection - rectangle. Similiary, if you click and drag the mouse to move a movable + rectangle. Similarly, if you click and drag the mouse to move a movable item, it's the item that handles the mouse moves and moves itself. Item interaction is enabled by default, and you can toggle it by calling setInteractive(). @@ -3773,7 +3773,12 @@ void QGraphicsView::drawBackground(QPainter *painter, const QRectF &rect) return; } + const bool wasAa = painter->testRenderHint(QPainter::Antialiasing); + if (wasAa) + painter->setRenderHints(QPainter::Antialiasing, false); painter->fillRect(rect, d->backgroundBrush); + if (wasAa) + painter->setRenderHints(QPainter::Antialiasing, true); } /*! @@ -3877,7 +3882,7 @@ bool QGraphicsView::isTransformed() const otherwise, \a matrix \e replaces the current matrix. \a combine is false by default. - The transformation matrix tranforms the scene into view coordinates. Using + The transformation matrix transforms the scene into view coordinates. Using the default transformation, provided by the identity matrix, one pixel in the view represents one unit in the scene (e.g., a 10x10 rectangular item is drawn using 10x10 pixels in the view). If a 2x2 scaling matrix is @@ -3891,7 +3896,7 @@ bool QGraphicsView::isTransformed() const To simplify interation with items using a transformed view, QGraphicsView provides mapTo... and mapFrom... functions that can translate between scene and view coordinates. For example, you can call mapToScene() to map - a view coordiate to a floating point scene coordinate, or mapFromScene() + a view coordinate to a floating point scene coordinate, or mapFromScene() to map from floating point scene coordinates to view coordinates. \sa transform(), rotate(), scale(), shear(), translate() diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 5e65c597..deb49ca2 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -1169,12 +1169,21 @@ QModelIndex QAbstractItemView::rootIndex() const void QAbstractItemView::selectAll() { Q_D(QAbstractItemView); - SelectionMode mode = d->selectionMode; - if (mode == MultiSelection || mode == ExtendedSelection) + const SelectionMode mode = d->selectionMode; + switch (mode) { + case MultiSelection: + case ExtendedSelection: d->selectAll(QItemSelectionModel::ClearAndSelect - |d->selectionBehaviorFlags()); - else if (mode != SingleSelection) - d->selectAll(selectionCommand(d->model->index(0, 0, d->root))); + | d->selectionBehaviorFlags()); + break; + case NoSelection: + case ContiguousSelection: + if (d->model->hasChildren(d->root)) + d->selectAll(selectionCommand(d->model->index(0, 0, d->root))); + break; + case SingleSelection: + break; + } } /*! @@ -3408,15 +3417,39 @@ void QAbstractItemView::rowsAboutToBeRemoved(const QModelIndex &parent, int star } else { int row = end + 1; QModelIndex next; - do { // find the next visible and enabled item + const int rowCount = d->model->rowCount(parent); + bool found = false; + // find the next visible and enabled item + while (row < rowCount && !found) { next = d->model->index(row++, current.column(), current.parent()); - } while (next.isValid() && (isIndexHidden(next) || !d->isIndexEnabled(next))); - if (row > d->model->rowCount(parent)) { - row = start - 1; - do { // find the previous visible and enabled item - next = d->model->index(row--, current.column(), current.parent()); - } while (next.isValid() && (isIndexHidden(next) || !d->isIndexEnabled(next))); +#ifdef QT_DEBUG + if (!next.isValid()) { + qWarning("Model unexpectedly returned an invalid index"); + break; + } +#endif + if (!isIndexHidden(next) && d->isIndexEnabled(next)) { + found = true; + break; + } } + + if (!found) { + row = start - 1; + // find the previous visible and enabled item + while (row >= 0) { + next = d->model->index(row--, current.column(), current.parent()); +#ifdef QT_DEBUG + if (!next.isValid()) { + qWarning("Model unexpectedly returned an invalid index"); + break; + } +#endif + if (!isIndexHidden(next) && d->isIndexEnabled(next)) + break; + } + } + setCurrentIndex(next); } } @@ -3494,9 +3527,19 @@ void QAbstractItemViewPrivate::_q_columnsAboutToBeRemoved(const QModelIndex &par } else { int column = end; QModelIndex next; - do { // find the next visible and enabled item + const int columnCount = model->columnCount(current.parent()); + // find the next visible and enabled item + while (column < columnCount) { next = model->index(current.row(), column++, current.parent()); - } while (next.isValid() && (q->isIndexHidden(next) || !isIndexEnabled(next))); +#ifdef QT_DEBUG + if (!next.isValid()) { + qWarning("Model unexpectedly returned an invalid index"); + break; + } +#endif + if (!q->isIndexHidden(next) && isIndexEnabled(next)) + break; + } q->setCurrentIndex(next); } } @@ -4305,7 +4348,7 @@ void QAbstractItemViewPrivate::updateEditorData(const QModelIndex &tl, const QMo In DND if something has been moved then this is called. Typically this means you should "remove" the selected item or row, - but the behavior is view dependant (table just clears the selected indexes for example). + but the behavior is view-dependent (table just clears the selected indexes for example). Either remove the selected rows or clear them */ @@ -4498,6 +4541,8 @@ void QAbstractItemViewPrivate::selectAll(QItemSelectionModel::SelectionFlags com { if (!selectionModel) return; + if (!model->hasChildren(root)) + return; QItemSelection selection; QModelIndex tl = model->index(0, 0, root); diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index 2b344766..5a88f1b1 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -1541,12 +1541,14 @@ void QListView::doItemsLayout() setState(ExpandingState); if (d->model->columnCount(d->root) > 0) { // no columns means no contents d->resetBatchStartRow(); - if (layoutMode() == SinglePass) + if (layoutMode() == SinglePass) { d->doItemsLayout(d->model->rowCount(d->root)); // layout everything - else if (!d->batchLayoutTimer.isActive()) { + } else if (!d->batchLayoutTimer.isActive()) { if (!d->doItemsLayout(d->batchSize)) // layout is done d->batchLayoutTimer.start(0, this); // do a new batch as fast as possible } + } else { // clear the QBspTree generated by the last layout + d->clear(); } QAbstractItemView::doItemsLayout(); setState(oldState); // restoring the oldState diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp index 934ac581..d120c41d 100644 --- a/src/widgets/itemviews/qtableview.cpp +++ b/src/widgets/itemviews/qtableview.cpp @@ -1101,6 +1101,8 @@ int QTableViewPrivate::heightHintForIndex(const QModelIndex &index, int hint, QS table can be found by using rowHeight(); similarly, the width of columns can be found using columnWidth(). Since both of these are plain widgets, you can hide either of them using their hide() functions. + Each header is configured with its \l{QHeaderView::}{highlightSections} + and \l{QHeaderView::}{sectionsClickable} properties set to \c true. Rows and columns can be hidden and shown with hideRow(), hideColumn(), showRow(), and showColumn(). They can be selected with selectRow() diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index 94756049..713cb8e0 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -2695,7 +2695,7 @@ QTreeWidget::~QTreeWidget() } /* - Retuns the number of header columns in the view. + Returns the number of header columns in the view. \sa sortColumn(), currentColumn(), topLevelItemCount() */ diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 619f2e73..1a0ac0cc 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -2653,7 +2653,7 @@ bool QApplicationPrivate::sendMouseEvent(QWidget *receiver, QMouseEvent *event, This function should only be called when the widget changes visibility, i.e. when the \a widget is shown, hidden or deleted. This function does nothing if the widget is a top-level or native, i.e. not an alien widget. In that - case enter/leave events are genereated by the underlying windowing system. + case enter/leave events are generated by the underlying windowing system. */ extern QPointer qt_last_mouse_receiver; extern Q_WIDGETS_EXPORT QWidget *qt_button_down; @@ -3845,7 +3845,7 @@ bool QApplication::keypadNavigationEnabled() \since 4.3 Causes an alert to be shown for \a widget if the window is not the active - window. The alert is shown for \a msec miliseconds. If \a msec is zero (the + window. The alert is shown for \a msec milliseconds. If \a msec is zero (the default), then the alert is shown indefinitely until the window becomes active again. diff --git a/src/widgets/kernel/qboxlayout.cpp b/src/widgets/kernel/qboxlayout.cpp index c1052c5b..711510a6 100644 --- a/src/widgets/kernel/qboxlayout.cpp +++ b/src/widgets/kernel/qboxlayout.cpp @@ -1242,7 +1242,7 @@ QBoxLayout::Direction QBoxLayout::direction() const layout. \c window will be the parent of the widgets that are added to the layout. - If you don't pass parent \c window in the constrcutor, you can + If you don't pass a parent \c window to the constructor, you can at a later point use QWidget::setLayout() to install the QHBoxLayout object onto \c window. At that point, the widgets in the layout are reparented to have \c window as their parent. @@ -1315,7 +1315,7 @@ QHBoxLayout::~QHBoxLayout() layout. \c window will be the parent of the widgets that are added to the layout. - If you don't pass parent \c window in the constrcutor, you can + If you don't pass a parent \c window to the constructor, you can at a later point use QWidget::setLayout() to install the QVBoxLayout object onto \c window. At that point, the widgets in the layout are reparented to have \c window as their parent. diff --git a/src/widgets/kernel/qgesture.cpp b/src/widgets/kernel/qgesture.cpp index 84dbed70..bde54847 100644 --- a/src/widgets/kernel/qgesture.cpp +++ b/src/widgets/kernel/qgesture.cpp @@ -1033,7 +1033,7 @@ void QGestureEvent::accept(Qt::GestureType gestureType) of calling \l{QGestureEvent::setAccepted()}{setAccepted(gesture, false)}. Clearing the accept flag indicates that the event receiver does not - want the gesture. Unwanted gestures may be propgated to the parent widget. + want the gesture. Unwanted gestures may be propagated to the parent widget. \sa QGestureEvent::accept() */ diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 9eba1e00..e9452002 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -2305,7 +2305,7 @@ void QWidgetPrivate::deactivateWidgetCleanup() /*! - Returns a pointer to the widget with window identifer/handle \a + Returns a pointer to the widget with window identifier/handle \a id. The window identifier type depends on the underlying window @@ -5296,7 +5296,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP QWidgetEffectSourcePrivate *sourced = static_cast (source->d_func()); if (!sourced->context) { - const QRegion effectRgn(rgn.boundingRect()); + const QRegion effectRgn((flags & UseEffectRegionBounds) ? rgn.boundingRect() : rgn); QWidgetPaintContext context(pdev, effectRgn, offset, flags, sharedPainter, repaintManager); sourced->context = &context; if (!sharedPainter) { @@ -5328,6 +5328,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP } } #endif // QT_CONFIG(graphicseffect) + flags = flags & ~UseEffectRegionBounds; const bool alsoOnScreen = flags & DrawPaintOnScreen; const bool recursive = flags & DrawRecursive; @@ -12877,4 +12878,4 @@ QDebug operator<<(QDebug debug, const QWidget *widget) QT_END_NAMESPACE #include "moc_qwidget.cpp" - +#include "moc_qwidget_p.cpp" diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h index eef6b8fa..c432f4b5 100644 --- a/src/widgets/kernel/qwidget_p.h +++ b/src/widgets/kernel/qwidget_p.h @@ -229,7 +229,8 @@ public: DontSubtractOpaqueChildren = 0x10, DontDrawOpaqueChildren = 0x20, DontDrawNativeChildren = 0x40, - DontSetCompositionMode = 0x80 + DontSetCompositionMode = 0x80, + UseEffectRegionBounds = 0x100 }; Q_DECLARE_FLAGS(DrawWidgetFlags, DrawWidgetFlag) Q_FLAG(DrawWidgetFlags) diff --git a/src/widgets/kernel/qwidgetrepaintmanager.cpp b/src/widgets/kernel/qwidgetrepaintmanager.cpp index 02880b34..6e72aae5 100644 --- a/src/widgets/kernel/qwidgetrepaintmanager.cpp +++ b/src/widgets/kernel/qwidgetrepaintmanager.cpp @@ -1018,7 +1018,8 @@ void QWidgetRepaintManager::paintAndFlush() // Paint the rest with composition. if (repaintAllWidgets || !dirtyCopy.isEmpty()) { - QWidgetPrivate::DrawWidgetFlags flags = QWidgetPrivate::DrawAsRoot | QWidgetPrivate::DrawRecursive; + QWidgetPrivate::DrawWidgetFlags flags = QWidgetPrivate::DrawAsRoot | QWidgetPrivate::DrawRecursive + | QWidgetPrivate::UseEffectRegionBounds; tlw->d_func()->drawWidget(store->paintDevice(), dirtyCopy, QPoint(), flags, nullptr, this); } @@ -1409,3 +1410,4 @@ void QWidgetPrivate::invalidateBackingStore_resizeHelper(const QPoint &oldPos, c QT_END_NAMESPACE #include "qwidgetrepaintmanager.moc" +#include "moc_qwidgetrepaintmanager_p.cpp" diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index 685d2ccc..4165232c 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -634,7 +634,8 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) receiver = qt_button_down; else if(popupChild) receiver = popupChild; - QContextMenuEvent e(QContextMenuEvent::Mouse, mapped, event->globalPos(), event->modifiers()); + const QPoint localPos = receiver->mapFromGlobal(event->globalPos()); + QContextMenuEvent e(QContextMenuEvent::Mouse, localPos, event->globalPos(), event->modifiers()); QApplication::forwardEvent(receiver, &e, event); } #else diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index f4345d97..a225d4b5 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -2040,22 +2040,24 @@ void QFusionStyle::drawComplexControl(ComplexControl control, const QStyleOption cachePainter.setPen(d->topShadow()); cachePainter.drawLine(QPoint(r.left() + 2, r.top() + 1), QPoint(r.right() - 2, r.top() + 1)); - // Draw button gradient - QColor buttonColor = d->buttonColor(option->palette); - QRect updownRect = upRect.adjusted(0, -2, 0, downRect.height() + 2); - QLinearGradient gradient = qt_fusion_gradient(updownRect, (isEnabled && option->state & State_MouseOver ) ? buttonColor : buttonColor.darker(104)); + if (!upRect.isNull()) { + // Draw button gradient + const QColor buttonColor = d->buttonColor(option->palette); + const QRect updownRect = upRect.adjusted(0, -2, 0, downRect.height() + 2); + const QLinearGradient gradient = qt_fusion_gradient(updownRect, (isEnabled && option->state & State_MouseOver ) + ? buttonColor : buttonColor.darker(104)); - // Draw button gradient - cachePainter.setPen(Qt::NoPen); - cachePainter.setBrush(gradient); + cachePainter.setPen(Qt::NoPen); + cachePainter.setBrush(gradient); - cachePainter.save(); - cachePainter.setClipRect(updownRect); - cachePainter.drawRoundedRect(r.adjusted(0, 0, -1, -1), 2, 2); - cachePainter.setPen(QPen(d->innerContrastLine())); - cachePainter.setBrush(Qt::NoBrush); - cachePainter.drawRoundedRect(r.adjusted(1, 1, -2, -2), 2, 2); - cachePainter.restore(); + cachePainter.save(); + cachePainter.setClipRect(updownRect); + cachePainter.drawRoundedRect(r.adjusted(0, 0, -1, -1), 2, 2); + cachePainter.setPen(QPen(d->innerContrastLine())); + cachePainter.setBrush(Qt::NoBrush); + cachePainter.drawRoundedRect(r.adjusted(1, 1, -2, -2), 2, 2); + cachePainter.restore(); + } if ((spinBox->stepEnabled & QAbstractSpinBox::StepUpEnabled) && upIsActive) { if (sunken) @@ -2083,12 +2085,14 @@ void QFusionStyle::drawComplexControl(ComplexControl control, const QStyleOption cachePainter.restore(); } - // outline the up/down buttons - cachePainter.setPen(outline); - if (spinBox->direction == Qt::RightToLeft) { - cachePainter.drawLine(upRect.right(), upRect.top() - 1, upRect.right(), downRect.bottom() + 1); - } else { - cachePainter.drawLine(upRect.left(), upRect.top() - 1, upRect.left(), downRect.bottom() + 1); + if (spinBox->buttonSymbols != QAbstractSpinBox::NoButtons) { + // buttonSymbols == NoButtons results in 'null' rects + // and a tiny rect painted in the corner. + cachePainter.setPen(outline); + if (spinBox->direction == Qt::RightToLeft) + cachePainter.drawLine(upRect.right(), upRect.top() - 1, upRect.right(), downRect.bottom() + 1); + else + cachePainter.drawLine(upRect.left(), upRect.top() - 1, upRect.left(), downRect.bottom() + 1); } if (upIsActive && sunken) { diff --git a/src/widgets/styles/qpixmapstyle.cpp b/src/widgets/styles/qpixmapstyle.cpp index 7cc32b20..3ee68242 100644 --- a/src/widgets/styles/qpixmapstyle.cpp +++ b/src/widgets/styles/qpixmapstyle.cpp @@ -1230,3 +1230,5 @@ QSize QPixmapStylePrivate::computeSize(const QPixmapStyleDescriptor &desc, int w } QT_END_NAMESPACE + +#include "moc_qpixmapstyle_p.cpp" diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp index 0d71762c..669f158b 100644 --- a/src/widgets/styles/qstyle.cpp +++ b/src/widgets/styles/qstyle.cpp @@ -91,7 +91,7 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C look of the different platforms supported by Qt (QWindowsStyle, QMacStyle, etc.). These styles are built into the Qt GUI module, other styles can be made available using Qt's - plugin mechansim. + plugin mechanism. Most functions for drawing style elements take four arguments: @@ -697,7 +697,7 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value PE_IndicatorToolBarSeparator The separator in a toolbar. \value PE_PanelToolBar The panel for a toolbar. \value PE_PanelTipLabel The panel for a tip label. - \value PE_FrameTabBarBase The frame that is drawn for a tab bar, ususally drawn for a tab bar that isn't part of a tab widget. + \value PE_FrameTabBarBase The frame that is drawn for a tab bar, usually drawn for a tab bar that isn't part of a tab widget. \value PE_IndicatorTabTear Deprecated. Use \l{PE_IndicatorTabTearLeft} instead. \value PE_IndicatorTabTearLeft An indicator that a tab is partially scrolled out on the left side of the visible tab bar when there are many tabs. \value PE_IndicatorTabTearRight An indicator that a tab is partially scrolled out on the right side of the visible tab bar when there are many tabs. @@ -1796,7 +1796,7 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, cause a list view expansion to be selected. \value SH_TabBar_PreferNoArrows Whether a tab bar should suggest a size - to prevent scoll arrows. + to prevent scroll arrows. \value SH_ComboBox_Popup Allows popups as a combobox drop-down menu. diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index 95232dd9..7459a8d4 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -3481,7 +3481,7 @@ QStyleOptionTabWidgetFrame::QStyleOptionTabWidgetFrame(int version) /*! Construct a QStyleOptionTabBarBase, initializing the members - vaiables to their default values. + variables to their default values. */ QStyleOptionTabBarBase::QStyleOptionTabBarBase() : QStyleOption(Version, SO_TabBarBase), shape(QTabBar::RoundedNorth), diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index 9fcb8ba5..55d95c7f 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -2441,11 +2441,12 @@ static QWidget *embeddedWidget(QWidget *w) } /** \internal - in case w is an embedded widget, return the container widget - (i.e, the widget for which the rules actualy apply) - (exemple, if w is a lineedit embedded in a combobox, return the combobox) + Returns the widget whose style rules apply to \a w. + + When \a w is an embedded widget, this is the container widget. + For example, if w is a line edit embedded in a combobox, this returns the combobox. + When \a w is not embedded, this function return \a w itself. - if w is not embedded, return w itself */ static QWidget *containerWidget(const QWidget *w) { @@ -2649,6 +2650,9 @@ void QStyleSheetStyle::setProperties(QWidget *w) default: v = decl.d->values.at(0).variant; break; } + if (propertyL1 == "styleSheet" && value == v) + continue; + w->setProperty(propertyL1, v); } } diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp index 18b24063..ef7207a8 100644 --- a/src/widgets/util/qcompleter.cpp +++ b/src/widgets/util/qcompleter.cpp @@ -1120,6 +1120,8 @@ void QCompleter::setModel(QAbstractItemModel *model) { Q_D(QCompleter); QAbstractItemModel *oldModel = d->proxy->sourceModel(); + if (oldModel == model) + return; #if QT_CONFIG(filesystemmodel) if (qobject_cast(oldModel)) setCompletionRole(Qt::EditRole); // QTBUG-54642, clear FileNameRole set by QFileSystemModel diff --git a/src/widgets/util/qscrollerproperties.cpp b/src/widgets/util/qscrollerproperties.cpp index be763f18..4c87448a 100644 --- a/src/widgets/util/qscrollerproperties.cpp +++ b/src/widgets/util/qscrollerproperties.cpp @@ -347,13 +347,13 @@ void QScrollerProperties::setScrollMetric(ScrollMetric metric, const QVariant &v \value AcceleratingFlickSpeedupFactor The current speed is multiplied by this number if an accelerating flick is detected. Should be \c{>= 1}. - \value SnapPositionRatio This is the distance that the user must drag the area beween two snap + \value SnapPositionRatio This is the distance that the user must drag the area between two snap points in order to snap it to the next position. \c{0.33} means that the scroll must only reach one third of the distance between two snap points to snap to the next one. The ratio must be between \c 0 and \c 1. \value SnapTime This is the time factor for the scrolling curve. A lower value means that the - scrolling will take longer. The scrolling distance is independet of this value. + scrolling will take longer. The scrolling distance is independent of this value. \value OvershootDragResistanceFactor This value is the factor between the mouse dragging and the actual scroll area movement (during overshoot). The factor must be between \c 0 and \c 1. diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp index ee521399..dccea98a 100644 --- a/src/widgets/util/qsystemtrayicon.cpp +++ b/src/widgets/util/qsystemtrayicon.cpp @@ -190,7 +190,7 @@ QSystemTrayIcon::~QSystemTrayIcon() The menu will pop up when the user requests the context menu for the system tray icon by clicking the mouse button. - On \macos, this is currenly converted to a NSMenu, so the + On \macos, this is currently converted to a NSMenu, so the aboutToHide() signal is not emitted. \note The system tray icon does not take ownership of the menu. You must diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp index 04cd3fd1..ee43165e 100644 --- a/src/widgets/widgets/qabstractscrollarea.cpp +++ b/src/widgets/widgets/qabstractscrollarea.cpp @@ -202,7 +202,7 @@ void QAbstractScrollAreaScrollBarContainer::addWidget(QWidget *widget, LogicalPo } /*! \internal - Retuns a list of scroll bar widgets for the given position. The scroll bar + Returns a list of scroll-bar widgets for the given position. The scroll bar itself is not returned. */ QWidgetList QAbstractScrollAreaScrollBarContainer::widgets(LogicalPosition position) diff --git a/src/widgets/widgets/qabstractslider.cpp b/src/widgets/widgets/qabstractslider.cpp index a0611565..5ba50b67 100644 --- a/src/widgets/widgets/qabstractslider.cpp +++ b/src/widgets/widgets/qabstractslider.cpp @@ -107,7 +107,7 @@ QT_BEGIN_NAMESPACE \row \li \l sliderReleased() \li the user releases the slider. \row \li \l actionTriggered() - \li a slider action was triggerd. + \li a slider action was triggered. \row \li \l rangeChanged() \li a the range has changed. \endtable diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp index bb64edd8..caa3cbfd 100644 --- a/src/widgets/widgets/qcalendarwidget.cpp +++ b/src/widgets/widgets/qcalendarwidget.cpp @@ -2952,7 +2952,7 @@ void QCalendarWidget::setDateEditEnabled(bool enable) \since 4.3 If the calendar widget's \l{dateEditEnabled}{date edit is enabled}, this - property specifies the amount of time (in millseconds) that the date edit + property specifies the amount of time (in milliseconds) that the date edit remains open after the most recent user input. Once this time has elapsed, the date specified in the date edit is accepted and the popup is closed. diff --git a/src/widgets/widgets/qdial.cpp b/src/widgets/widgets/qdial.cpp index 25d57970..8f774a3c 100644 --- a/src/widgets/widgets/qdial.cpp +++ b/src/widgets/widgets/qdial.cpp @@ -222,7 +222,7 @@ int QDialPrivate::valueFromPoint(const QPoint &p) const If you are using the mouse wheel to adjust the dial, the increment value is determined by the lesser value of - \l{QApplication::wheelScrollLines()} {wheelScrollLines} multipled + \l{QApplication::wheelScrollLines()} {wheelScrollLines} multiplied by \l {QAbstractSlider::singleStep} {singleStep}, and \l {QAbstractSlider::pageStep} {pageStep}. diff --git a/src/widgets/widgets/qdialogbuttonbox.cpp b/src/widgets/widgets/qdialogbuttonbox.cpp index 28c4f59d..9631d3cb 100644 --- a/src/widgets/widgets/qdialogbuttonbox.cpp +++ b/src/widgets/widgets/qdialogbuttonbox.cpp @@ -903,7 +903,7 @@ void QDialogButtonBoxPrivate::_q_handleButtonDestroyed() \property QDialogButtonBox::centerButtons \brief whether the buttons in the button box are centered - By default, this property is \c false. This behavior is appopriate + By default, this property is \c false. This behavior is appropriate for most types of dialogs. A notable exception is message boxes on most platforms (e.g. Windows), where the button box is centered horizontally. diff --git a/src/widgets/widgets/qlabel.cpp b/src/widgets/widgets/qlabel.cpp index 30ff80cb..cf2605c1 100644 --- a/src/widgets/widgets/qlabel.cpp +++ b/src/widgets/widgets/qlabel.cpp @@ -421,9 +421,6 @@ void QLabel::setPixmap(const QPixmap &pixmap) d->pixmap = new QPixmap(pixmap); } - if (d->pixmap->depth() == 1 && !d->pixmap->mask()) - d->pixmap->setMask(*((QBitmap *)d->pixmap)); - d->updateLabel(); } diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 11367879..3df42c48 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -1987,21 +1987,28 @@ void QLineEdit::paintEvent(QPaintEvent *) p.setClipRect(r); QFontMetrics fm = fontMetrics(); + int fmHeight = 0; + if (d->shouldShowPlaceholderText()) + fmHeight = fm.boundingRect(d->placeholderText).height(); + else + fmHeight = fm.boundingRect(d->control->text() + d->control->preeditAreaText()).height(); + fmHeight = qMax(fmHeight, fm.height()); + Qt::Alignment va = QStyle::visualAlignment(d->control->layoutDirection(), QFlag(d->alignment)); switch (va & Qt::AlignVertical_Mask) { case Qt::AlignBottom: - d->vscroll = r.y() + r.height() - fm.height() - QLineEditPrivate::verticalMargin; + d->vscroll = r.y() + r.height() - fmHeight - QLineEditPrivate::verticalMargin; break; case Qt::AlignTop: d->vscroll = r.y() + QLineEditPrivate::verticalMargin; break; default: //center - d->vscroll = r.y() + (r.height() - fm.height() + 1) / 2; + d->vscroll = r.y() + (r.height() - fmHeight + 1) / 2; break; } QRect lineRect(r.x() + QLineEditPrivate::horizontalMargin, d->vscroll, - r.width() - 2 * QLineEditPrivate::horizontalMargin, fm.height()); + r.width() - 2 * QLineEditPrivate::horizontalMargin, fmHeight); if (d->shouldShowPlaceholderText()) { if (!d->placeholderText.isEmpty()) { diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index 6b50f5e8..6310efc9 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -954,10 +954,10 @@ void QMainWindow::setDockNestingEnabled(bool enabled) \since 4.2 If this property is set to false, dock areas containing tabbed dock widgets - display horizontal tabs, simmilar to Visual Studio. + display horizontal tabs, similar to Visual Studio. If this property is set to true, then the right and left dock areas display vertical - tabs, simmilar to KDevelop. + tabs, similar to KDevelop. This property should be set before any dock widgets are added to the main window. */ @@ -1223,7 +1223,7 @@ Qt::DockWidgetArea QMainWindow::dockWidgetArea(QDockWidget *dockwidget) const resized such that the yellowWidget is twice as big as the blueWidget If some widgets are grouped in tabs, only one widget per group should be - specified. Widgets not in the list might be changed to repect the constraints. + specified. Widgets not in the list might be changed to respect the constraints. */ void QMainWindow::resizeDocks(const QList &docks, const QList &sizes, Qt::Orientation orientation) diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp index d1571263..b90b5cdb 100644 --- a/src/widgets/widgets/qmainwindowlayout.cpp +++ b/src/widgets/widgets/qmainwindowlayout.cpp @@ -2663,8 +2663,18 @@ void QMainWindowLayout::hover(QLayoutItem *widgetItem, const QPoint &mousePos) if (QDockWidget *dw = qobject_cast(widget)) allowed = dw->isAreaAllowed(toDockWidgetArea(path.at(1))); - if (qobject_cast(widget)) - allowed = true; + // Read permissions from a DockWidgetGroupWindow depending on its DockWidget children + if (QDockWidgetGroupWindow* dwgw = qobject_cast(widget)) { + const QList children = dwgw->findChildren(QString(), Qt::FindDirectChildrenOnly); + + if (children.count() == 1) { + // Group window has a single child => read its permissions + allowed = children.at(0)->isAreaAllowed(toDockWidgetArea(path.at(1))); + } else { + // Group window has more than one or no children => dock it anywhere + allowed = true; + } + } #endif #if QT_CONFIG(toolbar) if (QToolBar *tb = qobject_cast(widget)) diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index a23d8b79..284c83b8 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -1651,7 +1651,7 @@ void QMenu::initStyleOption(QStyleOptionMenuItem *option, const QAction *action) and all other items are considered action items. When inserting action items you usually specify a receiver and a - slot. The receiver will be notifed whenever the item is + slot. The receiver will be notified whenever the item is \l{QAction::triggered()}{triggered()}. In addition, QMenu provides two signals, triggered() and hovered(), which signal the QAction that was triggered from the menu. @@ -2221,7 +2221,7 @@ void QMenu::setActiveAction(QAction *act) { Q_D(QMenu); d->setCurrentAction(act, 0); - if (d->scroll) + if (d->scroll && act) d->scrollMenu(act, QMenuPrivate::QMenuScroller::ScrollCenter); } diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index 8724fa1a..12b38ac1 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -583,7 +583,7 @@ void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *acti \inmodule QtWidgets A menu bar consists of a list of pull-down menu items. You add - menu items with addMenu(). For example, asuming that \c menubar + menu items with addMenu(). For example, assuming that \c menubar is a pointer to a QMenuBar and \c fileMenu is a pointer to a QMenu, the following statement inserts the menu into the menu bar: \snippet code/src_gui_widgets_qmenubar.cpp 0 diff --git a/src/widgets/widgets/qscrollbar.cpp b/src/widgets/widgets/qscrollbar.cpp index 568cf3b2..dd7f1ab9 100644 --- a/src/widgets/widgets/qscrollbar.cpp +++ b/src/widgets/widgets/qscrollbar.cpp @@ -175,7 +175,7 @@ QT_BEGIN_NAMESPACE \li Up/Down move a vertical scroll bar by one single step. \li PageUp moves up one page. \li PageDown moves down one page. - \li Home moves to the start (mininum). + \li Home moves to the start (minimum). \li End moves to the end (maximum). \endlist diff --git a/src/widgets/widgets/qslider.cpp b/src/widgets/widgets/qslider.cpp index 161e4ba2..7458d073 100644 --- a/src/widgets/widgets/qslider.cpp +++ b/src/widgets/widgets/qslider.cpp @@ -250,7 +250,7 @@ QStyle::SubControl QSliderPrivate::newHoverControl(const QPoint &pos) \li Up/Down move a vertical slider by one single step. \li PageUp moves up one page. \li PageDown moves down one page. - \li Home moves to the start (mininum). + \li Home moves to the start (minimum). \li End moves to the end (maximum). \endlist diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index ee7445f5..9a382e96 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -2404,7 +2404,7 @@ void QTabBar::timerEvent(QTimerEvent *event) This property controls how items are elided when there is not enough space to show them for a given tab bar size. - By default the value is style dependent. + By default the value is style-dependent. \sa QTabWidget::elideMode, usesScrollButtons, QStyle::SH_TabBar_ElideMode */ @@ -2433,7 +2433,7 @@ void QTabBar::setElideMode(Qt::TextElideMode mode) When there are too many tabs in a tab bar for its size, the tab bar can either choose to expand its size or to add buttons that allow you to scroll through the tabs. - By default the value is style dependant. + By default the value is style-dependent. \sa elideMode, QTabWidget::usesScrollButtons, QStyle::SH_TabBar_PreferNoArrows */ diff --git a/src/widgets/widgets/qtabwidget.cpp b/src/widgets/widgets/qtabwidget.cpp index a19dacda..5553c9a1 100644 --- a/src/widgets/widgets/qtabwidget.cpp +++ b/src/widgets/widgets/qtabwidget.cpp @@ -1348,7 +1348,7 @@ void QTabWidget::setIconSize(const QSize &size) This property controls how items are elided when there is not enough space to show them for a given tab bar size. - By default the value is style dependant. + By default the value is style dependent. \sa QTabBar::elideMode, usesScrollButtons, QStyle::SH_TabBar_ElideMode */ @@ -1371,7 +1371,7 @@ void QTabWidget::setElideMode(Qt::TextElideMode mode) When there are too many tabs in a tab bar for its size, the tab bar can either choose to expand its size or to add buttons that allow you to scroll through the tabs. - By default the value is style dependant. + By default the value is style dependent. \sa elideMode, QTabBar::usesScrollButtons, QStyle::SH_TabBar_PreferNoArrows */ diff --git a/src/widgets/widgets/qtextbrowser.cpp b/src/widgets/widgets/qtextbrowser.cpp index 78fde94f..122a8529 100644 --- a/src/widgets/widgets/qtextbrowser.cpp +++ b/src/widgets/widgets/qtextbrowser.cpp @@ -916,7 +916,7 @@ void QTextBrowser::doSetSource(const QUrl &url, QTextDocument::ResourceType type being the new source. Source changes happen both programmatically when calling - setSource(), forward(), backword() or home() or when the user + setSource(), forward(), backward() or home() or when the user clicks on links or presses the equivalent key sequences. */ diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp index 087657ab..66db5cca 100644 --- a/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -1662,6 +1662,7 @@ void QWidgetLineControl::processKeyEvent(QKeyEvent* event) break; #endif if (!m_completer->currentCompletion().isEmpty() && hasSelectedText() + && !m_completer->completionPrefix().isEmpty() && textAfterSelection().isEmpty()) { setText(m_completer->currentCompletion()); inlineCompletionAccepted = true; diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp index 6a5a77dd..ba9b6e05 100644 --- a/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/src/widgets/widgets/qwidgettextcontrol.cpp @@ -455,15 +455,20 @@ void QWidgetTextControlPrivate::setContent(Qt::TextFormat format, const QString // #### doc->documentLayout()->setPaintDevice(viewport); - QObject::connect(doc, SIGNAL(contentsChanged()), q, SLOT(_q_updateCurrentCharFormatAndSelection())); - QObject::connect(doc, SIGNAL(cursorPositionChanged(QTextCursor)), q, SLOT(_q_emitCursorPosChanged(QTextCursor))); - QObject::connect(doc, SIGNAL(documentLayoutChanged()), q, SLOT(_q_documentLayoutChanged())); + QObjectPrivate::connect(doc, &QTextDocument::contentsChanged, this, + &QWidgetTextControlPrivate::_q_updateCurrentCharFormatAndSelection); + QObjectPrivate::connect(doc, &QTextDocument::cursorPositionChanged, this, + &QWidgetTextControlPrivate::_q_emitCursorPosChanged); + QObjectPrivate::connect(doc, &QTextDocument::documentLayoutChanged, this, + &QWidgetTextControlPrivate::_q_documentLayoutChanged); // convenience signal forwards - QObject::connect(doc, SIGNAL(undoAvailable(bool)), q, SIGNAL(undoAvailable(bool))); - QObject::connect(doc, SIGNAL(redoAvailable(bool)), q, SIGNAL(redoAvailable(bool))); - QObject::connect(doc, SIGNAL(modificationChanged(bool)), q, SIGNAL(modificationChanged(bool))); - QObject::connect(doc, SIGNAL(blockCountChanged(int)), q, SIGNAL(blockCountChanged(int))); + QObject::connect(doc, &QTextDocument::undoAvailable, q, &QWidgetTextControl::undoAvailable); + QObject::connect(doc, &QTextDocument::redoAvailable, q, &QWidgetTextControl::redoAvailable); + QObject::connect(doc, &QTextDocument::modificationChanged, q, + &QWidgetTextControl::modificationChanged); + QObject::connect(doc, &QTextDocument::blockCountChanged, q, + &QWidgetTextControl::blockCountChanged); } bool previousUndoRedoState = doc->isUndoRedoEnabled(); @@ -525,7 +530,8 @@ void QWidgetTextControlPrivate::setContent(Qt::TextFormat format, const QString q->ensureCursorVisible(); emit q->cursorPositionChanged(); - QObject::connect(doc, SIGNAL(contentsChange(int,int,int)), q, SLOT(_q_contentsChanged(int,int,int)), Qt::UniqueConnection); + QObjectPrivate::connect(doc, &QTextDocument::contentsChange, this, + &QWidgetTextControlPrivate::_q_contentsChanged, Qt::UniqueConnection); } void QWidgetTextControlPrivate::startDrag() @@ -705,10 +711,12 @@ void QWidgetTextControlPrivate::_q_documentLayoutChanged() { Q_Q(QWidgetTextControl); QAbstractTextDocumentLayout *layout = doc->documentLayout(); - QObject::connect(layout, SIGNAL(update(QRectF)), q, SIGNAL(updateRequest(QRectF))); - QObject::connect(layout, SIGNAL(updateBlock(QTextBlock)), q, SLOT(_q_updateBlock(QTextBlock))); - QObject::connect(layout, SIGNAL(documentSizeChanged(QSizeF)), q, SIGNAL(documentSizeChanged(QSizeF))); - + QObject::connect(layout, &QAbstractTextDocumentLayout::update, q, + &QWidgetTextControl::updateRequest); + QObjectPrivate::connect(layout, &QAbstractTextDocumentLayout::updateBlock, this, + &QWidgetTextControlPrivate::_q_updateBlock); + QObject::connect(layout, &QAbstractTextDocumentLayout::documentSizeChanged, q, + &QWidgetTextControl::documentSizeChanged); } void QWidgetTextControlPrivate::setCursorVisible(bool visible) @@ -939,6 +947,8 @@ void QWidgetTextControl::setTextCursor(const QTextCursor &cursor, bool selection #ifndef QT_NO_CLIPBOARD if (selectionClipboard) d->setClipboardSelection(); +#else + Q_UNUSED(selectionClipboard); #endif } diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h index 71dc988b..3f756e7d 100644 --- a/src/widgets/widgets/qwidgettextcontrol_p.h +++ b/src/widgets/widgets/qwidgettextcontrol_p.h @@ -277,13 +277,8 @@ protected: private: Q_DISABLE_COPY_MOVE(QWidgetTextControl) - Q_PRIVATE_SLOT(d_func(), void _q_updateCurrentCharFormatAndSelection()) - Q_PRIVATE_SLOT(d_func(), void _q_emitCursorPosChanged(const QTextCursor &)) Q_PRIVATE_SLOT(d_func(), void _q_deleteSelected()) Q_PRIVATE_SLOT(d_func(), void _q_copyLink()) - Q_PRIVATE_SLOT(d_func(), void _q_updateBlock(const QTextBlock &)) - Q_PRIVATE_SLOT(d_func(), void _q_documentLayoutChanged()) - Q_PRIVATE_SLOT(d_func(), void _q_contentsChanged(int, int, int)) }; diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp index ba37374f..104ed1b4 100644 --- a/src/xml/dom/qdom.cpp +++ b/src/xml/dom/qdom.cpp @@ -4491,7 +4491,7 @@ QString QDomElement::attributeNS(const QString nsURI, const QString& localName, Adds an attribute with the qualified name \a qName and the namespace URI \a nsURI with the value \a value. If an attribute with the same local name and namespace URI exists, its prefix is - replaced by the prefix of \a qName and its value is repaced by \a + replaced by the prefix of \a qName and its value is replaced by \a value. Although \a qName is the qualified name, the local name is used to @@ -4714,7 +4714,7 @@ void QDomTextPrivate::save(QTextStream& s, int, int) const \ingroup xml-tools You can split the text in a QDomText object over two QDomText - objecs with splitText(). + objects with splitText(). For further information about the Document Object Model see \l{http://www.w3.org/TR/REC-DOM-Level-1/}{Level 1} and diff --git a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp index a4eb2936..7bba0b71 100644 --- a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp +++ b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp @@ -30,6 +30,8 @@ #include #include +#include + using namespace QtConcurrent; class tst_QtConcurrentRun: public QObject @@ -50,6 +52,8 @@ private slots: #endif void functor(); void lambda(); + void nullThreadPool(); + void nullThreadPoolNoLeak(); }; void light() @@ -732,5 +736,38 @@ void tst_QtConcurrentRun::lambda() } } +// QTBUG-98901 +void tst_QtConcurrentRun::nullThreadPool() +{ + QThreadPool *pool = nullptr; + std::atomic isInvoked(false); + auto future = run(pool, [&] { isInvoked = true; }); + future.waitForFinished(); + QVERIFY(future.isCanceled()); + QVERIFY(!isInvoked); +} + +struct LifetimeChecker +{ + LifetimeChecker() { ++count; } + LifetimeChecker(const LifetimeChecker &) { ++count; } + ~LifetimeChecker() { --count; } + + void operator()() { } + + static std::atomic count; +}; +std::atomic LifetimeChecker::count{ 0 }; + +void tst_QtConcurrentRun::nullThreadPoolNoLeak() +{ + { + QThreadPool *pool = nullptr; + auto future = run(pool, LifetimeChecker()); + future.waitForFinished(); + } + QCOMPARE(LifetimeChecker::count, 0); +} + QTEST_MAIN(tst_QtConcurrentRun) #include "tst_qtconcurrentrun.moc" diff --git a/tests/auto/corelib/animation/qanimationgroup/tst_qanimationgroup.cpp b/tests/auto/corelib/animation/qanimationgroup/tst_qanimationgroup.cpp index 2b7de509..d72370d1 100644 --- a/tests/auto/corelib/animation/qanimationgroup/tst_qanimationgroup.cpp +++ b/tests/auto/corelib/animation/qanimationgroup/tst_qanimationgroup.cpp @@ -286,7 +286,8 @@ void tst_QAnimationGroup::setParentAutoAdd() void tst_QAnimationGroup::beginNestedGroup() { - QAnimationGroup *parent = new QParallelAnimationGroup(); + QParallelAnimationGroup group; + QAnimationGroup *parent = &group; for (int i = 0; i < 10; ++i) { if (i & 1) { @@ -343,7 +344,8 @@ void tst_QAnimationGroup::addChildTwice() void tst_QAnimationGroup::loopWithoutStartValue() { - QAnimationGroup *parent = new QSequentialAnimationGroup(); + QSequentialAnimationGroup group; + QAnimationGroup *parent = &group; QObject o; o.setProperty("ole", 0); QCOMPARE(o.property("ole").toInt(), 0); diff --git a/tests/auto/corelib/animation/qpropertyanimation/tst_qpropertyanimation.cpp b/tests/auto/corelib/animation/qpropertyanimation/tst_qpropertyanimation.cpp index 41a051a7..b3f72e3b 100644 --- a/tests/auto/corelib/animation/qpropertyanimation/tst_qpropertyanimation.cpp +++ b/tests/auto/corelib/animation/qpropertyanimation/tst_qpropertyanimation.cpp @@ -286,16 +286,16 @@ void tst_QPropertyAnimation::statesAndSignals_data() void tst_QPropertyAnimation::statesAndSignals() { QFETCH(bool, uncontrolled); - QPropertyAnimation *anim; + std::unique_ptr anim; if (uncontrolled) - anim = new UncontrolledAnimation; + anim.reset(new UncontrolledAnimation); else - anim = new DummyPropertyAnimation; + anim.reset(new DummyPropertyAnimation); anim->setDuration(100); - QSignalSpy finishedSpy(anim, &QPropertyAnimation::finished); - QSignalSpy runningSpy(anim, &QPropertyAnimation::stateChanged); - QSignalSpy currentLoopSpy(anim, &QPropertyAnimation::currentLoopChanged); + QSignalSpy finishedSpy(anim.get(), &QPropertyAnimation::finished); + QSignalSpy runningSpy(anim.get(), &QPropertyAnimation::stateChanged); + QSignalSpy currentLoopSpy(anim.get(), &QPropertyAnimation::currentLoopChanged); QVERIFY(finishedSpy.isValid()); QVERIFY(runningSpy.isValid()); @@ -366,8 +366,6 @@ void tst_QPropertyAnimation::statesAndSignals() QCOMPARE(runningSpy.count(), 1); // anim has stopped QCOMPARE(finishedSpy.count(), 2); QCOMPARE(anim->currentLoopTime(), 100); - - delete anim; } } @@ -416,9 +414,10 @@ void tst_QPropertyAnimation::deletion1() void tst_QPropertyAnimation::deletion2() { TestAnimationDriver timeDriver; - //test that the animation get deleted if the object is deleted + // test that the animation does not get deleted if the object is deleted QObject *object = new QWidget; QPointer anim = new QPropertyAnimation(object,"minimumWidth"); + QVERIFY(anim->parent() != object); anim->setStartValue(10); anim->setEndValue(20); anim->setDuration(200); @@ -445,14 +444,18 @@ void tst_QPropertyAnimation::deletion2() QTimer::singleShot(0, object, SLOT(deleteLater())); timeDriver.wait(50); + QVERIFY(anim); QVERIFY(!anim->targetObject()); + + delete anim; } void tst_QPropertyAnimation::deletion3() { //test that the stopped signal is emit when the animation is destroyed TestAnimationDriver timeDriver; - QObject *object = new QWidget; + QWidget w; + QObject *object = &w; QPropertyAnimation *anim = new QPropertyAnimation(object,"minimumWidth"); anim->setStartValue(10); anim->setEndValue(20); @@ -1327,8 +1330,8 @@ void tst_QPropertyAnimation::totalDuration() void tst_QPropertyAnimation::zeroLoopCount() { - DummyPropertyAnimation* anim; - anim = new DummyPropertyAnimation; + DummyPropertyAnimation animation; + auto *anim = &animation; anim->setStartValue(0); anim->setDuration(20); anim->setLoopCount(0); diff --git a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp index 62a83218..f975b730 100644 --- a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp +++ b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp @@ -2099,6 +2099,15 @@ void tst_QTextCodec::toLocal8Bit() #if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else + // Add the executable's directory to path so that we can find the test helper next to it + // in a cross-platform way. We must do this because the CWD is not pointing to this directory + // in debug-and-release builds. + QByteArray path = qgetenv("PATH"); + qputenv("PATH", + path + QDir::listSeparator().toLatin1() + + QCoreApplication::applicationDirPath().toLocal8Bit()); + auto restore = qScopeGuard([&] { qputenv("PATH", path); }); + QProcess process; process.start("echo_helper"); QString string(QChar(0x410)); diff --git a/tests/auto/corelib/global/qflags/tst_qflags.cpp b/tests/auto/corelib/global/qflags/tst_qflags.cpp index c679fbd8..fdbd95c6 100644 --- a/tests/auto/corelib/global/qflags/tst_qflags.cpp +++ b/tests/auto/corelib/global/qflags/tst_qflags.cpp @@ -31,6 +31,8 @@ class tst_QFlags: public QObject { Q_OBJECT private slots: + void boolCasts() const; + void operators() const; void testFlag() const; void testFlagZeroFlag() const; void testFlagMultiBits() const; @@ -42,6 +44,73 @@ private slots: void adl(); }; +void tst_QFlags::boolCasts() const +{ + // This tests that the operator overloading is sufficient so that common + // idioms involving flags -> bool casts work as expected: + + const Qt::Alignment nonNull = Qt::AlignCenter; + const Qt::Alignment null = {}; + + // basic premiss: + QVERIFY(bool(nonNull)); + QVERIFY(!bool(null)); + + // The rest is just checking that stuff compiles: + + // QVERIFY should compile: + QVERIFY(nonNull); + QVERIFY(!null); + + // ifs should compile: + if (null) QFAIL("Can't contextually convert QFlags to bool!"); + if (!nonNull) QFAIL("Missing operator! on QFlags (shouldn't be necessary)."); + + // ternary should compile: + QVERIFY(nonNull ? true : false); + QVERIFY(!null ? true : false); + + // logical operators should compile: + QVERIFY(nonNull && true); + QVERIFY(nonNull || false); + QVERIFY(!null && true); + QVERIFY(!null || false); + + // ... in both directions: + QVERIFY(true && nonNull); + QVERIFY(false || nonNull); + QVERIFY(true && !null); + QVERIFY(false || !null); + + // ... and mixed: + QVERIFY(null || nonNull); + QVERIFY(!(null && nonNull)); +} + +void tst_QFlags::operators() const +{ +#define CHECK(op, LHS, RHS, RES) \ + do { \ + using LFlags = QFlags; \ + using RFlags = QFlags; \ + QCOMPARE((LHS op RHS), (RES)); \ + QCOMPARE((LFlags(LHS) op RHS), (RES)); \ + QCOMPARE((LHS op RFlags(RHS)), (RES)); \ + QCOMPARE((LFlags(LHS) op RFlags(RHS)), (RES)); \ + QCOMPARE((LFlags(LHS) op ## = RHS), (RES)); \ + QCOMPARE((LFlags(LHS) op ## = RFlags(RHS)), (RES)); \ + } while (false) + + CHECK(|, Qt::AlignHCenter, Qt::AlignVCenter, Qt::AlignCenter); + CHECK(|, Qt::AlignHCenter, Qt::AlignHCenter, Qt::AlignHCenter); + CHECK(&, Qt::AlignHCenter, Qt::AlignVCenter, Qt::Alignment()); + CHECK(&, Qt::AlignHCenter, Qt::AlignHCenter, Qt::AlignHCenter); + CHECK(^, Qt::AlignHCenter, Qt::AlignVCenter, Qt::AlignCenter); + CHECK(^, Qt::AlignHCenter, Qt::AlignHCenter, Qt::Alignment()); + +#undef CHECK +} + void tst_QFlags::testFlag() const { Qt::MouseButtons btn = Qt::LeftButton | Qt::RightButton; diff --git a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp index 3af637d1..0f27901f 100644 --- a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp +++ b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp @@ -34,6 +34,8 @@ #endif #include +#include + class tst_qmessagehandler : public QObject { Q_OBJECT @@ -819,7 +821,17 @@ void tst_qmessagehandler::qMessagePattern() QFETCH(QList, expected); QProcess process; -#ifndef Q_OS_ANDROID + + // Add the executable's directory to path so that we can find the test helper next to it + // in a cross-platform way. We must do this because the CWD is not pointing to this directory + // in debug-and-release builds. + QByteArray path = qgetenv("PATH"); + qputenv("PATH", + path + QDir::listSeparator().toLatin1() + + QCoreApplication::applicationDirPath().toLocal8Bit()); + auto restore = qScopeGuard([&] { qputenv("PATH", path); }); + +#if !defined(Q_OS_ANDROID) const QString appExe(QLatin1String("helper")); #else const QString appExe(QCoreApplication::applicationDirPath() + QLatin1String("/libhelper.so")); @@ -869,8 +881,12 @@ void tst_qmessagehandler::setMessagePattern() // QProcess process; -#ifndef Q_OS_ANDROID +#ifdef Q_OS_WIN + // On Windows the CWD is not the same directory as the helper, so we cannot use "./" + // Instead we rely on CreateProcess to find the executable. const QString appExe(QLatin1String("helper")); +#elif !defined(Q_OS_ANDROID) + const QString appExe(QLatin1String("./helper")); #else const QString appExe(QCoreApplication::applicationDirPath() + QLatin1String("/libhelper.so")); #endif diff --git a/tests/auto/corelib/global/qtendian/tst_qtendian.cpp b/tests/auto/corelib/global/qtendian/tst_qtendian.cpp index 2345bb39..b70dcd4a 100644 --- a/tests/auto/corelib/global/qtendian/tst_qtendian.cpp +++ b/tests/auto/corelib/global/qtendian/tst_qtendian.cpp @@ -30,11 +30,17 @@ #include #include #include - +#include class tst_QtEndian: public QObject { Q_OBJECT +public: + enum Signedness { + Unsigned, + Signed + }; + Q_ENUM(Signedness); private slots: void fromBigEndian(); @@ -55,6 +61,9 @@ private slots: void endianIntegers(); void endianBitfields(); + + void endianBitfieldUnions_data(); + void endianBitfieldUnions(); }; struct TestData @@ -383,5 +392,103 @@ void tst_QtEndian::endianBitfields() QCOMPARE(u.bottom, -8); } +template class Union, template class Member> +void testBitfieldUnion() +{ + using upper = Member<21, 11, uint>; + using lower = Member<10, 11, uint>; + using bottom = Member<0, 10, int>; + + using UnionType = Union; + UnionType u; + + u.template set(200); + QCOMPARE(u.template get(), 200U); + u.template set(1000); + u.template set(-8); + QCOMPARE(u.template get(), 1000U); + QCOMPARE(u.template get(), 200U); + + u.template set(u.template get() + u.template get()); + QCOMPARE(u.template get(), 200U); + QCOMPARE(u.template get(), 1200U); + + u.template set(65536 + 7); + u.template set(65535); + QCOMPARE(u.template get(), 65535U & ((1<<11) - 1)); + QCOMPARE(u.template get(), 7U); + + QCOMPARE(u.template get(), -8); + + UnionType u2(QSpecialIntegerBitfieldZero); + QCOMPARE(u2.data(), 0U); + + UnionType u3(42U); + QCOMPARE(u3.data(), 42U); + +// We'd need if constexpr to test this: +// +// using BEUintAccessor = QSpecialIntegerAccessor, 21, 11>; +// using LEUintAccessor = QSpecialIntegerAccessor, 21, 11>; +// using BEIntAccessor = QSpecialIntegerAccessor, 0, 10>; +// using LEIntAccessor = QSpecialIntegerAccessor, 0, 10>; + +// if constexpr (std::is_same::value) { +// QCOMPARE(u.template get(), 7U); +// } else if constexpr (std::is_same::value) { +// QCOMPARE(u.template get(), 7U); +// } else if constexpr (std::is_same::value) { +// QCOMPARE(u.template get(), -8); +// } else if constexpr (std::is_same::value) { +// QCOMPARE(u.template get(), -8); +// } else { +// QFAIL("none of the manually defined accessors match"); +// } +} + +Q_DECLARE_METATYPE(QSysInfo::Endian) +void tst_QtEndian::endianBitfieldUnions_data() +{ + QTest::addColumn("byteOrder"); + QTest::addColumn("signedness"); + + QTest::addRow("little endian unsigned") << QSysInfo::LittleEndian << Unsigned; + QTest::addRow("little endian signed") << QSysInfo::LittleEndian << Signed; + QTest::addRow("big endian unsigned") << QSysInfo::BigEndian << Unsigned; + QTest::addRow("big endian signed") << QSysInfo::BigEndian << Signed; +} + +void tst_QtEndian::endianBitfieldUnions() +{ + QFETCH(QSysInfo::Endian, byteOrder); + QFETCH(Signedness, signedness); + + switch (byteOrder) { + case QSysInfo::LittleEndian: + switch (signedness) { + case Unsigned: + testBitfieldUnion(); + return; + case Signed: + testBitfieldUnion(); + return; + } + Q_UNREACHABLE(); + return; + case QSysInfo::BigEndian: + switch (signedness) { + case Unsigned: + testBitfieldUnion(); + return; + case Signed: + testBitfieldUnion(); + return; + } + Q_UNREACHABLE(); + return; + } +} + + QTEST_MAIN(tst_QtEndian) #include "tst_qtendian.moc" diff --git a/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp b/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp index 49687421..6f37f852 100644 --- a/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp +++ b/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp @@ -42,6 +42,7 @@ private slots: void writeBlock_data(); void writeBlock(); void seek(); + void invalidSeeks(); void seekTest_data(); void seekTest(); void read_rawdata(); @@ -286,6 +287,29 @@ void tst_QBuffer::seek() QCOMPARE(buffer.size(), pos); } +void tst_QBuffer::invalidSeeks() +{ + if (sizeof(qsizetype) == sizeof(qint64)) { + // sizeof(qsizetype) == sizeof(qint64), so +1 would overflow + QSKIP("This is a 32-bit-only test."); + } else { + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + QCOMPARE(buffer.buffer().size(), qsizetype(0)); + QCOMPARE(buffer.pos(), qint64(0)); + constexpr qint64 MaxQByteArrayCapacity = (std::numeric_limits::max)(); + // this should fail fast, not after trying to allocate nearly 2 GiB of data, + // potentially crashing in the process: + QVERIFY(!buffer.seek(2 * MaxQByteArrayCapacity - 1)); + QCOMPARE(buffer.buffer().size(), qsizetype(0)); + QCOMPARE(buffer.pos(), qint64(0)); + // ditto: + QVERIFY(!buffer.seek(MaxQByteArrayCapacity + 1)); + QCOMPARE(buffer.buffer().size(), qsizetype(0)); + QCOMPARE(buffer.pos(), qint64(0)); + } +} + void tst_QBuffer::seekTest_data() { writeBlock_data(); diff --git a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp index 66720d28..011af527 100644 --- a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp +++ b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp @@ -35,43 +35,45 @@ class tst_QDataUrl : public QObject Q_OBJECT private slots: - void nonData(); - void emptyData(); - void alreadyPercentageEncoded(); + void decode_data(); + void decode(); }; -void tst_QDataUrl::nonData() +void tst_QDataUrl::decode_data() { - QLatin1String data("http://test.com"); - QUrl url(data); - QString mimeType; - QByteArray payload; - bool result = qDecodeDataUrl(url, mimeType, payload); - QVERIFY(!result); + QTest::addColumn("input"); + QTest::addColumn("result"); + QTest::addColumn("mimeType"); + QTest::addColumn("payload"); + + auto row = [](const char *tag, const char *url, bool success, QString mimeType = {}, QByteArray payload = {}) { + QTest::newRow(tag) << url << success <size() - offset)); - memcpy(data, buf->constData() + offset, maxSize); + if (maxSize > 0) + memcpy(data, buf->constData() + offset, maxSize); offset += maxSize; return maxSize; } @@ -604,13 +605,15 @@ protected: qint64 readData(char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf.size() - pos())); - memcpy(data, buf.constData() + pos(), maxSize); + if (maxSize > 0) + memcpy(data, buf.constData() + pos(), maxSize); return maxSize; } qint64 writeData(const char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf.size() - pos())); - memcpy(buf.data() + pos(), data, maxSize); + if (maxSize > 0) + memcpy(buf.data() + pos(), data, maxSize); return maxSize; } diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index db60bead..ac3b9982 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2021 The Qt Company Ltd. -** Copyright (C) 2020 Intel Corporation. +** Copyright (C) 2022 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. @@ -150,6 +150,8 @@ private slots: void startStopStartStopBuffers(); void processEventsInAReadyReadSlot_data(); void processEventsInAReadyReadSlot(); + void startFromCurrentWorkingDir_data(); + void startFromCurrentWorkingDir(); // keep these at the end, since they use lots of processes and sometimes // caused obscure failures to occur in tests that followed them (esp. on the Mac) @@ -2731,5 +2733,94 @@ void tst_QProcess::finishProcessBeforeReadingDone_deprecated() #endif +enum class ChdirMode { + None = 0, + InParent, + InChild +}; +Q_DECLARE_METATYPE(ChdirMode) + +void tst_QProcess::startFromCurrentWorkingDir_data() +{ + qRegisterMetaType(); + QTest::addColumn("programPrefix"); + QTest::addColumn("chdirMode"); + QTest::addColumn("success"); + + constexpr bool IsWindows = true +#ifdef Q_OS_UNIX + && false +#endif + ; + + // baseline: trying to execute the directory, this can't possibly succeed! + QTest::newRow("plain-same-cwd") << QString() << ChdirMode::None << false; + + // cross-platform behavior: neither OS searches the setWorkingDirectory() + // dir without "./" + QTest::newRow("plain-child-chdir") << QString() << ChdirMode::InChild << false; + + // cross-platform behavior: both OSes search the parent's CWD with "./" + QTest::newRow("prefixed-parent-chdir") << "./" << ChdirMode::InParent << true; + + // opposite behaviors: Windows searches the parent's CWD and Unix searches + // the child's with "./" + QTest::newRow("prefixed-child-chdir") << "./" << ChdirMode::InChild << !IsWindows; + + // Windows searches the parent's CWD without "./" + QTest::newRow("plain-parent-chdir") << QString() << ChdirMode::InParent << IsWindows; +} + +void tst_QProcess::startFromCurrentWorkingDir() +{ + QFETCH(QString, programPrefix); + QFETCH(ChdirMode, chdirMode); + QFETCH(bool, success); + + QProcess process; + qRegisterMetaType(); + QSignalSpy errorSpy(&process, &QProcess::errorOccurred); + QVERIFY(errorSpy.isValid()); + + // both the dir name and the executable name + const QString target = QStringLiteral("testProcessNormal"); + process.setProgram(programPrefix + target); + +#ifdef Q_OS_UNIX + // Reset PATH, to be sure it doesn't contain . or the empty path. + // We can't do this on Windows because DLLs are searched in PATH + // and Windows always searches "." anyway. + auto restoreEnv = qScopeGuard([old = qgetenv("PATH")] { + qputenv("PATH", old); + }); + qputenv("PATH", "/"); +#endif + + switch (chdirMode) { + case ChdirMode::InParent: { + auto restoreCwd = qScopeGuard([old = QDir::currentPath()] { + QDir::setCurrent(old); + }); + QVERIFY(QDir::setCurrent(target)); + process.start(); + break; + } + case ChdirMode::InChild: + process.setWorkingDirectory(target); + Q_FALLTHROUGH(); + case ChdirMode::None: + process.start(); + break; + } + + QCOMPARE(process.waitForStarted(), success); + QCOMPARE(errorSpy.count(), int(!success)); + if (success) { + QVERIFY(process.waitForFinished()); + } else { + QCOMPARE(process.error(), QProcess::FailedToStart); + } +} + QTEST_MAIN(tst_QProcess) #include "tst_qprocess.moc" diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp index 5687a633..780b6165 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl.cpp +++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp @@ -3497,7 +3497,7 @@ void tst_QUrl::effectiveTLDs_data() << ".app.os.stg.fedoraproject.org"; QTest::newRow("development.run") << QUrl::fromEncoded("http://test.development.run") << ".development.run"; QTest::newRow("crafting.xyz") << QUrl::fromEncoded("http://test.crafting.xyz") << ".crafting.xyz"; - QTest::newRow("nym.ie") << QUrl::fromEncoded("http://shamus.nym.ie") << ".nym.ie"; + QTest::newRow("nym.ie") << QUrl::fromEncoded("http://shamus.nym.ie") << ".ie"; QTest::newRow("vapor.cloud") << QUrl::fromEncoded("http://test.vapor.cloud") << ".vapor.cloud"; QTest::newRow("official.academy") << QUrl::fromEncoded("http://acredited.official.academy") << ".official.academy"; } diff --git a/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp b/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp index d61d45bc..084cd68e 100644 --- a/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp +++ b/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp @@ -145,14 +145,14 @@ QAbstractItemModel *ModelsToTest::createModel(const QString &modelType) if (modelType == "QSortFilterProxyModelEmpty") { QSortFilterProxyModel *model = new QSortFilterProxyModel; - QStandardItemModel *standardItemModel = new QStandardItemModel; + QStandardItemModel *standardItemModel = new QStandardItemModel(model); model->setSourceModel(standardItemModel); return model; } if (modelType == "QSortFilterProxyModelRegExp") { QSortFilterProxyModel *model = new QSortFilterProxyModel; - QStandardItemModel *standardItemModel = new QStandardItemModel; + QStandardItemModel *standardItemModel = new QStandardItemModel(model); model->setSourceModel(standardItemModel); populateTestArea(model); model->setFilterRegularExpression(QRegularExpression("(^$|I.*)")); @@ -161,7 +161,7 @@ QAbstractItemModel *ModelsToTest::createModel(const QString &modelType) if (modelType == "QSortFilterProxyModel") { QSortFilterProxyModel *model = new QSortFilterProxyModel; - QStandardItemModel *standardItemModel = new QStandardItemModel; + QStandardItemModel *standardItemModel = new QStandardItemModel(model); model->setSourceModel(standardItemModel); populateTestArea(model); return model; diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index 19b32893..2e2209ac 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -369,7 +369,7 @@ protected: const char *nm = name.constData(); int tp = qRegisterMetaType(nm); #if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) - pthread_yield(); + sched_yield(); #endif QMetaType info(tp); if (!info.isValid()) { diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 9bd66c08..25da0132 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -3024,6 +3024,16 @@ void tst_QObject::recursiveSignalEmission() QSKIP("No qprocess support", SkipAll); #else QProcess proc; + + // Add the executable's directory to path so that we can find the test helper next to it + // in a cross-platform way. We must do this because the CWD is not pointing to this directory + // in debug-and-release builds. + QByteArray pathEnv = qgetenv("PATH"); + qputenv("PATH", + pathEnv + QDir::listSeparator().toLatin1() + + QCoreApplication::applicationDirPath().toLocal8Bit()); + auto restore = qScopeGuard([&] { qputenv("PATH", pathEnv); }); + // signalbug helper app should always be next to this test binary const QString path = QStringLiteral("signalbug_helper"); proc.start(path); diff --git a/tests/auto/corelib/kernel/qsharedmemory/tst_qsharedmemory.cpp b/tests/auto/corelib/kernel/qsharedmemory/tst_qsharedmemory.cpp index fa2d5e37..6be2744f 100644 --- a/tests/auto/corelib/kernel/qsharedmemory/tst_qsharedmemory.cpp +++ b/tests/auto/corelib/kernel/qsharedmemory/tst_qsharedmemory.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #define EXISTING_SHARE "existing" #define EXISTING_SIZE 1024 @@ -444,8 +445,20 @@ void tst_QSharedMemory::readOnly() QSKIP("No qprocess support", SkipAll); #elif defined(Q_OS_MACOS) QSKIP("QTBUG-59936: Times out on macOS", SkipAll); +#elif defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer) + QSKIP("ASan prevents the crash this test is looking for.", SkipAll); #else rememberKey("readonly_segfault"); + + // Add the executable's directory to path so that we can find the test helper next to it + // in a cross-platform way. We must do this because the CWD is not pointing to this directory + // in debug-and-release builds. + QByteArray path = qgetenv("PATH"); + qputenv("PATH", + path + QDir::listSeparator().toLatin1() + + QCoreApplication::applicationDirPath().toLocal8Bit()); + auto restore = qScopeGuard([&] { qputenv("PATH", path); }); + // ### on windows disable the popup somehow QProcess p; p.start(m_helperBinary, QStringList("readonly_segfault")); @@ -747,6 +760,15 @@ void tst_QSharedMemory::simpleProcessProducerConsumer() rememberKey("market"); + // Add the executable's directory to path so that we can find the test helper next to it + // in a cross-platform way. We must do this because the CWD is not pointing to this directory + // in debug-and-release builds. + QByteArray path = qgetenv("PATH"); + qputenv("PATH", + path + QDir::listSeparator().toLatin1() + + QCoreApplication::applicationDirPath().toLocal8Bit()); + auto restore = qScopeGuard([&] { qputenv("PATH", path); }); + QProcess producer; producer.start(m_helperBinary, QStringList("producer")); QVERIFY2(producer.waitForStarted(), "Could not start helper binary"); diff --git a/tests/auto/corelib/kernel/qsystemsemaphore/tst_qsystemsemaphore.cpp b/tests/auto/corelib/kernel/qsystemsemaphore/tst_qsystemsemaphore.cpp index 5f010ae3..a73d8060 100644 --- a/tests/auto/corelib/kernel/qsystemsemaphore/tst_qsystemsemaphore.cpp +++ b/tests/auto/corelib/kernel/qsystemsemaphore/tst_qsystemsemaphore.cpp @@ -70,7 +70,14 @@ private: }; tst_QSystemSemaphore::tst_QSystemSemaphore() - : m_helperBinary("acquirerelease_helper") + : +#ifdef Q_OS_WIN + // On windows the CWD is not the same as the test binary, so we cannot use the ./ path. + m_helperBinary("acquirerelease_helper") +#else + // But on Unix we *must* + m_helperBinary("./acquirerelease_helper") +#endif { } diff --git a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp index c47b25ea..9f4e1773 100644 --- a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp +++ b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp @@ -401,9 +401,9 @@ void tst_QTranslator::translationInThreadWhileInstallingTranslator() thread.runningCondition.wait(&thread.startupLock); - QTranslator *tor = new QTranslator; - tor->load("hellotr_la"); - QCoreApplication::installTranslator(tor); + QTranslator tor; + tor.load("hellotr_la"); + QCoreApplication::installTranslator(&tor); ++thread.terminate; diff --git a/tests/auto/corelib/serialization/json/json.pro b/tests/auto/corelib/serialization/json/json.pro index 8fa17c5c..390a674f 100644 --- a/tests/auto/corelib/serialization/json/json.pro +++ b/tests/auto/corelib/serialization/json/json.pro @@ -1,6 +1,7 @@ TARGET = tst_json QT = core-private testlib CONFIG += testcase +contains(QT_CONFIG, c++2a):CONFIG *= c++2a !android:TESTDATA += bom.json test.json test.bjson test3.json test2.json else:RESOURCES += json.qrc diff --git a/tests/auto/corelib/serialization/json/tst_qtjson.cpp b/tests/auto/corelib/serialization/json/tst_qtjson.cpp index 3e58dd03..3f242ba2 100644 --- a/tests/auto/corelib/serialization/json/tst_qtjson.cpp +++ b/tests/auto/corelib/serialization/json/tst_qtjson.cpp @@ -68,6 +68,7 @@ private Q_SLOTS: void testObjectNestedEmpty(); void testValueRef(); + void testValueRefComparison(); void testObjectIteration(); void testArrayIteration(); @@ -176,6 +177,8 @@ private Q_SLOTS: void fromToVariantConversions_data(); void fromToVariantConversions(); + void noLeakOnNameClash(); + private: QString testDataDir; }; @@ -908,6 +911,57 @@ void tst_QtJson::testValueRef() QCOMPARE(object.value(QLatin1String("key")), QJsonValue(42)); } +void tst_QtJson::testValueRefComparison() +{ + QJsonValue a0 = 42.; + QJsonValue a1 = QStringLiteral("142"); + +#define CHECK_IMPL(lhs, rhs, ineq) \ + QCOMPARE(lhs, rhs); \ + QVERIFY(!(lhs != rhs)); \ + QVERIFY(lhs != ineq); \ + QVERIFY(!(lhs == ineq)); \ + QVERIFY(ineq != rhs); \ + QVERIFY(!(ineq == rhs)); \ + /* end */ + +#define CHECK(lhs, rhs, ineq) \ + do { \ + CHECK_IMPL(lhs, rhs, ineq) \ + CHECK_IMPL(qAsConst(lhs), rhs, ineq) \ + CHECK_IMPL(lhs, qAsConst(rhs), ineq) \ + CHECK_IMPL(qAsConst(lhs), qAsConst(rhs), ineq) \ + } while (0) + + // check that the (in)equality operators aren't ambiguous in C++20: + QJsonArray a = {a0, a1}; + + Q_STATIC_ASSERT((std::is_same::value)); + + auto r0 = a.begin()[0]; + auto r1 = a.begin()[1]; + auto c0 = qAsConst(a).begin()[0]; + // ref <> ref + CHECK(r0, r0, r1); + // cref <> ref + CHECK(c0, r0, r1); + // ref <> cref + CHECK(r0, c0, r1); + // ref <> val + CHECK(r0, a0, r1); + // cref <> val + CHECK(c0, a0, r1); + // val <> ref + CHECK(a0, r0, a1); + // val <> cref + CHECK(a0, c0, a1); + // val <> val + CHECK(a0, a0, a1); + +#undef CHECK +#undef CHECK_IMPL +} + void tst_QtJson::testObjectIteration() { QJsonObject object; @@ -3685,5 +3739,23 @@ void tst_QtJson::fromToVariantConversions() } } +void tst_QtJson::noLeakOnNameClash() +{ + QJsonDocument doc = QJsonDocument::fromJson("{\"\":{\"\":0},\"\":0}"); + QVERIFY(!doc.isNull()); + const QJsonObject obj = doc.object(); + + // Removed the duplicate key. + QCOMPARE(obj.length(), 1); + + // Retained the last of the duplicates. + const QJsonValue val = obj.begin().value(); + QVERIFY(val.isDouble()); + QCOMPARE(val.toDouble(), 0.0); + + // It should not leak. + // In particular it should not forget to deref the container for the inner object. +} + QTEST_MAIN(tst_QtJson) #include "tst_qtjson.moc" diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest.zip b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest.zip new file mode 100644 index 00000000..14ec3c59 Binary files /dev/null and b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest.zip differ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Entries deleted file mode 100644 index 56dc3e57..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Entries +++ /dev/null @@ -1,6 +0,0 @@ -/canonxml.html/1.1.1.1/Wed Oct 17 09:52:58 2001// -/readme.html/1.1.1.1/Wed Oct 17 09:52:58 2001// -/xmltest.xml/1.11/Wed Apr 13 19:30:48 2005// -D/invalid//// -D/not-wf//// -D/valid//// diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Repository deleted file mode 100644 index e4b88187..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/canonxml.html b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/canonxml.html deleted file mode 100644 index 2ba0edf6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/canonxml.html +++ /dev/null @@ -1,44 +0,0 @@ - -Canonical XML - -

Canonical XML

-

-This document defines a subset of XML called canonical XML. -The intended use of canonical XML is in testing XML processors, -as a representation of the result of parsing an XML document. -

-Every well-formed XML document has a unique structurally equivalent -canonical XML document. Two structurally equivalent XML -documents have a byte-for-byte identical canonical XML document. -Canonicalizing an XML document requires only information that an XML -processor is required to make available to an application. -

-A canonical XML document conforms to the following grammar: -

-CanonXML    ::= Pi* element Pi*
-element     ::= Stag (Datachar | Pi | element)* Etag
-Stag        ::= '<'  Name Atts '>'
-Etag        ::= '</' Name '>'
-Pi          ::= '<?' Name ' ' (((Char - S) Char*)? - (Char* '?>' Char*)) '?>'
-Atts        ::= (' ' Name '=' '"' Datachar* '"')*
-Datachar    ::= '&amp;' | '&lt;' | '&gt;' | '&quot;'
-                 | '&#9;'| '&#10;'| '&#13;'
-                 | (Char - ('&' | '<' | '>' | '"' | #x9 | #xA | #xD))
-Name        ::= (see XML spec)
-Char        ::= (see XML spec)
-S           ::= (see XML spec)
-
-

-Attributes are in lexicographical order (in Unicode bit order). -

-A canonical XML document is encoded in UTF-8. -

-Ignorable white space is considered significant and is treated equivalently -to data. -

-

-James Clark -
- - - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.ent deleted file mode 100644 index 4cb848b4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.ent +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.xml deleted file mode 100644 index 5a3a96d1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.ent deleted file mode 100644 index 85e16474..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.ent +++ /dev/null @@ -1,2 +0,0 @@ -"> - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.ent deleted file mode 100644 index 116ca796..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.ent +++ /dev/null @@ -1,2 +0,0 @@ -"> - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Entries deleted file mode 100644 index 04159c51..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Entries +++ /dev/null @@ -1,7 +0,0 @@ -/002.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -D/not-sa//// diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Repository deleted file mode 100644 index 3df0ffe3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/invalid diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.ent deleted file mode 100644 index 26f2d8be..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.ent +++ /dev/null @@ -1,3 +0,0 @@ - - - ]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.xml deleted file mode 100644 index b639f255..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Entries deleted file mode 100644 index 104a6d8a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Entries +++ /dev/null @@ -1,3 +0,0 @@ -/022.ent/1.1/Tue Feb 26 18:02:12 2002// -/022.xml/1.1/Tue Feb 26 18:02:12 2002// -D/out//// diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Repository deleted file mode 100644 index f86b20a1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/022.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/022.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Entries deleted file mode 100644 index 9692ca4b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Entries +++ /dev/null @@ -1,2 +0,0 @@ -/022.xml/1.1/Tue Feb 26 18:03:20 2002// -D diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Repository deleted file mode 100644 index 54370965..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries deleted file mode 100644 index 17848105..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries.Log b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries.Log deleted file mode 100644 index 818f7c93..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries.Log +++ /dev/null @@ -1,3 +0,0 @@ -A D/ext-sa//// -A D/not-sa//// -A D/sa//// diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Repository deleted file mode 100644 index 18854d87..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/not-wf diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.ent deleted file mode 100644 index 378a2074..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.ent +++ /dev/null @@ -1 +0,0 @@ -&e; \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.xml deleted file mode 100644 index aa624cbe..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.ent deleted file mode 100644 index 2cd184a2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.ent +++ /dev/null @@ -1,3 +0,0 @@ - -data - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.xml deleted file mode 100644 index 9eaf9172..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.ent deleted file mode 100644 index ac292ee2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.ent +++ /dev/null @@ -1,2 +0,0 @@ - -data diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.xml deleted file mode 100644 index bb60b663..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Entries deleted file mode 100644 index 85dc74e3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Entries +++ /dev/null @@ -1,7 +0,0 @@ -/001.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/001.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.ent/1.2/Fri Feb 22 18:52:54 2002// -/003.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -D diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Repository deleted file mode 100644 index 702914cf..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.ent deleted file mode 100644 index 00096e57..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.ent +++ /dev/null @@ -1,3 +0,0 @@ - -]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.xml deleted file mode 100644 index 36188451..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/002.xml deleted file mode 100644 index dd731741..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/002.xml +++ /dev/null @@ -1,6 +0,0 @@ - -"> -%e; -]> - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.ent deleted file mode 100644 index abf1b1a3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.ent +++ /dev/null @@ -1,2 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.ent deleted file mode 100644 index 552e4f52..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.ent +++ /dev/null @@ -1,2 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.ent deleted file mode 100644 index 9a369cef..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.ent +++ /dev/null @@ -1,2 +0,0 @@ - -%e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.xml deleted file mode 100644 index 383553d2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.ent deleted file mode 100644 index 771daf19..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.ent +++ /dev/null @@ -1,3 +0,0 @@ - -]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.xml deleted file mode 100644 index 2f14e839..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.ent deleted file mode 100644 index 9e9866d2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.ent +++ /dev/null @@ -1,3 +0,0 @@ - -]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.xml deleted file mode 100644 index 38897e34..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.ent deleted file mode 100644 index f8b1cd3d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.ent +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.xml deleted file mode 100644 index 54351009..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.ent deleted file mode 100644 index f70eaea9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.ent +++ /dev/null @@ -1,3 +0,0 @@ - - -%e; --> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.xml deleted file mode 100644 index 9aa72898..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.ent deleted file mode 100644 index 54f3c821..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.ent +++ /dev/null @@ -1,2 +0,0 @@ - -%e; doc (#PCDATA)> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.xml deleted file mode 100644 index 963e4c2f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.ent deleted file mode 100644 index aae4cc29..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.ent +++ /dev/null @@ -1,3 +0,0 @@ - -"> -%e1; doc (#PCDATA) %e2; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.xml deleted file mode 100644 index dd40c958..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Entries deleted file mode 100644 index bfc06873..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Entries +++ /dev/null @@ -1,22 +0,0 @@ -/001.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/001.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.ent/1.1/Mon Mar 25 18:59:43 2002// -/009.xml/1.1/Mon Mar 25 18:59:17 2002// -/010.ent/1.1/Mon Mar 25 18:34:47 2002// -/010.xml/1.1/Mon Mar 25 18:33:57 2002// -/011.ent/1.1/Mon Mar 25 19:08:52 2002// -/011.xml/1.1/Mon Mar 25 19:08:40 2002// -D diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Repository deleted file mode 100644 index 031f3ded..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/001.xml deleted file mode 100644 index d33ec68d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/001.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/002.xml deleted file mode 100644 index 0a64d524..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/002.xml +++ /dev/null @@ -1,4 +0,0 @@ - -<.doc> - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/003.xml deleted file mode 100644 index e0b8bae4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/003.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/004.xml deleted file mode 100644 index e85bc96e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/004.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/005.xml deleted file mode 100644 index 7cd44ef1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/005.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/006.xml deleted file mode 100644 index 8594c35c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/006.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/007.xml deleted file mode 100644 index 286756fd..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/007.xml +++ /dev/null @@ -1 +0,0 @@ -& no refc diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/008.xml deleted file mode 100644 index 29ef4030..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/008.xml +++ /dev/null @@ -1 +0,0 @@ -&.entity; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/009.xml deleted file mode 100644 index 8e3ff7de..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/009.xml +++ /dev/null @@ -1 +0,0 @@ -&#RE; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/010.xml deleted file mode 100644 index a6790846..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/010.xml +++ /dev/null @@ -1 +0,0 @@ -A & B diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/011.xml deleted file mode 100644 index 57eaf9fc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/011.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/012.xml deleted file mode 100644 index 1b2539ff..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/012.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/013.xml deleted file mode 100644 index 3540df91..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/013.xml +++ /dev/null @@ -1 +0,0 @@ -"> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/015.xml deleted file mode 100644 index f2baf947..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/015.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/016.xml deleted file mode 100644 index 22d4b2e2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/016.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/017.xml deleted file mode 100644 index a76f5929..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/017.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/018.xml deleted file mode 100644 index 66e204ac..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/018.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/019.xml deleted file mode 100644 index b835c2d7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/019.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/020.xml deleted file mode 100644 index b30cfcfc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/020.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/021.xml deleted file mode 100644 index 1bfa84aa..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/021.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/022.xml deleted file mode 100644 index 44c803bf..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/022.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/023.xml deleted file mode 100644 index b877ae2a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/023.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/024.xml deleted file mode 100644 index cf68f2c0..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/024.xml +++ /dev/null @@ -1,3 +0,0 @@ - -<123> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/025.xml deleted file mode 100644 index 6cba95cd..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/025.xml +++ /dev/null @@ -1 +0,0 @@ -]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/026.xml deleted file mode 100644 index 347984fa..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/026.xml +++ /dev/null @@ -1 +0,0 @@ -]]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/027.xml deleted file mode 100644 index cfafaf0d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/027.xml +++ /dev/null @@ -1,3 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/033.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/033.xml deleted file mode 100644 index afd23284..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/033.xml +++ /dev/null @@ -1 +0,0 @@ -abcdef diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/034.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/034.xml deleted file mode 100644 index d74a7771..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/034.xml +++ /dev/null @@ -1 +0,0 @@ -A form-feed is not white space or a name character diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/035.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/035.xml deleted file mode 100644 index e1fc9205..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/035.xml +++ /dev/null @@ -1 +0,0 @@ -1 < 2 but not in XML diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/036.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/036.xml deleted file mode 100644 index b8ecb21b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/036.xml +++ /dev/null @@ -1,2 +0,0 @@ - -Illegal data diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/037.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/037.xml deleted file mode 100644 index 2e026629..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/037.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/038.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/038.xml deleted file mode 100644 index 68b2803f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/038.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/039.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/039.xml deleted file mode 100644 index 80429e3e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/039.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/040.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/040.xml deleted file mode 100644 index dc8ba5a4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/040.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/041.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/041.xml deleted file mode 100644 index 30bcdd6b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/041.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/042.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/042.xml deleted file mode 100644 index 4ae50efc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/042.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/043.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/043.xml deleted file mode 100644 index 41824eee..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/043.xml +++ /dev/null @@ -1,2 +0,0 @@ - -Illegal data diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/044.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/044.xml deleted file mode 100644 index 3fc232dc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/044.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/045.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/045.xml deleted file mode 100644 index 00c10f00..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/045.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/046.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/046.xml deleted file mode 100644 index 265cb153..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/046.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/047.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/047.xml deleted file mode 100644 index d18a4a44..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/047.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/048.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/048.xml deleted file mode 100644 index 67419c1e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/048.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/049.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/049.xml deleted file mode 100644 index 3cf0e794..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/049.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/050.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/050.xml deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/051.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/051.xml deleted file mode 100644 index b52df12c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/051.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/052.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/052.xml deleted file mode 100644 index 82838959..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/052.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/053.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/053.xml deleted file mode 100644 index 9d7f3692..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/053.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/054.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/054.xml deleted file mode 100644 index eda553c6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/054.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/055.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/055.xml deleted file mode 100644 index cbb3683a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/055.xml +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/056.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/056.xml deleted file mode 100644 index a681684c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/056.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/057.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/057.xml deleted file mode 100644 index 848d3471..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/057.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/058.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/058.xml deleted file mode 100644 index daba266a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/058.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/059.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/059.xml deleted file mode 100644 index 316083dc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/059.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/060.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/060.xml deleted file mode 100644 index 9a610fd3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/060.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/061.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/061.xml deleted file mode 100644 index 59181e70..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/061.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/062.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/062.xml deleted file mode 100644 index e62e9cd3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/062.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/063.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/063.xml deleted file mode 100644 index 98675b90..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/063.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/064.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/064.xml deleted file mode 100644 index 3888c46b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/064.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/065.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/065.xml deleted file mode 100644 index da9cafd1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/065.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/066.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/066.xml deleted file mode 100644 index 9c09eb4e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/066.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/067.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/067.xml deleted file mode 100644 index 7e0809bd..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/067.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/068.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/068.xml deleted file mode 100644 index 53a80a83..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/068.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/069.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/069.xml deleted file mode 100644 index 6f891dd5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/069.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/070.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/070.xml deleted file mode 100644 index faf4b0ae..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/070.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/071.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/071.xml deleted file mode 100644 index 5bd39089..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/071.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> -&e1; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/072.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/072.xml deleted file mode 100644 index 743ba794..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/072.xml +++ /dev/null @@ -1 +0,0 @@ -&foo; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/073.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/073.xml deleted file mode 100644 index 2578af42..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/073.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -&f; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/074.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/074.xml deleted file mode 100644 index f8abaeb2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/074.xml +++ /dev/null @@ -1,6 +0,0 @@ -"> -]> - -&e; - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/075.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/075.xml deleted file mode 100644 index d3dbf50e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/075.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - -]> - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/076.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/076.xml deleted file mode 100644 index 60546720..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/076.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/077.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/077.xml deleted file mode 100644 index f8ac23a5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/077.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/078.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/078.xml deleted file mode 100644 index 446cd85e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/078.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/079.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/079.xml deleted file mode 100644 index da016fd3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/079.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/080.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/080.xml deleted file mode 100644 index fa4b9e42..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/080.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/081.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/081.xml deleted file mode 100644 index d676100e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/081.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/082.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/082.xml deleted file mode 100644 index 3217d6f8..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/082.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/083.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/083.xml deleted file mode 100644 index 469d43fd..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/083.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/084.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/084.xml deleted file mode 100644 index abbbcdea..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/084.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/085.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/085.xml deleted file mode 100644 index ac0aeca3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/085.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/086.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/086.xml deleted file mode 100644 index df6adfd8..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/086.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/087.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/087.xml deleted file mode 100644 index ed49492a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/087.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/088.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/088.xml deleted file mode 100644 index da0a68c4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/088.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/090.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/090.xml deleted file mode 100644 index 3fb72f3c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/090.xml +++ /dev/null @@ -1,4 +0,0 @@ -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/091.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/091.xml deleted file mode 100644 index a61d0914..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/091.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/092.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/092.xml deleted file mode 100644 index be5266da..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/092.xml +++ /dev/null @@ -1,4 +0,0 @@ -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/093.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/093.xml deleted file mode 100644 index 4af61bc6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/093.xml +++ /dev/null @@ -1 +0,0 @@ -X diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/094.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/094.xml deleted file mode 100644 index bdec7a46..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/094.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/095.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/095.xml deleted file mode 100644 index 090b8b4e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/095.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/096.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/096.xml deleted file mode 100644 index d806c3b9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/096.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/097.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/097.xml deleted file mode 100644 index d4def544..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/097.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/098.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/098.xml deleted file mode 100644 index 9798496a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/098.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/099.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/099.xml deleted file mode 100644 index d5be08ef..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/099.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/100.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/100.xml deleted file mode 100644 index 51e06231..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/100.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/101.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/101.xml deleted file mode 100644 index afa5a455..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/101.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/102.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/102.xml deleted file mode 100644 index 8734adaa..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/102.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/103.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/103.xml deleted file mode 100644 index 6c471679..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/103.xml +++ /dev/null @@ -1,4 +0,0 @@ -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/104.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/104.xml deleted file mode 100644 index dd573962..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/104.xml +++ /dev/null @@ -1,4 +0,0 @@ -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/105.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/105.xml deleted file mode 100644 index 809e7058..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/105.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/106.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/106.xml deleted file mode 100644 index d32319ef..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/106.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/107.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/107.xml deleted file mode 100644 index 3dfd8200..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/107.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/108.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/108.xml deleted file mode 100644 index af5cf50d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/108.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/109.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/109.xml deleted file mode 100644 index 5afc03e8..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/109.xml +++ /dev/null @@ -1,4 +0,0 @@ -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/110.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/110.xml deleted file mode 100644 index cf54ebe5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/110.xml +++ /dev/null @@ -1,5 +0,0 @@ - -]> - -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/111.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/111.xml deleted file mode 100644 index 84a469f5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/111.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/112.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/112.xml deleted file mode 100644 index 0c5c1a43..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/112.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/113.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/113.xml deleted file mode 100644 index 04fc9d23..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/113.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/114.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/114.xml deleted file mode 100644 index 1261ee49..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/114.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/115.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/115.xml deleted file mode 100644 index f111dbe1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/115.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/116.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/116.xml deleted file mode 100644 index 84bb762f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/116.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -&e;7; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/117.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/117.xml deleted file mode 100644 index e4a5e572..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/117.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -&e;#97; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/118.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/118.xml deleted file mode 100644 index 494d53d2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/118.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -&&e;97; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/119.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/119.xml deleted file mode 100644 index aefaa44a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/119.xml +++ /dev/null @@ -1,6 +0,0 @@ - -]> - -&e;#38; - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/120.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/120.xml deleted file mode 100644 index b7d6ff9c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/120.xml +++ /dev/null @@ -1,6 +0,0 @@ - -]> - -&e; - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/121.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/121.xml deleted file mode 100644 index 2b4adcc6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/121.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/122.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/122.xml deleted file mode 100644 index ef0b057c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/122.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/123.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/123.xml deleted file mode 100644 index 06d65f04..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/123.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/124.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/124.xml deleted file mode 100644 index 3bbe0f91..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/124.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/125.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/125.xml deleted file mode 100644 index 5f9c22c0..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/125.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/126.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/126.xml deleted file mode 100644 index 13e74d6d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/126.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/127.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/127.xml deleted file mode 100644 index a379b9e5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/127.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/128.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/128.xml deleted file mode 100644 index dd706bb2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/128.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/129.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/129.xml deleted file mode 100644 index d4e4461a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/129.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/130.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/130.xml deleted file mode 100644 index fa7be641..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/130.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/131.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/131.xml deleted file mode 100644 index f34ed453..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/131.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/132.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/132.xml deleted file mode 100644 index ab6cc416..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/132.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/133.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/133.xml deleted file mode 100644 index d2aa604e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/133.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/134.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/134.xml deleted file mode 100644 index c8919c5e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/134.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/135.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/135.xml deleted file mode 100644 index e639e8b6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/135.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/136.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/136.xml deleted file mode 100644 index 499e68bc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/136.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/137.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/137.xml deleted file mode 100644 index 723b77f7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/137.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/138.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/138.xml deleted file mode 100644 index 16934cc8..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/138.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/139.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/139.xml deleted file mode 100644 index 34df52ed..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/139.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/140.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/140.xml deleted file mode 100644 index 467d5ed3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/140.xml +++ /dev/null @@ -1,4 +0,0 @@ -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/141.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/141.xml deleted file mode 100644 index 409d0a75..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/141.xml +++ /dev/null @@ -1,4 +0,0 @@ -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/142.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/142.xml deleted file mode 100644 index 20e88f88..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/142.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/143.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/143.xml deleted file mode 100644 index 0ee1c614..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/143.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/144.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/144.xml deleted file mode 100644 index 437548c0..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/144.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -￿ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/145.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/145.xml deleted file mode 100644 index 71b187a9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/145.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/146.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/146.xml deleted file mode 100644 index d0bfbca7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/146.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/147.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/147.xml deleted file mode 100644 index 3b614561..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/147.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/148.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/148.xml deleted file mode 100644 index 774dce18..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/148.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/149.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/149.xml deleted file mode 100644 index 725eea0d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/149.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/150.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/150.xml deleted file mode 100644 index 44f6b6df..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/150.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/151.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/151.xml deleted file mode 100644 index fecc4f24..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/151.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/152.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/152.xml deleted file mode 100644 index b5c5cb26..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/152.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/153.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/153.xml deleted file mode 100644 index 5e297370..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/153.xml +++ /dev/null @@ -1,5 +0,0 @@ - -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/154.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/154.xml deleted file mode 100644 index 96e01d63..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/154.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/155.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/155.xml deleted file mode 100644 index 4f16d0f1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/155.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/156.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/156.xml deleted file mode 100644 index c6d93fd3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/156.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/157.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/157.xml deleted file mode 100644 index 2f058dac..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/157.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/158.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/158.xml deleted file mode 100644 index 32b90b72..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/158.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/159.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/159.xml deleted file mode 100644 index 066244cb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/159.xml +++ /dev/null @@ -1,5 +0,0 @@ - -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/160.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/160.xml deleted file mode 100644 index 85424acb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/160.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/161.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/161.xml deleted file mode 100644 index 4f8a5b7b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/161.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/162.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/162.xml deleted file mode 100644 index efae4b19..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/162.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/163.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/163.xml deleted file mode 100644 index e14fb76c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/163.xml +++ /dev/null @@ -1,6 +0,0 @@ - - -]> -%e; - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/164.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/164.xml deleted file mode 100644 index 98dd267c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/164.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -] %e; > - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/165.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/165.xml deleted file mode 100644 index 36c04618..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/165.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml deleted file mode 100644 index ee2ce286..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml +++ /dev/null @@ -1 +0,0 @@ -￿ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/167.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/167.xml deleted file mode 100644 index 9bdc6c12..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/167.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/168.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/168.xml deleted file mode 100644 index f83221a3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/168.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/169.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/169.xml deleted file mode 100644 index 310029b9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/169.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/170.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/170.xml deleted file mode 100644 index cfa0aee1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/170.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/171.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/171.xml deleted file mode 100644 index 48b5c7d3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/171.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/172.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/172.xml deleted file mode 100644 index 6651d4d2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/172.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/173.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/173.xml deleted file mode 100644 index f9f9f420..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/173.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/174.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/174.xml deleted file mode 100644 index 42bef861..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/174.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/175.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/175.xml deleted file mode 100644 index 69912f36..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/175.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/176.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/176.xml deleted file mode 100644 index 9c8e2e47..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/176.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/177.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/177.xml deleted file mode 100644 index 6bc82288..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/177.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -A￿ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/178.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/178.xml deleted file mode 100644 index e8f2d18e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/178.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/180.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/180.xml deleted file mode 100644 index 569d553a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/180.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/181.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/181.xml deleted file mode 100644 index 4341d99e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/181.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e;]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/182.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/182.xml deleted file mode 100644 index 920f4316..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/182.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e;--> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/183.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/183.xml deleted file mode 100644 index 7a5677de..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/183.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/184.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/184.xml deleted file mode 100644 index 103384a0..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/184.xml +++ /dev/null @@ -1,6 +0,0 @@ - - -]> - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.ent deleted file mode 100644 index e5574264..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.ent +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.xml deleted file mode 100644 index 81d5ef4b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/186.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/186.xml deleted file mode 100644 index 85b26ec0..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/186.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Entries deleted file mode 100644 index aef1bd67..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Entries +++ /dev/null @@ -1,189 +0,0 @@ -/001.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/010.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/011.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/012.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/013.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/014.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/015.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/016.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/017.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/018.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/019.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/020.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/021.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/022.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/023.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/024.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/025.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/026.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/027.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/028.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/029.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/030.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/031.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/032.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/033.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/034.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/035.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/036.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/037.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/038.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/039.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/040.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/041.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/042.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/043.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/044.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/045.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/046.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/047.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/048.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/049.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/050.xml/1.1/Mon Feb 11 18:42:19 2002// -/051.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/052.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/053.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/054.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/055.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/056.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/057.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/058.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/059.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/060.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/061.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/062.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/063.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/064.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/065.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/066.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/067.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/068.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/069.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/070.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/071.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/072.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/073.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/074.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/075.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/076.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/077.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/078.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/079.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/080.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/081.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/082.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/083.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/084.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/085.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/086.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/087.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/088.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/089.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/090.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/091.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/092.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/093.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/094.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/095.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/096.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/097.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/098.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/099.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/100.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/101.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/102.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/103.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/104.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/105.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/106.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/107.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/108.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/109.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/110.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/111.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/112.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/113.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/114.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/115.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/116.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/117.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/118.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/119.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/120.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/121.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/122.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/123.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/124.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/125.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/126.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/127.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/128.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/129.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/130.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/131.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/132.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/133.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/134.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/135.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/136.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/137.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/138.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/139.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/140.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/141.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/142.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/143.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/144.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/145.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/146.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/147.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/148.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/149.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/150.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/151.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/152.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/153.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/154.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/155.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/156.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/157.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/158.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/159.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/160.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/161.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/162.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/163.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/164.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/165.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/166.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/167.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/168.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/169.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/170.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/171.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/172.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/173.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/174.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/175.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/176.xml/1.2/Mon Apr 22 13:20:31 2002// -/177.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/178.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/179.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/180.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/181.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/182.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/183.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/184.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/185.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/185.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/186.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/null.ent/1.1/Mon Feb 11 18:43:34 2002// -D diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Repository deleted file mode 100644 index ede48b42..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/not-wf/sa diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/null.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/null.ent deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/readme.html b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/readme.html deleted file mode 100644 index fc7310c6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/readme.html +++ /dev/null @@ -1,60 +0,0 @@ - -XML Test Cases - -

XML Test Cases version 1998-11-18

-

-Copyright (C) 1998 James Clark. All rights reserved. Permission is -granted to copy and modify this collection in any way for internal use -within a company or organization. Permission is granted to -redistribute the file xmltest.zip containing this -collection to third parties provided that no modifications of any kind -are made to this file. Note that permission to distribute the -collection in any other form is not granted. -

-The collection is structured into three directories: -

-
not-wf -
this contains cases that are not well-formed XML documents -
valid -
this contains cases that are valid XML documents -
invalid -
this contains cases that are well-formed XML documents -but are not valid XML documents -
-

-The not-wf and valid directories each have -three subdirectories: -

-
-sa -
-this contains cases that are standalone (as defined in XML) and do not -have references to external general entities -
-ext-sa -
-this contains case that are standalone and have references to external -general entities -
-not-sa -
-this contains cases that are not standalone -
-

-In each directory, files with a .xml extension are the -XML document test cases, and files with a .ent extension -are external entities referenced by the test cases. -

-Within the valid directory, each of these three -subdirectories has an out subdirectory which contains an -equivalent canonical XML document for each -of the cases. -

-

-Bug reports and contributions of new test cases are welcome. -

-

-James Clark -
- - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries deleted file mode 100644 index 17848105..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries +++ /dev/null @@ -1 +0,0 @@ -D diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries.Log b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries.Log deleted file mode 100644 index 818f7c93..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries.Log +++ /dev/null @@ -1,3 +0,0 @@ -A D/ext-sa//// -A D/not-sa//// -A D/sa//// diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Repository deleted file mode 100644 index 48324028..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/valid diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.ent deleted file mode 100644 index 1cff3fd4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.ent +++ /dev/null @@ -1 +0,0 @@ -Data diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.xml deleted file mode 100644 index 147d70d2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.ent deleted file mode 100644 index 45f6d8e7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.ent +++ /dev/null @@ -1 +0,0 @@ -Data \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.xml deleted file mode 100644 index 9eaf9172..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.ent deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.xml deleted file mode 100644 index bb60b663..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.ent deleted file mode 100644 index 3436f200..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.ent +++ /dev/null @@ -1 +0,0 @@ -Data \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.xml deleted file mode 100644 index 074498ce..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.ent deleted file mode 100644 index c6e97f82..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.ent +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.xml deleted file mode 100644 index 82a62282..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.ent deleted file mode 100644 index 4df2f0c2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.ent +++ /dev/null @@ -1,4 +0,0 @@ -Data - -More data - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.xml deleted file mode 100644 index 0b326cad..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.ent deleted file mode 100644 index ab1d696d..00000000 Binary files a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.ent and /dev/null differ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.xml deleted file mode 100644 index 825e3b28..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -X&e;Z diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.ent deleted file mode 100644 index c6ca61f9..00000000 Binary files a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.ent and /dev/null differ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.xml deleted file mode 100644 index 3c001b6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -X&e;Z diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.ent deleted file mode 100644 index 67c32976..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.ent +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.xml deleted file mode 100644 index a5866e5a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.ent deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.xml deleted file mode 100644 index 418e9b01..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.ent deleted file mode 100644 index b19be3a4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.ent +++ /dev/null @@ -1 +0,0 @@ -xyzzy diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.xml deleted file mode 100644 index 2ceefa1d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.ent deleted file mode 100644 index 8eb1fb9c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.ent +++ /dev/null @@ -1 +0,0 @@ -&e4; \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.xml deleted file mode 100644 index 5a8f009b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - -]> -&e1; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.ent deleted file mode 100644 index 7f25c502..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.ent +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.xml deleted file mode 100644 index 7717c97a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - -]> -&x; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.ent deleted file mode 100644 index 470fd6fe..00000000 Binary files a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.ent and /dev/null differ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.xml deleted file mode 100644 index 816fd1e7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Entries deleted file mode 100644 index 33a4a0da..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Entries +++ /dev/null @@ -1,29 +0,0 @@ -/001.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/001.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/010.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/010.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/011.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/011.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/012.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/012.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/013.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/013.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/014.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/014.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -D/out//// diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Repository deleted file mode 100644 index 3753e3a5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/001.xml deleted file mode 100644 index 0a7acf8e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/001.xml +++ /dev/null @@ -1 +0,0 @@ -Data \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/002.xml deleted file mode 100644 index d4a445e5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/002.xml +++ /dev/null @@ -1 +0,0 @@ -Data \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/003.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/003.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/004.xml deleted file mode 100644 index 0a7acf8e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/004.xml +++ /dev/null @@ -1 +0,0 @@ -Data \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/005.xml deleted file mode 100644 index 6e293aa7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/005.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/006.xml deleted file mode 100644 index 04b6fc82..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/006.xml +++ /dev/null @@ -1 +0,0 @@ -Data More data \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/007.xml deleted file mode 100644 index ab2a74c9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/007.xml +++ /dev/null @@ -1 +0,0 @@ -XYZ \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/008.xml deleted file mode 100644 index ab2a74c9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/008.xml +++ /dev/null @@ -1 +0,0 @@ -XYZ \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/009.xml deleted file mode 100644 index a79dff65..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/009.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/010.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/010.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/011.xml deleted file mode 100644 index bf275adb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/011.xml +++ /dev/null @@ -1 +0,0 @@ -xyzzy \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/012.xml deleted file mode 100644 index 81a251cb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/012.xml +++ /dev/null @@ -1 +0,0 @@ -(e5) \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/013.xml deleted file mode 100644 index 524d94ee..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/013.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/014.xml deleted file mode 100644 index 71c6dc3e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/014.xml +++ /dev/null @@ -1 +0,0 @@ -data \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Entries deleted file mode 100644 index 57793675..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Entries +++ /dev/null @@ -1,15 +0,0 @@ -/001.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/010.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/011.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/012.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/013.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/014.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -D diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Repository deleted file mode 100644 index 889051e1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.ent deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.xml deleted file mode 100644 index 2d6f41a1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.ent deleted file mode 100644 index 67c32976..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.ent +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.xml deleted file mode 100644 index 023fce84..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-1.ent deleted file mode 100644 index 931f3ad6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-1.ent +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-2.ent deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003.xml deleted file mode 100644 index 63a5e8bd..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-1.ent deleted file mode 100644 index 40f7ff58..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-1.ent +++ /dev/null @@ -1,4 +0,0 @@ - - - -%e1; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-2.ent deleted file mode 100644 index 61def75c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-2.ent +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004.xml deleted file mode 100644 index adc92014..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-1.ent deleted file mode 100644 index ade95990..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-1.ent +++ /dev/null @@ -1,3 +0,0 @@ - - -%e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-2.ent deleted file mode 100644 index bef50b1f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-2.ent +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005.xml deleted file mode 100644 index 6bd44cfe..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.ent deleted file mode 100644 index 8f305a82..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.ent +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.xml deleted file mode 100644 index eb80bb74..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.ent deleted file mode 100644 index fbf4ca49..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.ent +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.xml deleted file mode 100644 index 38897e34..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.ent deleted file mode 100644 index fbf4ca49..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.ent +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.xml deleted file mode 100644 index bf777a7f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.ent deleted file mode 100644 index fbf4ca49..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.ent +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.xml deleted file mode 100644 index c17562fe..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.ent deleted file mode 100644 index 52a28f5d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.ent +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.xml deleted file mode 100644 index 2786b328..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.ent deleted file mode 100644 index fbf4ca49..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.ent +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.xml deleted file mode 100644 index 03b482bb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.xml +++ /dev/null @@ -1,5 +0,0 @@ - -%e; -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.ent deleted file mode 100644 index 7e372e65..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.ent +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.xml deleted file mode 100644 index 1967edbb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.xml +++ /dev/null @@ -1,5 +0,0 @@ - -%e; -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.ent deleted file mode 100644 index a3691d9f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.ent +++ /dev/null @@ -1,4 +0,0 @@ - - -]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.xml deleted file mode 100644 index cf44f260..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.ent deleted file mode 100644 index 6eaf7793..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.ent +++ /dev/null @@ -1,4 +0,0 @@ - - -]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.xml deleted file mode 100644 index bd085024..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.ent deleted file mode 100644 index 00d2f30e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.ent +++ /dev/null @@ -1,5 +0,0 @@ - - -]]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.xml deleted file mode 100644 index e04e75ff..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.ent deleted file mode 100644 index bf77ef83..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.ent +++ /dev/null @@ -1,4 +0,0 @@ - - -]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.xml deleted file mode 100644 index 4ccf4af3..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.ent deleted file mode 100644 index ffd9adde..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.ent +++ /dev/null @@ -1,3 +0,0 @@ - -"> -%e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.xml deleted file mode 100644 index 7fe18f4c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.ent deleted file mode 100644 index 2d46f76f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.ent +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.xml deleted file mode 100644 index 31e90f24..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.ent deleted file mode 100644 index d18201a9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.ent +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.xml deleted file mode 100644 index b7a18fab..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.ent deleted file mode 100644 index 815291c6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.ent +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.xml deleted file mode 100644 index d70892f7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.ent deleted file mode 100644 index 9f8f2afd..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.ent +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.xml deleted file mode 100644 index 70c28730..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.ent deleted file mode 100644 index e3268819..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.ent +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.xml deleted file mode 100644 index 1c2484b7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.ent deleted file mode 100644 index aa6d0ecc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.ent +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.xml deleted file mode 100644 index 96e1ecb6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.ent deleted file mode 100644 index 389d259e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.ent +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.xml deleted file mode 100644 index 8fdbc14c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.ent deleted file mode 100644 index bdc93af6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.ent +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.xml deleted file mode 100644 index 7b109c09..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.xml +++ /dev/null @@ -1,7 +0,0 @@ - - -%e; - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.ent deleted file mode 100644 index 712cce37..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.ent +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.xml deleted file mode 100644 index d0c8c7ab..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.ent deleted file mode 100644 index ac249d7b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.ent +++ /dev/null @@ -1,2 +0,0 @@ - -]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.xml deleted file mode 100644 index 50e5248c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.ent deleted file mode 100644 index df94df55..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.ent +++ /dev/null @@ -1,3 +0,0 @@ - -]]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.xml deleted file mode 100644 index 07e226c1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.ent deleted file mode 100644 index e3864460..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.ent +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.xml deleted file mode 100644 index 01fc2be4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-1.ent deleted file mode 100644 index f7f94ab1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-1.ent +++ /dev/null @@ -1,3 +0,0 @@ - - -"> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-2.ent deleted file mode 100644 index bef50b1f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-2.ent +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031.xml deleted file mode 100644 index c3fe5fca..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031.xml +++ /dev/null @@ -1,2 +0,0 @@ - -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Entries deleted file mode 100644 index 65ee741d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Entries +++ /dev/null @@ -1,65 +0,0 @@ -/001.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/001.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003-1.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003-2.ent/1.1/Mon Feb 11 18:45:43 2002// -/003.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004-1.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004-2.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005-1.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005-2.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/010.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/010.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/011.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/011.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/012.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/012.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/013.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/013.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/014.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/014.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/015.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/015.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/016.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/016.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/017.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/017.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/018.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/018.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/019.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/019.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/020.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/020.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/021.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/021.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/023.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/023.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/024.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/024.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/025.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/025.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/026.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/026.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/027.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/027.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/028.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/028.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/029.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/029.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/030.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/030.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/031-1.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/031-2.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/031.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -D/out//// diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Repository deleted file mode 100644 index b16565a8..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/valid/not-sa diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/001.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/001.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/002.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/002.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/003.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/003.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/004.xml deleted file mode 100644 index bdc39e22..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/004.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/005.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/005.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/006.xml deleted file mode 100644 index d07627d7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/006.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/007.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/007.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/008.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/008.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/009.xml deleted file mode 100644 index 7293fb63..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/009.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/010.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/010.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/011.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/011.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/012.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/012.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/013.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/013.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/014.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/014.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/015.xml deleted file mode 100644 index 131a32fe..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/015.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/016.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/016.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/017.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/017.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/018.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/018.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/019.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/019.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/020.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/020.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/021.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/021.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/022.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/022.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/023.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/023.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/024.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/024.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/025.xml deleted file mode 100644 index eb3f9674..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/025.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/026.xml deleted file mode 100644 index 71c02026..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/026.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/027.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/027.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/028.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/028.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/029.xml deleted file mode 100644 index 7ac8b2b8..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/029.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/030.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/030.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/031.xml deleted file mode 100644 index 03a6c3f9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/031.xml +++ /dev/null @@ -1 +0,0 @@ -<!ATTLIST doc a1 CDATA "v1"> \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Entries deleted file mode 100644 index 5c3b4ac8..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Entries +++ /dev/null @@ -1,32 +0,0 @@ -/001.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/010.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/011.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/012.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/013.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/014.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/015.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/016.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/017.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/018.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/019.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/020.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/021.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/022.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/023.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/024.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/025.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/026.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/027.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/028.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/029.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/030.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/031.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -D diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Repository deleted file mode 100644 index 221d7aee..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/001.xml deleted file mode 100644 index 7fbef495..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/001.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/002.xml deleted file mode 100644 index 2e3f1d81..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/002.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/003.xml deleted file mode 100644 index c841b817..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/003.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/004.xml deleted file mode 100644 index a9c57569..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/004.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/005.xml deleted file mode 100644 index b069efe7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/005.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/006.xml deleted file mode 100644 index 39a34634..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/006.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/007.xml deleted file mode 100644 index cc3dc531..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/007.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/008.xml deleted file mode 100644 index b3370eb1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/008.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -&<>"' diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/009.xml deleted file mode 100644 index 0fa183ec..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/009.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/010.xml deleted file mode 100644 index eb64d185..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/010.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/011.xml deleted file mode 100644 index 4cac44b4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/011.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/012.xml deleted file mode 100644 index 6ce2a3ea..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/012.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/013.xml deleted file mode 100644 index 2f4aae4e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/013.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/014.xml deleted file mode 100644 index 47f1f723..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/014.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/015.xml deleted file mode 100644 index 861df8a6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/015.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/016.xml deleted file mode 100644 index 66b1973c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/016.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/017.xml deleted file mode 100644 index 827ba963..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/017.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/018.xml deleted file mode 100644 index 4570903f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/018.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/019.xml deleted file mode 100644 index 3e6b74cb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/019.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/020.xml deleted file mode 100644 index f749551a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/020.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -]]]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/021.xml deleted file mode 100644 index 13dda8c8..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/021.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/022.xml deleted file mode 100644 index 41d300e9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/022.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/023.xml deleted file mode 100644 index 3837b831..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/023.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/024.xml deleted file mode 100644 index b0655c63..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/024.xml +++ /dev/null @@ -1,6 +0,0 @@ - - -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/025.xml deleted file mode 100644 index ed01f36d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/025.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/026.xml deleted file mode 100644 index 1ba033c1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/026.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/027.xml deleted file mode 100644 index ee024390..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/027.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/028.xml deleted file mode 100644 index 3d957479..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/028.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/029.xml deleted file mode 100644 index 909f6ff7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/029.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/030.xml deleted file mode 100644 index 3a7ddaa7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/030.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/031.xml deleted file mode 100644 index a58e0586..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/031.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/032.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/032.xml deleted file mode 100644 index be55c8d7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/032.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/033.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/033.xml deleted file mode 100644 index a3f90538..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/033.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/034.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/034.xml deleted file mode 100644 index 7d52f31c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/034.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/035.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/035.xml deleted file mode 100644 index f109a8b7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/035.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/036.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/036.xml deleted file mode 100644 index 8ab2b3fb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/036.xml +++ /dev/null @@ -1,5 +0,0 @@ - -]> - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/037.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/037.xml deleted file mode 100644 index f9b21139..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/037.xml +++ /dev/null @@ -1,6 +0,0 @@ - -]> - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/038.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/038.xml deleted file mode 100644 index d14f41bf..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/038.xml +++ /dev/null @@ -1,6 +0,0 @@ - - -]> - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/039.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/039.xml deleted file mode 100644 index 0897316e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/039.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/040.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/040.xml deleted file mode 100644 index 12c419b6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/040.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/041.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/041.xml deleted file mode 100644 index a59f5362..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/041.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/042.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/042.xml deleted file mode 100644 index 5d7c6509..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/042.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -A diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/043.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/043.xml deleted file mode 100644 index a8095dfe..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/043.xml +++ /dev/null @@ -1,6 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/044.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/044.xml deleted file mode 100644 index bee1d23e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/044.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - -]> - - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/045.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/045.xml deleted file mode 100644 index e2567f53..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/045.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/046.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/046.xml deleted file mode 100644 index c50a2846..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/046.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/047.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/047.xml deleted file mode 100644 index a4c688cf..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/047.xml +++ /dev/null @@ -1,5 +0,0 @@ - -]> -X -Y diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/048.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/048.xml deleted file mode 100644 index c6b2dedb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/048.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -] diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/049.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/049.xml deleted file mode 100644 index c3cc797b..00000000 Binary files a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/049.xml and /dev/null differ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/050.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/050.xml deleted file mode 100644 index 12303b1a..00000000 Binary files a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/050.xml and /dev/null differ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/051.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/051.xml deleted file mode 100644 index 7ae8f6c7..00000000 Binary files a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/051.xml and /dev/null differ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/052.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/052.xml deleted file mode 100644 index 3f33a4c7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/052.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -𐀀􏿽 diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/053.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/053.xml deleted file mode 100644 index 0d88f287..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/053.xml +++ /dev/null @@ -1,6 +0,0 @@ -"> - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/054.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/054.xml deleted file mode 100644 index 5d1c88b9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/054.xml +++ /dev/null @@ -1,10 +0,0 @@ - -]> - - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/055.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/055.xml deleted file mode 100644 index da0292c5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/055.xml +++ /dev/null @@ -1,5 +0,0 @@ - -]> - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/056.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/056.xml deleted file mode 100644 index 144871b2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/056.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -A diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/057.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/057.xml deleted file mode 100644 index c1ac849e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/057.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/058.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/058.xml deleted file mode 100644 index 2ff23b23..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/058.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/059.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/059.xml deleted file mode 100644 index 2171480e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/059.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - -]> - - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/060.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/060.xml deleted file mode 100644 index 6cd6b438..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/060.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -X Y diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/061.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/061.xml deleted file mode 100644 index bbdc1524..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/061.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -£ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/062.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/062.xml deleted file mode 100644 index f4ba5309..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/062.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -เจมส์ diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/063.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/063.xml deleted file mode 100644 index 9668f2da..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/063.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -<เจมส์> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/064.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/064.xml deleted file mode 100644 index 74a97aa4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/064.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -𐀀􏿽 diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/065.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/065.xml deleted file mode 100644 index f708f2bc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/065.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/066.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/066.xml deleted file mode 100644 index a27340b9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/066.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/067.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/067.xml deleted file mode 100644 index a0ccf772..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/067.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/068.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/068.xml deleted file mode 100644 index 8ed806b9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/068.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/069.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/069.xml deleted file mode 100644 index 2437f605..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/069.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/070.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/070.xml deleted file mode 100644 index eef097df..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/070.xml +++ /dev/null @@ -1,5 +0,0 @@ -"> -%e; -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/071.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/071.xml deleted file mode 100644 index ebfba230..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/071.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/072.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/072.xml deleted file mode 100644 index 6ef39dc4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/072.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/073.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/073.xml deleted file mode 100644 index 217476d9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/073.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/074.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/074.xml deleted file mode 100644 index 8b2354ff..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/074.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/075.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/075.xml deleted file mode 100644 index 33c01244..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/075.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/076.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/076.xml deleted file mode 100644 index 65b731cf..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/076.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/077.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/077.xml deleted file mode 100644 index e5f301ea..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/077.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/078.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/078.xml deleted file mode 100644 index b31f40f9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/078.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/079.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/079.xml deleted file mode 100644 index a3290d6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/079.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/080.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/080.xml deleted file mode 100644 index 3208fa9a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/080.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/081.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/081.xml deleted file mode 100644 index 51ee1a37..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/081.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/082.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/082.xml deleted file mode 100644 index d5245ac5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/082.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/083.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/083.xml deleted file mode 100644 index 937cfc0b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/083.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/084.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/084.xml deleted file mode 100644 index 82760767..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/084.xml +++ /dev/null @@ -1 +0,0 @@ -]> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/085.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/085.xml deleted file mode 100644 index cf5834f2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/085.xml +++ /dev/null @@ -1,6 +0,0 @@ - -"> - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/086.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/086.xml deleted file mode 100644 index bbc3080d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/086.xml +++ /dev/null @@ -1,6 +0,0 @@ - - -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/087.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/087.xml deleted file mode 100644 index 34797a67..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/087.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/088.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/088.xml deleted file mode 100644 index f97d9684..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/088.xml +++ /dev/null @@ -1,5 +0,0 @@ - -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/089.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/089.xml deleted file mode 100644 index 42ffcb67..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/089.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/090.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/090.xml deleted file mode 100644 index c392c960..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/090.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/091.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/091.xml deleted file mode 100644 index 7343d0f7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/091.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/092.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/092.xml deleted file mode 100644 index 627b74ec..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/092.xml +++ /dev/null @@ -1,10 +0,0 @@ - - -]> - - - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/093.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/093.xml deleted file mode 100644 index 300578eb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/093.xml +++ /dev/null @@ -1,7 +0,0 @@ - -]> - - - - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/094.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/094.xml deleted file mode 100644 index 5726e7db..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/094.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/095.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/095.xml deleted file mode 100644 index 1fe69596..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/095.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/096.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/096.xml deleted file mode 100644 index a6f8f436..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/096.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.ent deleted file mode 100644 index e06554ac..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.ent +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.xml deleted file mode 100644 index c606afa9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - -%e; - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/098.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/098.xml deleted file mode 100644 index 33a64ce5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/098.xml +++ /dev/null @@ -1,5 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/099.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/099.xml deleted file mode 100644 index 1b7214a1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/099.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/100.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/100.xml deleted file mode 100644 index 5b839e76..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/100.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/101.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/101.xml deleted file mode 100644 index f464484b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/101.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/102.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/102.xml deleted file mode 100644 index f239ff5f..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/102.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/103.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/103.xml deleted file mode 100644 index 1dbbd5bb..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/103.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -<doc> diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/104.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/104.xml deleted file mode 100644 index 666f43de..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/104.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/105.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/105.xml deleted file mode 100644 index 6b3af2b8..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/105.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/106.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/106.xml deleted file mode 100644 index 8757c0a5..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/106.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/107.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/107.xml deleted file mode 100644 index 3d2c2566..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/107.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/108.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/108.xml deleted file mode 100644 index e919bf22..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/108.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/109.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/109.xml deleted file mode 100644 index 33fa38e1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/109.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/110.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/110.xml deleted file mode 100644 index 0c61c651..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/110.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/111.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/111.xml deleted file mode 100644 index cb56f264..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/111.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/112.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/112.xml deleted file mode 100644 index 27b6a4c7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/112.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/113.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/113.xml deleted file mode 100644 index d2edd0f0..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/113.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/114.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/114.xml deleted file mode 100644 index 52e20709..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/114.xml +++ /dev/null @@ -1,5 +0,0 @@ - -"> -]> -&e; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/115.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/115.xml deleted file mode 100644 index d939a670..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/115.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - -]> -&e1; diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/116.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/116.xml deleted file mode 100644 index 55ab4962..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/116.xml +++ /dev/null @@ -1,5 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/117.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/117.xml deleted file mode 100644 index e4f02b14..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/117.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -] diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/118.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/118.xml deleted file mode 100644 index fba6c446..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/118.xml +++ /dev/null @@ -1,5 +0,0 @@ - - -]> -] diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/119.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/119.xml deleted file mode 100644 index 876e7473..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/119.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Entries deleted file mode 100644 index 5d10c344..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Entries +++ /dev/null @@ -1,121 +0,0 @@ -/001.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/010.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/011.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/012.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/013.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/014.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/015.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/016.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/017.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/018.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/019.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/020.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/021.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/022.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/023.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/024.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/025.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/026.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/027.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/028.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/029.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/030.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/031.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/032.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/033.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/034.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/035.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/036.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/037.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/038.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/039.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/040.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/041.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/042.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/043.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/044.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/045.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/046.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/047.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/048.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/049.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/050.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/051.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/052.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/053.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/054.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/055.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/056.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/057.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/058.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/059.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/060.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/061.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/062.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/063.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/064.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/065.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/066.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/067.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/068.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/069.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/070.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/071.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/072.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/073.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/074.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/075.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/076.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/077.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/078.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/079.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/080.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/081.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/082.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/083.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/084.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/085.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/086.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/087.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/088.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/089.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/090.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/091.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/092.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/093.xml/1.2/Mon Apr 22 13:27:36 2002// -/094.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/095.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/096.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/097.ent/1.1.1.1/Wed Oct 17 09:52:58 2001// -/097.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/098.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/099.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/100.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/101.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/102.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/103.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/104.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/105.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/106.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/107.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/108.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/109.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/110.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/111.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/112.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/113.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/114.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/115.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/116.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/117.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/118.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/119.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -D/out//// diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Repository deleted file mode 100644 index 7dcbee54..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/valid/sa diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/001.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/001.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/002.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/002.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/003.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/003.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/004.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/004.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/005.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/005.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/006.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/006.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/007.xml deleted file mode 100644 index 97cf3e3b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/007.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/008.xml deleted file mode 100644 index 3ea232c2..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/008.xml +++ /dev/null @@ -1 +0,0 @@ -&<>"' \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/009.xml deleted file mode 100644 index 97cf3e3b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/009.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/010.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/010.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/011.xml deleted file mode 100644 index 7293fb63..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/011.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/012.xml deleted file mode 100644 index 5a0c9831..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/012.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/013.xml deleted file mode 100644 index c9c7ec5d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/013.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/014.xml deleted file mode 100644 index ac6b28f9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/014.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/015.xml deleted file mode 100644 index 8e216eb9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/015.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/016.xml deleted file mode 100644 index 4fc76928..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/016.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/017.xml deleted file mode 100644 index 3b9a2f8d..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/017.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/018.xml deleted file mode 100644 index a5471011..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/018.xml +++ /dev/null @@ -1 +0,0 @@ -<foo> \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/019.xml deleted file mode 100644 index 05d4e2fc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/019.xml +++ /dev/null @@ -1 +0,0 @@ -<& \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/020.xml deleted file mode 100644 index 95ae08a1..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/020.xml +++ /dev/null @@ -1 +0,0 @@ -<&]>] \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/021.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/021.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/022.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/022.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/023.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/023.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/024.xml deleted file mode 100644 index a9aa2074..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/024.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/025.xml deleted file mode 100644 index de0f5660..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/025.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/026.xml deleted file mode 100644 index de0f5660..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/026.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/027.xml deleted file mode 100644 index de0f5660..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/027.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/028.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/028.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/029.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/029.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/030.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/030.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/031.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/031.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/032.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/032.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/032.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/033.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/033.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/033.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/034.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/034.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/034.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/035.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/035.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/035.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/036.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/036.xml deleted file mode 100644 index 2bcfb06c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/036.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/037.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/037.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/037.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/038.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/038.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/038.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/039.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/039.xml deleted file mode 100644 index 82d117d4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/039.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/040.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/040.xml deleted file mode 100644 index d79cfe14..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/040.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/041.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/041.xml deleted file mode 100644 index 6f2cd583..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/041.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/042.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/042.xml deleted file mode 100644 index f683039a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/042.xml +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/043.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/043.xml deleted file mode 100644 index e162b765..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/043.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/044.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/044.xml deleted file mode 100644 index 78028b70..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/044.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/045.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/045.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/045.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/046.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/046.xml deleted file mode 100644 index 7293fb63..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/046.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/047.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/047.xml deleted file mode 100644 index b327ebd6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/047.xml +++ /dev/null @@ -1 +0,0 @@ -X Y \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/048.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/048.xml deleted file mode 100644 index ced7d027..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/048.xml +++ /dev/null @@ -1 +0,0 @@ -] \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/049.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/049.xml deleted file mode 100644 index 7cc53f9e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/049.xml +++ /dev/null @@ -1 +0,0 @@ -£ \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/050.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/050.xml deleted file mode 100644 index 33703c79..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/050.xml +++ /dev/null @@ -1 +0,0 @@ -เจมส์ \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/051.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/051.xml deleted file mode 100644 index cfeb5a53..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/051.xml +++ /dev/null @@ -1 +0,0 @@ -<เจมส์> \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/052.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/052.xml deleted file mode 100644 index f5a04847..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/052.xml +++ /dev/null @@ -1 +0,0 @@ -𐀀􏿽 \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/053.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/053.xml deleted file mode 100644 index c4083843..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/053.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/054.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/054.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/054.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/055.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/055.xml deleted file mode 100644 index 82d117d4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/055.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/056.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/056.xml deleted file mode 100644 index f683039a..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/056.xml +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/057.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/057.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/057.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/058.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/058.xml deleted file mode 100644 index f898cc8c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/058.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/059.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/059.xml deleted file mode 100644 index 78028b70..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/059.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/060.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/060.xml deleted file mode 100644 index b327ebd6..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/060.xml +++ /dev/null @@ -1 +0,0 @@ -X Y \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/061.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/061.xml deleted file mode 100644 index 7cc53f9e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/061.xml +++ /dev/null @@ -1 +0,0 @@ -£ \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/062.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/062.xml deleted file mode 100644 index 33703c79..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/062.xml +++ /dev/null @@ -1 +0,0 @@ -เจมส์ \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/063.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/063.xml deleted file mode 100644 index cfeb5a53..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/063.xml +++ /dev/null @@ -1 +0,0 @@ -<เจมส์> \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/064.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/064.xml deleted file mode 100644 index f5a04847..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/064.xml +++ /dev/null @@ -1 +0,0 @@ -𐀀􏿽 \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/065.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/065.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/065.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/066.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/066.xml deleted file mode 100644 index 7597d31b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/066.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/067.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/067.xml deleted file mode 100644 index 4bbdad45..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/067.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/068.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/068.xml deleted file mode 100644 index 4bbdad45..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/068.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/070.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/070.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/070.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/071.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/071.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/071.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/072.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/072.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/072.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/073.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/073.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/073.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/074.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/074.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/074.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/075.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/075.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/075.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/077.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/077.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/077.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/078.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/078.xml deleted file mode 100644 index fcab0cd7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/078.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/079.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/079.xml deleted file mode 100644 index fcab0cd7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/079.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/080.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/080.xml deleted file mode 100644 index fcab0cd7..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/080.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/081.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/081.xml deleted file mode 100644 index e356e7e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/081.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/082.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/082.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/082.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/083.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/083.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/083.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/084.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/084.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/084.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/085.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/085.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/085.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/086.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/086.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/086.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/087.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/087.xml deleted file mode 100644 index a9aa2074..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/087.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/088.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/088.xml deleted file mode 100644 index a5471011..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/088.xml +++ /dev/null @@ -1 +0,0 @@ -<foo> \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/089.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/089.xml deleted file mode 100644 index f5a04847..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/089.xml +++ /dev/null @@ -1 +0,0 @@ -𐀀􏿽 \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/092.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/092.xml deleted file mode 100644 index 87269f79..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/092.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/093.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/093.xml deleted file mode 100644 index 631bfde9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/093.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/094.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/094.xml deleted file mode 100644 index 636ab472..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/094.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/095.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/095.xml deleted file mode 100644 index a20706ee..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/095.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/096.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/096.xml deleted file mode 100644 index f898cc8c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/096.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/097.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/097.xml deleted file mode 100644 index e05cfe6c..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/097.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/098.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/098.xml deleted file mode 100644 index f6408de9..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/098.xml +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/099.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/099.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/099.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/100.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/100.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/100.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/101.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/101.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/101.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/102.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/102.xml deleted file mode 100644 index 6e66b8da..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/102.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/103.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/103.xml deleted file mode 100644 index 96495d45..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/103.xml +++ /dev/null @@ -1 +0,0 @@ -<doc> \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/104.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/104.xml deleted file mode 100644 index cc3def33..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/104.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/105.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/105.xml deleted file mode 100644 index 5aed3d61..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/105.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/106.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/106.xml deleted file mode 100644 index 1197d2ff..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/106.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/107.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/107.xml deleted file mode 100644 index 288f23cd..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/107.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/108.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/108.xml deleted file mode 100644 index cc3def33..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/108.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/109.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/109.xml deleted file mode 100644 index c43bdf9b..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/109.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/110.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/110.xml deleted file mode 100644 index a92237b4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/110.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/111.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/111.xml deleted file mode 100644 index cc3def33..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/111.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/112.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/112.xml deleted file mode 100644 index c82f47bc..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/112.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/113.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/113.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/113.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/114.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/114.xml deleted file mode 100644 index 8e0722ab..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/114.xml +++ /dev/null @@ -1 +0,0 @@ -&foo; \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/115.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/115.xml deleted file mode 100644 index 682b8140..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/115.xml +++ /dev/null @@ -1 +0,0 @@ -v \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/116.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/116.xml deleted file mode 100644 index a79dff65..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/116.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/117.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/117.xml deleted file mode 100644 index ced7d027..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/117.xml +++ /dev/null @@ -1 +0,0 @@ -] \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/118.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/118.xml deleted file mode 100644 index 31e37a93..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/118.xml +++ /dev/null @@ -1 +0,0 @@ -]] \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/119.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/119.xml deleted file mode 100644 index 7e8f1834..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/119.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Entries deleted file mode 100644 index 06b9ee38..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Entries +++ /dev/null @@ -1,120 +0,0 @@ -/001.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/002.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/003.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/004.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/005.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/006.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/007.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/008.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/009.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/010.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/011.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/012.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/013.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/014.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/015.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/016.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/017.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/018.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/019.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/020.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/021.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/022.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/023.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/024.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/025.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/026.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/027.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/028.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/029.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/030.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/031.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/032.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/033.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/034.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/035.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/036.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/037.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/038.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/039.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/040.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/041.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/042.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/043.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/044.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/045.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/046.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/047.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/048.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/049.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/050.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/051.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/052.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/053.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/054.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/055.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/056.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/057.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/058.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/059.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/060.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/061.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/062.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/063.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/064.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/065.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/066.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/067.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/068.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/069.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/070.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/071.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/072.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/073.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/074.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/075.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/076.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/077.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/078.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/079.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/080.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/081.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/082.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/083.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/084.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/085.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/086.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/087.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/088.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/089.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/090.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/091.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/092.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/093.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/094.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/095.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/096.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/097.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/098.xml/1.2/Thu Feb 7 19:44:42 2002// -/099.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/100.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/101.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/102.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/103.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/104.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/105.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/106.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/107.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/108.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/109.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/110.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/111.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/112.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/113.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/114.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/115.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/116.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/117.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/118.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -/119.xml/1.1.1.1/Wed Oct 17 09:52:58 2001// -D diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Repository deleted file mode 100644 index 1e172d2e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -2001/XML-Test-Suite/xmlconf/xmltest/valid/sa/out diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Root deleted file mode 100644 index 3c7177e4..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:anonymous@dev.w3.org:/sources/public diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/xmltest.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/xmltest.xml deleted file mode 100644 index bf81c88e..00000000 --- a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/xmltest.xml +++ /dev/null @@ -1,1433 +0,0 @@ - - - - - - - - Attribute values must start with attribute names, not "?". - - Names may not start with "."; it's not a Letter. - - Processing Instruction target name is required. - - SGML-ism: processing instructions end in '?>' not '>'. - - Processing instructions end in '?>' not '?'. - - XML comments may not contain "--" - - General entity references have no whitespace after the - entity name and before the semicolon. - - Entity references must include names, which don't begin - with '.' (it's not a Letter or other name start character). - - Character references may have only decimal or numeric strings. - - Ampersand may only appear as part of a general entity reference. - - SGML-ism: attribute values must be explicitly assigned a - value, it can't act as a boolean toggle. - - SGML-ism: attribute values must be quoted in all cases. - - The quotes on both ends of an attribute value must match. - - Attribute values may not contain literal '<' characters. - - Attribute values need a value, not just an equals sign. - - Attribute values need an associated name. - - CDATA sections need a terminating ']]>'. - - CDATA sections begin with a literal '<![CDATA[', no space. - - End tags may not be abbreviated as '</>'. - - Attribute values may not contain literal '&' - characters except as part of an entity reference. - - Attribute values may not contain literal '&' - characters except as part of an entity reference. - - Character references end with semicolons, always! - - Digits are not valid name start characters. - - Digits are not valid name start characters. - - Text may not contain a literal ']]>' sequence. - - Text may not contain a literal ']]>' sequence. - - Comments must be terminated with "-->". - - Processing instructions must end with '?>'. - - Text may not contain a literal ']]>' sequence. - - A form feed is not a legal XML character. - - A form feed is not a legal XML character. - - A form feed is not a legal XML character. - - An ESC (octal 033) is not a legal XML character. - - A form feed is not a legal XML character. - - The '<' character is a markup delimiter and must - start an element, CDATA section, PI, or comment. - - Text may not appear after the root element. - - Character references may not appear after the root element. - - Tests the "Unique Att Spec" WF constraint by providing - multiple values for an attribute. - - Tests the Element Type Match WFC - end tag name must - match start tag name. - - Provides two document elements. - - Provides two document elements. - - Invalid End Tag - - Provides #PCDATA text after the document element. - - Provides two document elements. - - Invalid Empty Element Tag - - This start (or empty element) tag was not terminated correctly. - - Invalid empty element tag invalid whitespace - - Provides a CDATA section after the root element. - - Missing start tag - - Empty document, with no root element. - - CDATA is invalid at top level of document. - - Invalid character reference. - - End tag does not match start tag. - - PUBLIC requires two literals. - - Invalid Document Type Definition format. - - Invalid Document Type Definition format - misplaced comment. - - This isn't SGML; comments can't exist in declarations. - - Invalid character , in ATTLIST enumeration - - String literal must be in quotes. - - Invalid type NAME defined in ATTLIST. - - External entity declarations require whitespace between public - and system IDs. - - Entity declarations need space after the entity name. - - Conditional sections may only appear in the external - DTD subset. - - Space is required between attribute type and default values - in <!ATTLIST...> declarations. - - Space is required between attribute name and type - in <!ATTLIST...> declarations. - - Required whitespace is missing. - - Space is required between attribute type and default values - in <!ATTLIST...> declarations. - - Space is required between NOTATION keyword and list of - enumerated choices in <!ATTLIST...> declarations. - - Space is required before an NDATA entity annotation. - - XML comments may not contain "--" - - ENTITY can't reference itself directly or indirectly. - - Undefined ENTITY foo. - - Undefined ENTITY f. - - Internal general parsed entities are only well formed if - they match the "content" production. - - ENTITY can't reference itself directly or indirectly. - - Undefined ENTITY foo. - - Undefined ENTITY bar. - - Undefined ENTITY foo. - - ENTITY can't reference itself directly or indirectly. - - ENTITY can't reference itself directly or indirectly. - - This tests the No External Entity References WFC, - since the entity is referred to within an attribute. - - This tests the No External Entity References WFC, - since the entity is referred to within an attribute. - - Undefined NOTATION n. - - Tests the Parsed Entity WFC by referring to an - unparsed entity. (This precedes the error of not declaring - that entity's notation, which may be detected any time before - the DTD parsing is completed.) - - Public IDs may not contain "[". - - Public IDs may not contain "[". - - Public IDs may not contain "[". - - Attribute values are terminated by literal quote characters, - and any entity expansion is done afterwards. - - Parameter entities "are" always parsed; NDATA annotations - are not permitted. - - Attributes may not contain a literal "<" character; - this one has one because of reference expansion. - - Parameter entities "are" always parsed; NDATA annotations - are not permitted. - - The replacement text of this entity has an illegal reference, - because the character reference is expanded immediately. - - Hexadecimal character references may not use the uppercase 'X'. - - Prolog VERSION must be lowercase. - - VersionInfo must come before EncodingDecl. - - Space is required before the standalone declaration. - - Both quotes surrounding VersionNum must be the same. - - Only one "version=..." string may appear in an XML declaration. - - Only three pseudo-attributes are in the XML declaration, - and "valid=..." is not one of them. - - Only "yes" and "no" are permitted as values of "standalone". - - Space is not permitted in an encoding name. - - Provides an illegal XML version number; spaces are illegal. - - End-tag required for element foo. - - Internal general parsed entities are only well formed if - they match the "content" production. - - Invalid placement of CDATA section. - - Invalid placement of entity declaration. - - Invalid document type declaration. CDATA alone is invalid. - - No space in '<![CDATA['. - - Tags invalid within EntityDecl. - - Entity reference must be in content of element. - - Entiry reference must be in content of element not Start-tag. - - CDATA sections start '<![CDATA[', not '<!cdata['. - - Parameter entity values must use valid reference syntax; - this reference is malformed. - - General entity values must use valid reference syntax; - this reference is malformed. - - The replacement text of this entity is an illegal character - reference, which must be rejected when it is parsed in the - context of an attribute value. - - Internal general parsed entities are only well formed if - they match the "content" production. This is a partial - character reference, not a full one. - - Internal general parsed entities are only well formed if - they match the "content" production. This is a partial - character reference, not a full one. - - Entity reference expansion is not recursive. - - Internal general parsed entities are only well formed if - they match the "content" production. This is a partial - character reference, not a full one. - - Character references are expanded in the replacement text of - an internal entity, which is then parsed as usual. Accordingly, - & must be doubly quoted - encoded either as &amp; - or as &#38;#38;. - - A name of an ENTITY was started with an invalid character. - - Invalid syntax mixed connectors are used. - - Invalid syntax mismatched parenthesis. - - Invalid format of Mixed-content declaration. - - Invalid syntax extra set of parenthesis not necessary. - - Invalid syntax Mixed-content must be defined as zero or more. - - Invalid syntax Mixed-content must be defined as zero or more. - - Invalid CDATA syntax. - - Invalid syntax for Element Type Declaration. - - Invalid syntax for Element Type Declaration. - - Invalid syntax for Element Type Declaration. - - Invalid syntax mixed connectors used. - - Illegal whitespace before optional character causes syntax error. - - Illegal whitespace before optional character causes syntax error. - - Invalid character used as connector. - - Tag omission is invalid in XML. - - Space is required before a content model. - - Invalid syntax for content particle. - - The element-content model should not be empty. - - Character '&#x309a;' is a CombiningChar, not a - Letter, and so may not begin a name. - - Character #x0E5C is not legal in XML names. - - Character #x0000 is not legal anywhere in an XML document. - - Character #x001F is not legal anywhere in an XML document. - - Character #xFFFF is not legal anywhere in an XML document. - - Character #xD800 is not legal anywhere in an XML document. (If it - appeared in a UTF-16 surrogate pair, it'd represent half of a UCS-4 - character and so wouldn't really be in the document.) - - Character references must also refer to legal XML characters; - #x00110000 is one more than the largest legal character. - - XML Declaration may not be preceded by whitespace. - - XML Declaration may not be preceded by comments or whitespace. - - XML Declaration may not be within a DTD. - - XML declarations may not be within element content. - - XML declarations may not follow document content. - - XML declarations must include the "version=..." string. - - Text declarations may not begin internal parsed entities; - they may only appear at the beginning of external parsed - (parameter or general) entities. - - '<?XML ...?>' is neither an XML declaration - nor a legal processing instruction target name. - - '<?xmL ...?>' is neither an XML declaration - nor a legal processing instruction target name. - - '<?xMl ...?>' is neither an XML declaration - nor a legal processing instruction target name. - - '<?xmL ...?>' is not a legal processing instruction - target name. - - SGML-ism: "#NOTATION gif" can't have attributes. - - Uses '&' unquoted in an entity declaration, - which is illegal syntax for an entity reference. - - Violates the PEs in Internal Subset WFC - by using a PE reference within a declaration. - - Violates the PEs in Internal Subset WFC - by using a PE reference within a declaration. - - Violates the PEs in Internal Subset WFC - by using a PE reference within a declaration. - - Invalid placement of Parameter entity reference. - - Invalid placement of Parameter entity reference. - - Parameter entity declarations must have a space before - the '%'. - - Character FFFF is not legal anywhere in an XML document. - - Character FFFE is not legal anywhere in an XML document. - - An unpaired surrogate (D800) is not legal anywhere - in an XML document. - - An unpaired surrogate (DC00) is not legal anywhere - in an XML document. - - Four byte UTF-8 encodings can encode UCS-4 characters - which are beyond the range of legal XML characters - (and can't be expressed in Unicode surrogate pairs). - This document holds such a character. - - Character FFFF is not legal anywhere in an XML document. - - Character FFFF is not legal anywhere in an XML document. - - Character FFFF is not legal anywhere in an XML document. - - Character FFFF is not legal anywhere in an XML document. - - Character FFFF is not legal anywhere in an XML document. - - Start tags must have matching end tags. - - Character FFFF is not legal anywhere in an XML document. - - Invalid syntax matching double quote is missing. - - Invalid syntax matching double quote is missing. - - The Entity Declared WFC requires entities to be declared - before they are used in an attribute list declaration. - - Internal parsed entities must match the content - production to be well formed. - - Internal parsed entities must match the content - production to be well formed. - - Mixed content declarations may not include content particles. - - In mixed content models, element names must not be - parenthesized. - - Tests the Entity Declared WFC. - Note: a nonvalidating parser is permitted not to report - this WFC violation, since it would need to read an external - parameter entity to distinguish it from a violation of - the Standalone Declaration VC. - - Whitespace is required between attribute/value pairs. - - - - Conditional sections must be properly terminated ("]>" used - instead of "]]>"). - - Processing instruction target names may not be "XML" - in any combination of cases. - - Conditional sections must be properly terminated ("]]>" omitted). - - Conditional sections must be properly terminated ("]]>" omitted). - - Tests the Entity Declared VC by referring to an - undefined parameter entity within an external entity. - - Conditional sections need a '[' after the INCLUDE or IGNORE. - - A <!DOCTYPE ...> declaration may not begin any external - entity; it's only found once, in the document entity. - - In DTDs, the '%' character must be part of a parameter - entity reference. - - This test violates WFC:PE Between Declarations in Production 28a. - The last character of a markup declaration is not contained in the same - parameter-entity text replacement. - - - Tests the No Recursion WFC by having an external general - entity be self-recursive. - - External entities have "text declarations", which do - not permit the "standalone=..." attribute that's allowed - in XML declarations. - - Only one text declaration is permitted; a second one - looks like an illegal processing instruction (target names - of "xml" in any case are not allowed). - - - - - - Tests the "Proper Group/PE Nesting" validity constraint by - fragmenting a content model between two parameter entities. - - Tests the "Proper Declaration/PE Nesting" validity constraint by - fragmenting an element declaration between two parameter entities. - - Tests the "Proper Declaration/PE Nesting" validity constraint by - fragmenting an element declaration between two parameter entities. - - Test the "Proper Conditional Section/ PE Nesting" validity constraint. - - - - Test demonstrates an Element Type Declaration with Mixed Content. - - Test demonstrates that whitespace is permitted after the tag name in a Start-tag. - - Test demonstrates that whitespace is permitted after the tag name in an End-tag. - - Test demonstrates a valid attribute specification within a Start-tag. - - Test demonstrates a valid attribute specification within a Start-tag that -contains whitespace on both sides of the equal sign. - - Test demonstrates that the AttValue within a Start-tag can use a single quote as a delimter. - - Test demonstrates numeric character references can be used for element content. - - Test demonstrates character references can be used for element content. - - Test demonstrates that PubidChar can be used for element content. - - Test demonstrates that whitespace is valid after the Attribute in a Start-tag. - - Test demonstrates mutliple Attibutes within the Start-tag. - - Uses a legal XML 1.0 name consisting of a single colon - character (disallowed by the latest XML Namespaces draft). - - Test demonstrates that the Attribute in a Start-tag can consist of numerals along with special characters. - - Test demonstrates that all lower case letters are valid for the Attribute in a Start-tag. - - Test demonstrates that all upper case letters are valid for the Attribute in a Start-tag. - - Test demonstrates that Processing Instructions are valid element content. - - Test demonstrates that Processing Instructions are valid element content and there can be more than one. - - Test demonstrates that CDATA sections are valid element content. - - Test demonstrates that CDATA sections are valid element content and that -ampersands may occur in their literal form. - - Test demonstractes that CDATA sections are valid element content and that -everyting between the CDStart and CDEnd is recognized as character data not markup. - - Test demonstrates that comments are valid element content. - - Test demonstrates that comments are valid element content and that all characters before the double-hypen right angle combination are considered part of thecomment. - - Test demonstrates that Entity References are valid element content. - - Test demonstrates that Entity References are valid element content and also demonstrates a valid Entity Declaration. - - Test demonstrates an Element Type Declaration and that the contentspec can be of mixed content. - - Test demonstrates an Element Type Declaration and that EMPTY is a valid contentspec. - - Test demonstrates an Element Type Declaration and that ANY is a valid contenspec. - - Test demonstrates a valid prolog that uses double quotes as delimeters around the VersionNum. - - Test demonstrates a valid prolog that uses single quotes as delimters around the VersionNum. - - Test demonstrates a valid prolog that contains whitespace on both sides of the equal sign in the VersionInfo. - - Test demonstrates a valid EncodingDecl within the prolog. - - Test demonstrates a valid SDDecl within the prolog. - - Test demonstrates that both a EncodingDecl and SDDecl are valid within the prolog. - - Test demonstrates the correct syntax for an Empty element tag. - - Test demonstrates that whitespace is permissible after the name in an Empty element tag. - - Test demonstrates a valid processing instruction. - - Test demonstrates a valid comment and that it may appear anywhere in the document including at the end. - - Test demonstrates a valid comment and that it may appear anywhere in the document including the beginning. - - Test demonstrates a valid processing instruction and that it may appear at the beginning of the document. - - Test demonstrates an Attribute List declaration that uses a StringType as the AttType. - - Test demonstrates an Attribute List declaration that uses a StringType as the AttType and also expands the CDATA attribute with a character reference. - - Test demonstrates an Attribute List declaration that uses a StringType as the AttType and also expands the CDATA attribute with a character reference. The test also shows that the leading zeros in the character reference are ignored. - - An element's attributes may be declared before its content - model; and attribute values may contain newlines. - - Test demonstrates that the empty-element tag must be use for an elements that are declared EMPTY. - - Tests whether more than one definition can be provided for the same attribute of a given element type with the first declaration being binding. - - Test demonstrates that when more than one AttlistDecl is provided for a given element type, the contents of all those provided are merged. - - Test demonstrates that extra whitespace is normalized into single space character. - - Test demonstrates that character data is valid element content. - - Test demonstrates that characters outside of normal ascii range can be used as element content. - - Test demonstrates that characters outside of normal ascii range can be used as element content. - - The document is encoded in UTF-16 and uses some name - characters well outside of the normal ASCII range. - - - The document is encoded in UTF-8 and the text inside the - root element uses two non-ASCII characters, encoded in UTF-8 - and each of which expands to a Unicode surrogate pair. - - Tests inclusion of a well-formed internal entity, which - holds an element required by the content model. - - Test demonstrates that extra whitespace within Start-tags and End-tags are nomalized into single spaces. - - Test demonstrates that extra whitespace within a processing instruction willnormalized into s single space character. - - Test demonstrates an Attribute List declaration that uses a StringType as the AttType and also expands the CDATA attribute with a character reference. The test also shows that the leading zeros in the character reference are ignored. - - Test demonstrates an element content model whose element can occur zero or more times. - - Test demonstrates that extra whitespace be normalized into a single space character in an attribute of type NMTOKENS. - - Test demonstrates an Element Type Declaration that uses the contentspec of EMPTY. The element cannot have any contents and must always appear as an empty element in the document. The test also shows an Attribute-list declaration with multiple AttDef's. - - Test demonstrates the use of decimal Character References within element content. - - Test demonstrates the use of decimal Character References within element content. - - Test demonstrates the use of hexadecimal Character References within element. - - The document is encoded in UTF-8 and the name of the - root element type uses non-ASCII characters. - - Tests in-line handling of two legal character references, which - each expand to a Unicode surrogate pair. - - Tests ability to define an internal entity which can't - legally be expanded (contains an unquoted <). - - Expands a CDATA attribute with a character reference. - - Test demonstrates the use of decimal character references within element content. - - Tests definition of an internal entity holding a carriage return character - reference, which must not be normalized before reporting to the application. Line - break normalization only occurs when parsing external parsed entities. - - Verifies that an XML parser will parse a NOTATION - declaration; the output phase of this test ensures that - it's reported to the application. - - Verifies that internal parameter entities are correctly - expanded within the internal subset. - - Test demonstrates that an AttlistDecl can use ID as the TokenizedType within the Attribute type. The test also shows that IMPLIED is a valid DefaultDecl. - - Test demonstrates that an AttlistDecl can use IDREF as the TokenizedType within the Attribute type. The test also shows that IMPLIED is a valid DefaultDecl. - - Test demonstrates that an AttlistDecl can use IDREFS as the TokenizedType within the Attribute type. The test also shows that IMPLIED is a valid DefaultDecl. - - Test demonstrates that an AttlistDecl can use ENTITY as the TokenizedType within the Attribute type. The test also shows that IMPLIED is a valid DefaultDecl. - - Test demonstrates that an AttlistDecl can use ENTITIES as the TokenizedType within the Attribute type. The test also shows that IMPLIED is a valid DefaultDecl. - - Verifies that an XML parser will parse a NOTATION - attribute; the output phase of this test ensures that - both notations are reported to the application. - - Test demonstrates that an AttlistDecl can use an EnumeratedType within the Attribute type. The test also shows that IMPLIED is a valid DefaultDecl. - - Test demonstrates that an AttlistDecl can use an StringType of CDATA within the Attribute type. The test also shows that REQUIRED is a valid DefaultDecl. - - Test demonstrates that an AttlistDecl can use an StringType of CDATA within the Attribute type. The test also shows that FIXED is a valid DefaultDecl and that a value can be given to the attribute in the Start-tag as well as the AttListDecl. - - Test demonstrates that an AttlistDecl can use an StringType of CDATA within the Attribute type. The test also shows that FIXED is a valid DefaultDecl and that an value can be given to the attribute. - - Test demonstrates the use of the optional character following a name or list to govern the number of times an element or content particles in the list occur. - - Tests that an external PE may be defined (but not referenced). - - Tests that an external PE may be defined (but not referenced). - - Test demonstrates that although whitespace can be used to set apart markup for greater readability it is not necessary. - - Parameter and General entities use different namespaces, - so there can be an entity of each type with a given name. - - Tests whether entities may be declared more than once, - with the first declaration being the binding one. - - Tests whether character references in internal entities are - expanded early enough, by relying on correct handling to - make the entity be well formed. - - Tests whether entity references in internal entities are - expanded late enough, by relying on correct handling to - make the expanded text be valid. (If it's expanded too - early, the entity will parse as an element that's not - valid in that context.) - - Tests entity expansion of three legal character references, - which each expand to a Unicode surrogate pair. - - Verifies that an XML parser will parse a NOTATION - attribute; the output phase of this test ensures that - the notation is reported to the application. - - Verifies that an XML parser will parse an ENTITY - attribute; the output phase of this test ensures that - the notation is reported to the application, and for - validating parsers it further tests that the entity - is so reported. - - Test demostrates that extra whitespace is normalized into a single space character. - - Test demonstrates that extra whitespace is not intended for inclusion in the delivered version of the document. - - Attribute defaults with a DTD have special parsing rules, different - from other strings. That means that characters found there may look - like an undefined parameter entity reference "within a markup - declaration", but they aren't ... so they can't be violating - the PEs in Internal Subset WFC. - - - Basically an output test, this requires extra whitespace - to be normalized into a single space character in an - attribute of type NMTOKENS. - - Test demonstrates that extra whitespace is normalized into a single space character in an attribute of type NMTOKENS. - - Basically an output test, this tests whether an externally - defined attribute declaration (with a default) takes proper - precedence over a subsequent internal declaration. - - Test demonstrates that extra whitespace within a processing instruction is converted into a single space character. - - Test demonstrates the name of the encoding can be composed of lowercase characters. - - Makes sure that PUBLIC identifiers may have some strange - characters. NOTE: The XML editors have said that the XML - specification errata will specify that parameter entity expansion - does not occur in PUBLIC identifiers, so that the '%' character - will not flag a malformed parameter entity reference. - - This tests whether entity expansion is (incorrectly) done - while processing entity declarations; if it is, the entity - value literal will terminate prematurely. - - Test demonstrates that a CDATA attribute can pass a double quote as its value. - - Test demonstrates that an attribute can pass a less than sign as its value. - - Test demonstrates that extra whitespace within an Attribute of a Start-tag is normalized to a single space character. - - Basically an output test, this requires a CDATA attribute - with a tab character to be passed through as one space. - - Basically an output test, this requires a CDATA attribute - with a newline character to be passed through as one space. - - Basically an output test, this requires a CDATA attribute - with a return character to be passed through as one space. - - This tests normalization of end-of-line characters (CRLF) - within entities to LF, primarily as an output test. - - Test demonstrates that an attribute can have a null value. - - Basically an output test, this requires that a CDATA - attribute with a CRLF be normalized to one space. - - Character references expanding to spaces doesn't affect - treatment of attributes. - - Test demonstrates shows the use of content particles within the element content. - - Test demonstrates that it is not an error to have attributes declared for an element not itself declared. - - Test demonstrates that all text within a valid CDATA section is considered text and not recognized as markup. - - Test demonstrates that an entity reference is processed by recursively processing the replacement text of the entity. - - Test demonstrates that a line break within CDATA will be normalized. - - Test demonstrates that entity expansion is done while processing entity declarations. - - Test demonstrates that entity expansion is done while processing entity declarations. - - Comments may contain any legal XML characters; - only the string "--" is disallowed. - - - - - Test demonstrates the use of an ExternalID within a document type definition. - - Test demonstrates the use of an ExternalID within a document type definition. - - Test demonstrates the expansion of an external parameter entity that declares an attribute. - - Expands an external parameter entity in two different ways, - with one of them declaring an attribute. - - Test demonstrates the expansion of an external parameter entity that declares an attribute. - - Test demonstrates that when more than one definition is provided for the same attribute of a given element type only the first declaration is binding. - - Test demonstrates the use of an Attribute list declaration within an external entity. - - Test demonstrates that an external identifier may include a public identifier. - - Test demonstrates that an external identifier may include a public identifier. - - Test demonstrates that when more that one definition is provided for the same attribute of a given element type only the first declaration is binding. - - Test demonstrates a parameter entity declaration whose parameter entity definition is an ExternalID. - - Test demonstrates an enternal parsed entity that begins with a text declaration. - - Test demonstrates the use of the conditional section INCLUDE that will include its contents as part of the DTD. - - Test demonstrates the use of the conditional section INCLUDE that will include its contents as part of the DTD. The keyword is a parameter-entity reference. - - Test demonstrates the use of the conditonal section IGNORE the will ignore its content from being part of the DTD. The keyword is a parameter-entity reference. - - Test demonstrates the use of the conditional section INCLUDE that will include its contents as part of the DTD. The keyword is a parameter-entity reference. - - Test demonstrates a parameter entity declaration that contains an attribute list declaration. - - Test demonstrates an EnternalID whose contents contain an parameter entity declaration and a attribute list definition. - - Test demonstrates that a parameter entity will be expanded with spaces on either side. - - Parameter entities expand with spaces on either side. - - Test demonstrates a parameter entity declaration that contains a partial attribute list declaration. - - Test demonstrates the use of a parameter entity reference within an attribute list declaration. - - - Constructs an <!ATTLIST...> declaration from several PEs. - - Test demonstrates that when more that one definition is provided for the same entity only the first declaration is binding. - - Test demonstrates that when more that one definition is provided for the same attribute of a given element type only the first declaration is binding. - - Test demonstrates a parameter entity reference whose value is NULL. - - Test demonstrates the use of the conditional section INCLUDE that will include its contents. - - Test demonstrates the use of the conditonal section IGNORE the will ignore its content from being used. - - Test demonstrates the use of the conditonal section IGNORE the will ignore its content from being used. - - Expands a general entity which contains a CDATA section with - what looks like a markup declaration (but is just text since - it's in a CDATA section). - - - - - A combination of carriage return line feed in an external entity must - be normalized to a single newline. - - A carriage return (also CRLF) in an external entity must - be normalized to a single newline. - - Test demonstrates that the content of an element can be empty. In this case the external entity is an empty file. - - A carriage return (also CRLF) in an external entity must - be normalized to a single newline. - - Test demonstrates the use of optional character and content particles within an element content. The test also show the use of external entity. - - Test demonstrates the use of optional character and content particles within mixed element content. The test also shows the use of an external entity and that a carriage control line feed in an external entity must be normalized to a single newline. - - Test demonstrates the use of external entity and how replacement -text is retrieved and processed. - Test demonstrates the use of external -entity and how replacement text is retrieved and processed. Also tests the use of an -EncodingDecl of UTF-16. - - A carriage return (also CRLF) in an external entity must - be normalized to a single newline. - - Test demonstrates the use of a public identifier with and external entity. -The test also show that a carriage control line feed combination in an external -entity must be normalized to a single newline. - - Test demonstrates both internal and external entities and that processing of entity references may be required to produce the correct replacement text. - - Test demonstrates that whitespace is handled by adding a single whitespace to the normalized value in the attribute list. - - Test demonstrates use of characters outside of normal ASCII range. - diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/069.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest_updates/069.xml similarity index 100% rename from tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/069.xml rename to tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest_updates/069.xml diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/076.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest_updates/076.xml similarity index 100% rename from tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/076.xml rename to tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest_updates/076.xml diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/090.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest_updates/090.xml similarity index 100% rename from tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/090.xml rename to tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest_updates/090.xml diff --git a/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/091.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest_updates/091.xml similarity index 100% rename from tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/091.xml rename to tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest_updates/091.xml diff --git a/tests/auto/corelib/serialization/qxmlstream/data/019.ref b/tests/auto/corelib/serialization/qxmlstream/data/019.ref index 314efb2b..9ae28f42 100644 --- a/tests/auto/corelib/serialization/qxmlstream/data/019.ref +++ b/tests/auto/corelib/serialization/qxmlstream/data/019.ref @@ -3,5 +3,5 @@ Comment( text=" Simple legal case: prefixed element " ) StartElement( name="foo" namespaceUri="http://example.org/namespace" qualifiedName="a:foo" prefix="a" NamespaceDeclaration( prefix="a" namespaceUri="http://example.org/namespace" ) ) -EndElement( name="foo" namespaceUri="http://example.org/namespace" qualifiedName="a:foo" ) +EndElement( name="foo" namespaceUri="http://example.org/namespace" qualifiedName="a:foo" prefix="a" ) EndDocument( ) diff --git a/tests/auto/corelib/serialization/qxmlstream/data/024.ref b/tests/auto/corelib/serialization/qxmlstream/data/024.ref index 83c3ac53..43cf2b1f 100644 --- a/tests/auto/corelib/serialization/qxmlstream/data/024.ref +++ b/tests/auto/corelib/serialization/qxmlstream/data/024.ref @@ -8,8 +8,8 @@ Characters( whitespace text=" StartElement( name="foo" namespaceUri="http://example.org/other-namespace" qualifiedName="a:foo" prefix="a" NamespaceDeclaration( prefix="a" namespaceUri="http://example.org/other-namespace" ) ) -EndElement( name="foo" namespaceUri="http://example.org/other-namespace" qualifiedName="a:foo" ) +EndElement( name="foo" namespaceUri="http://example.org/other-namespace" qualifiedName="a:foo" prefix="a" ) Characters( whitespace text=" " ) -EndElement( name="foo" namespaceUri="http://example.org/namespace" qualifiedName="a:foo" ) +EndElement( name="foo" namespaceUri="http://example.org/namespace" qualifiedName="a:foo" prefix="a" ) EndDocument( ) diff --git a/tests/auto/corelib/serialization/qxmlstream/data/039.ref b/tests/auto/corelib/serialization/qxmlstream/data/039.ref index 63ee6b4d..f7413e54 100644 --- a/tests/auto/corelib/serialization/qxmlstream/data/039.ref +++ b/tests/auto/corelib/serialization/qxmlstream/data/039.ref @@ -16,7 +16,7 @@ StartElement( name="bar" namespaceUri="http://example.org/~kipper" qualifiedName Attribute( name="attr" qualifiedName="attr" value="2" ) ) -EndElement( name="bar" namespaceUri="http://example.org/~kipper" qualifiedName="b:bar" ) +EndElement( name="bar" namespaceUri="http://example.org/~kipper" qualifiedName="b:bar" prefix="b" ) Characters( whitespace text=" " ) diff --git a/tests/auto/corelib/serialization/qxmlstream/data/041.ref b/tests/auto/corelib/serialization/qxmlstream/data/041.ref index 3e7ca642..50328feb 100644 --- a/tests/auto/corelib/serialization/qxmlstream/data/041.ref +++ b/tests/auto/corelib/serialization/qxmlstream/data/041.ref @@ -12,7 +12,7 @@ StartElement( name="bar" namespaceUri="http://example.org/~wilbur" qualifiedName Attribute( name="attr" qualifiedName="attr" value="2" ) ) -EndElement( name="bar" namespaceUri="http://example.org/~wilbur" qualifiedName="a:bar" ) +EndElement( name="bar" namespaceUri="http://example.org/~wilbur" qualifiedName="a:bar" prefix="a" ) Characters( whitespace text=" " ) diff --git a/tests/auto/corelib/serialization/qxmlstream/data/1.ref b/tests/auto/corelib/serialization/qxmlstream/data/1.ref index 0288cf0e..41a9febd 100644 --- a/tests/auto/corelib/serialization/qxmlstream/data/1.ref +++ b/tests/auto/corelib/serialization/qxmlstream/data/1.ref @@ -4,5 +4,5 @@ StartElement( name="doc" namespaceUri="namespaceUri" qualifiedName="ns:doc" pref NamespaceDeclaration( prefix="ns" namespaceUri="namespaceUri" ) ) -EndElement( name="doc" namespaceUri="namespaceUri" qualifiedName="ns:doc" ) +EndElement( name="doc" namespaceUri="namespaceUri" qualifiedName="ns:doc" prefix="ns" ) EndDocument( ) diff --git a/tests/auto/corelib/serialization/qxmlstream/data/2.ref b/tests/auto/corelib/serialization/qxmlstream/data/2.ref index 95d68efb..2fad9844 100644 --- a/tests/auto/corelib/serialization/qxmlstream/data/2.ref +++ b/tests/auto/corelib/serialization/qxmlstream/data/2.ref @@ -5,5 +5,5 @@ StartElement( name="doc" namespaceUri="namespaceUri" qualifiedName="ns:doc" pref NamespaceDeclaration( prefix="ns" namespaceUri="namespaceUri" ) ) Characters( text="The world goes round and round" ) -EndElement( name="doc" namespaceUri="namespaceUri" qualifiedName="ns:doc" ) +EndElement( name="doc" namespaceUri="namespaceUri" qualifiedName="ns:doc" prefix="ns" ) EndDocument( ) diff --git a/tests/auto/corelib/serialization/qxmlstream/data/21.ref b/tests/auto/corelib/serialization/qxmlstream/data/21.ref index 1098c680..d0e4982e 100644 --- a/tests/auto/corelib/serialization/qxmlstream/data/21.ref +++ b/tests/auto/corelib/serialization/qxmlstream/data/21.ref @@ -33,10 +33,10 @@ Characters( whitespace text=" " ) StartElement( name="title" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:title" prefix="html" ) Characters( text="test file" ) -EndElement( name="title" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:title" ) +EndElement( name="title" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:title" prefix="html" ) Characters( whitespace text=" " ) -EndElement( name="head" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:head" ) +EndElement( name="head" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:head" prefix="html" ) Characters( whitespace text=" " ) StartElement( name="body" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:body" prefix="html" ) @@ -46,11 +46,11 @@ StartElement( name="p" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName Attribute( name="class" qualifiedName="class" value="visible:false" ) ) Characters( text="bar" ) -EndElement( name="p" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:p" ) +EndElement( name="p" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:p" prefix="html" ) Characters( whitespace text=" " ) -EndElement( name="body" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:body" ) +EndElement( name="body" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:body" prefix="html" ) Characters( whitespace text=" " ) -EndElement( name="html" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:html" ) +EndElement( name="html" namespaceUri="http://www.w3.org/1999/xhtml" qualifiedName="html:html" prefix="html" ) EndDocument( ) diff --git a/tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.ref b/tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.ref index 132875f4..84538b02 100644 --- a/tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.ref +++ b/tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.ref @@ -15,7 +15,7 @@ Characters( whitespace text=" StartElement( name="bar" namespaceUri="http://qt-project.org" qualifiedName="pre:bar" prefix="pre" NamespaceDeclaration( prefix="pre" namespaceUri="http://qt-project.org" ) ) -EndElement( name="bar" namespaceUri="http://qt-project.org" qualifiedName="pre:bar" ) +EndElement( name="bar" namespaceUri="http://qt-project.org" qualifiedName="pre:bar" prefix="pre" ) Characters( whitespace text=" " ) EndElement( name="body" qualifiedName="body" ) diff --git a/tests/auto/corelib/serialization/qxmlstream/qxmlstream.pro b/tests/auto/corelib/serialization/qxmlstream/qxmlstream.pro index 0a739f0a..f8043367 100644 --- a/tests/auto/corelib/serialization/qxmlstream/qxmlstream.pro +++ b/tests/auto/corelib/serialization/qxmlstream/qxmlstream.pro @@ -1,6 +1,6 @@ CONFIG += testcase TARGET = tst_qxmlstream -QT = core xml network testlib +QT = core xml network gui-private testlib SOURCES = tst_qxmlstream.cpp TESTDATA += data XML-Test-Suite diff --git a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp index 28922574..533fcd96 100644 --- a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp +++ b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp @@ -36,6 +36,9 @@ #include #include #include +#include +#include +#include #include "qc14n.h" @@ -44,6 +47,10 @@ Q_DECLARE_METATYPE(QXmlStreamReader::ReadElementTextBehaviour) static const char *const catalogFile = "XML-Test-Suite/xmlconf/finalCatalog.xml"; static const int expectedRunCount = 1646; static const int expectedSkipCount = 532; +static const char *const xmlconfDir = "XML-Test-Suite/xmlconf/"; +static const char *const xmlDatasetName = "xmltest"; +static const char *const updateFilesDir = "xmltest_updates"; +static const char *const destinationFolder = "/valid/sa/out/"; static inline int best(int a, int b) { @@ -591,6 +598,27 @@ private: void tst_QXmlStream::initTestCase() { +#ifdef Q_OS_WINRT + QSKIP("Skipping the tests because we cannot unzip the data archive from WinRT app"); +#endif + // Due to license restrictions, we need to distribute part of the test + // suit as a zip archive. So we need to unzip it before running the tests, + // and also update some files there. + // We also need to remove the unzipped data during cleanup. + const QString filesDir(QFINDTESTDATA(xmlconfDir)); + QZipReader reader(filesDir + xmlDatasetName + ".zip"); + QVERIFY(reader.isReadable()); + QVERIFY(reader.extractAll(filesDir)); + // update files + const auto files = + QDir(filesDir + updateFilesDir).entryInfoList(QDir::Files | QDir::NoDotAndDotDot); + for (const auto &fileInfo : files) { + const QString destinationPath = + filesDir + xmlDatasetName + destinationFolder + fileInfo.fileName(); + QFile::remove(destinationPath); // copy will fail if file exists + QVERIFY(QFile::copy(fileInfo.filePath(), destinationPath)); + } + QFile file(QFINDTESTDATA(catalogFile)); QVERIFY2(file.open(QIODevice::ReadOnly), qPrintable(QString::fromLatin1("Failed to open the test suite catalog; %1").arg(file.fileName()))); @@ -600,6 +628,8 @@ void tst_QXmlStream::initTestCase() void tst_QXmlStream::cleanupTestCase() { + QDir d(QFINDTESTDATA(xmlconfDir) + xmlDatasetName); + d.removeRecursively(); QFile::remove(QLatin1String("test.xml")); } diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp index 33fcb156..84901f8f 100644 --- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. @@ -1778,7 +1778,8 @@ void tst_QLocale::toDateTime_data() QTest::addColumn("result"); QTest::addColumn("format"); QTest::addColumn("string"); - QTest::addColumn("clean"); // No non-format letters in format string + // No non-format letters in format string, no time-zone (t format): + QTest::addColumn("clean"); QTest::newRow("1C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(5, 14, 0)) << "d/M/yyyy hh:h:mm" << "1/12/1974 05:5:14" << true; @@ -1832,6 +1833,21 @@ void tst_QLocale::toDateTime_data() QTest::newRow("12no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(15, 0, 0)) << "d'd'dd/M/yyh" << "1d01/12/7415" << false; + QTest::newRow("short-ss") // QTBUG-102199: trips over an assert in CET + << "C" << QDateTime() // Single-digit seconds does not match ss format. + << QStringLiteral("ddd, d MMM yyyy HH:mm:ss") + << QStringLiteral("Sun, 29 Mar 2020 02:26:3") << true; + + QTest::newRow("short-ss-Z") // Same, but with a valid date-time: + << "C" << QDateTime() + << QStringLiteral("ddd, d MMM yyyy HH:mm:ss t") + << QStringLiteral("Sun, 29 Mar 2020 02:26:3 Z") << false; + + QTest::newRow("s-Z") // Same, but with a format that accepts the single digit: + << "C" << QDateTime(QDate(2020, 3, 29), QTime(2, 26, 3), Qt::UTC) + << QStringLiteral("ddd, d MMM yyyy HH:mm:s t") + << QStringLiteral("Sun, 29 Mar 2020 02:26:3 Z") << false; + QTest::newRow("RFC-1123") << "C" << QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30)) << "ddd, dd MMM yyyy hh:mm:ss 'GMT'" << "Thu, 01 Nov 2007 18:08:30 GMT" << false; diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index 696b8159..878988d4 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -1301,6 +1301,9 @@ void tst_QString::asprintfS() QCOMPARE(QString::asprintf("%-10.10s", "Hello" ), QLatin1String("Hello ")); QCOMPARE(QString::asprintf("%-10.3s", "Hello" ), QLatin1String("Hel ")); QCOMPARE(QString::asprintf("%-5.5s", "Hello" ), QLatin1String("Hello")); + QCOMPARE(QString::asprintf("%*s", 4, "Hello"), QLatin1String("Hello")); + QCOMPARE(QString::asprintf("%*s", 10, "Hello"), QLatin1String(" Hello")); + QCOMPARE(QString::asprintf("%-*s", 10, "Hello"), QLatin1String("Hello ")); // Check utf8 conversion for %s QCOMPARE(QString::asprintf("%s", "\303\266\303\244\303\274\303\226\303\204\303\234\303\270\303\246\303\245\303\230\303\206\303\205"), QString::fromLatin1("\366\344\374\326\304\334\370\346\345\330\306\305")); @@ -1320,6 +1323,9 @@ void tst_QString::asprintfS() QCOMPARE(QString::asprintf("%-10.10ls", qUtf16Printable("Hello")), QLatin1String("Hello ")); QCOMPARE(QString::asprintf("%-10.3ls", qUtf16Printable("Hello")), QLatin1String("Hel ")); QCOMPARE(QString::asprintf("%-5.5ls", qUtf16Printable("Hello")), QLatin1String("Hello")); + QCOMPARE(QString::asprintf("%*ls", 4, qUtf16Printable("Hello")), QLatin1String("Hello")); + QCOMPARE(QString::asprintf("%*ls", 10, qUtf16Printable("Hello")), QLatin1String(" Hello")); + QCOMPARE(QString::asprintf("%-*ls", 10, qUtf16Printable("Hello")), QLatin1String("Hello ")); // Check utf16 is preserved for %ls QCOMPARE(QString::asprintf("%ls", diff --git a/tests/auto/corelib/text/qstringlist/tst_qstringlist.cpp b/tests/auto/corelib/text/qstringlist/tst_qstringlist.cpp index 66d47444..a2dfbed9 100644 --- a/tests/auto/corelib/text/qstringlist/tst_qstringlist.cpp +++ b/tests/auto/corelib/text/qstringlist/tst_qstringlist.cpp @@ -523,6 +523,11 @@ void tst_QStringList::joinChar_data() const << QLatin1String("c")) << QChar(QLatin1Char(' ')) << QString("a b c"); + + QTest::newRow("null separator") + << QStringList{QStringLiteral("a"), QStringLiteral("b"), QStringLiteral("c")} + << QChar(u'\0') + << QStringLiteral("a\0b\0c"); } void tst_QStringList::joinEmptiness() const diff --git a/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp b/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp index 3538d908..c9120d75 100644 --- a/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp +++ b/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp @@ -309,7 +309,18 @@ void tst_QThreadStorage::crashOnExit() QSKIP("No qprocess support", SkipAll); #else QString errorMessage; - QVERIFY2(runCrashOnExit("crashOnExit_helper", &errorMessage), + + // Add the executable's directory to path so that we can find the test helper next to it + // in a cross-platform way. We must do this because the CWD is not pointing to this directory + // in debug-and-release builds. + QByteArray path = qgetenv("PATH"); + qputenv("PATH", + path + QDir::listSeparator().toLatin1() + + QCoreApplication::applicationDirPath().toLocal8Bit()); + auto restore = qScopeGuard([&] { qputenv("PATH", path); }); + + QString binary = QStringLiteral("crashOnExit_helper"); + QVERIFY2(runCrashOnExit(binary, &errorMessage), qPrintable(errorMessage)); #endif } diff --git a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp index d3afee96..b60d67fd 100644 --- a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp @@ -1098,6 +1098,18 @@ void tst_QDateTime::addDays() QCOMPARE(dt2.timeSpec(), Qt::OffsetFromUTC); QCOMPARE(dt2.offsetFromUtc(), 60 * 60); +#if QT_CONFIG(timezone) + const QTimeZone cet("Europe/Oslo"); + if (cet.isValid()) { + dt1 = QDate(2022, 1, 10).startOfDay(cet); + dt2 = dt1.addDays(2); // QTBUG-99668: should not assert + QCOMPARE(dt2.date(), QDate(2022, 1, 12)); + QCOMPARE(dt2.time(), QTime(0, 0)); + QCOMPARE(dt2.timeSpec(), Qt::TimeZone); + QCOMPARE(dt2.timeZone(), cet); + } +#endif + // ### test invalid QDateTime() } diff --git a/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp b/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp index a59b58d5..412f0923 100644 --- a/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp +++ b/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp @@ -31,6 +31,8 @@ #include #include +Q_DECLARE_METATYPE(QTimeZone::TimeType) + #if defined(Q_OS_WIN) && !QT_CONFIG(icu) # define USING_WIN_TZ #endif @@ -70,6 +72,8 @@ private slots: void macTest(); void darwinTypes(); void winTest(); + void localeSpecificDisplayName_data(); + void localeSpecificDisplayName(); private: void printTimeZone(const QTimeZone &tz); @@ -1366,6 +1370,55 @@ void tst_QTimeZone::winTest() #endif // QT_BUILD_INTERNAL && USING_WIN_TZ } +void tst_QTimeZone::localeSpecificDisplayName_data() +{ +#ifdef USING_WIN_TZ + QSKIP("MS backend does not use locale parameter"); +#endif + QTest::addColumn("zoneName"); + QTest::addColumn("locale"); + QTest::addColumn("timeType"); + QTest::addColumn("expectedName"); + + QStringList names; + QLocale locale; + // Pick a non-system locale; German or French + if (QLocale::system().language() != QLocale::German) { + locale = QLocale(QLocale::German); + names << QString("Mitteleurop\u00e4ische Normalzeit") + << QString("Mitteleurop\u00e4ische Sommerzeit"); + } else { + locale = QLocale(QLocale::French); + names << QString("heure normale d\u2019Europe centrale") + << QString("heure d\u2019\u00E9t\u00E9 d\u2019Europe centrale"); + } + + qsizetype index = 0; + QTest::newRow("Berlin, standard time") + << QByteArray("Europe/Berlin") << locale << QTimeZone::StandardTime + << names.at(index++); + + QTest::newRow("Berlin, summer time") + << QByteArray("Europe/Berlin") << locale << QTimeZone::DaylightTime + << names.at(index++); +} + +void tst_QTimeZone::localeSpecificDisplayName() +{ + // This test checks that QTimeZone::displayName() correctly uses the + // specified locale, NOT the system locale (see QTBUG-101460). + QFETCH(QByteArray, zoneName); + QFETCH(QLocale, locale); + QFETCH(QTimeZone::TimeType, timeType); + QFETCH(QString, expectedName); + + QTimeZone zone(zoneName); + QVERIFY(zone.isValid()); + + const QString localeName = zone.displayName(timeType, QTimeZone::LongName, locale); + QCOMPARE(localeName, expectedName); +} + #ifdef QT_BUILD_INTERNAL // Test each private produces the same basic results for CET void tst_QTimeZone::testCetPrivate(const QTimeZonePrivate &tzp) diff --git a/tests/auto/dbus/qdbusconnection/BLACKLIST b/tests/auto/dbus/qdbusconnection/BLACKLIST new file mode 100644 index 00000000..19d302d0 --- /dev/null +++ b/tests/auto/dbus/qdbusconnection/BLACKLIST @@ -0,0 +1,4 @@ +# See qtbase/src/testlib/qtestblacklist.cpp for format +#QTBUG-101636 +[registerObjectPeer2] +ubuntu-20 diff --git a/tests/auto/gui/kernel/qbackingstore/tst_qbackingstore.cpp b/tests/auto/gui/kernel/qbackingstore/tst_qbackingstore.cpp index fb4f80f0..ac312381 100644 --- a/tests/auto/gui/kernel/qbackingstore/tst_qbackingstore.cpp +++ b/tests/auto/gui/kernel/qbackingstore/tst_qbackingstore.cpp @@ -43,8 +43,47 @@ class tst_QBackingStore : public QObject private slots: void flush(); + + void scrollRectInImage_data(); + void scrollRectInImage(); }; +void tst_QBackingStore::scrollRectInImage_data() +{ + QTest::addColumn("rect"); + QTest::addColumn("offset"); + + QTest::newRow("empty rect") << QRect() << QPoint(); + QTest::newRow("rect outside image") << QRect(-100, -100, 1000, 1000) << QPoint(10, 10); + QTest::newRow("scroll outside positive") << QRect(10, 10, 10, 10) << QPoint(1000, 1000); + QTest::newRow("scroll outside negative") << QRect(10, 10, 10, 10) << QPoint(-1000, -1000); + + QTest::newRow("sub-rect positive scroll") << QRect(100, 100, 50, 50) << QPoint(10, 10); + QTest::newRow("sub-rect negative scroll") << QRect(100, 100, 50, 50) << QPoint(-10, -10); + + QTest::newRow("positive vertical only") << QRect(100, 100, 50, 50) << QPoint(0, 10); + QTest::newRow("negative vertical only") << QRect(100, 100, 50, 50) << QPoint(0, -10); + QTest::newRow("positive horizontal only") << QRect(100, 100, 50, 50) << QPoint(10, 0); + QTest::newRow("negative horizontal only") << QRect(100, 100, 50, 50) << QPoint(-10, 0); + + QTest::newRow("whole rect positive") << QRect(0, 0, 250, 250) << QPoint(10, 10); + QTest::newRow("whole rect negative") << QRect(0, 0, 250, 250) << QPoint(-10, -10); +} + +QT_BEGIN_NAMESPACE +Q_GUI_EXPORT void qt_scrollRectInImage(QImage &, const QRect &, const QPoint &); +QT_END_NAMESPACE + +void tst_QBackingStore::scrollRectInImage() +{ + QImage test(250, 250, QImage::Format_ARGB32_Premultiplied); + + QFETCH(QRect, rect); + QFETCH(QPoint, offset); + + qt_scrollRectInImage(test, rect, offset); +} + class Window : public QWindow { public: diff --git a/tests/auto/gui/qvulkan/tst_qvulkan.cpp b/tests/auto/gui/qvulkan/tst_qvulkan.cpp index c80c3fed..3315ae52 100644 --- a/tests/auto/gui/qvulkan/tst_qvulkan.cpp +++ b/tests/auto/gui/qvulkan/tst_qvulkan.cpp @@ -153,8 +153,15 @@ void tst_QVulkan::vulkanVersionRequest() inst.destroy(); inst.setApiVersion(QVersionNumber(10, 0, 0)); - QVERIFY(!inst.create()); - QCOMPARE(inst.errorCode(), VK_ERROR_INCOMPATIBLE_DRIVER); + + bool result = inst.create(); + + // Starting with Vulkan 1.1 the spec does not allow the implementation to + // fail the instance creation. So check for the 1.0 behavior only when + // create() failed, skip this verification with 1.1+ (where create() will + // succeed for any bogus api version). + if (!result) + QCOMPARE(inst.errorCode(), VK_ERROR_INCOMPATIBLE_DRIVER); } static void waitForUnexposed(QWindow *w) diff --git a/tests/auto/gui/text/qfont/BLACKLIST b/tests/auto/gui/text/qfont/BLACKLIST new file mode 100644 index 00000000..55a810c7 --- /dev/null +++ b/tests/auto/gui/text/qfont/BLACKLIST @@ -0,0 +1,6 @@ +[defaultFamily:cursive] +rhel-8.4 +ubuntu-20.04 +[defaultFamily:fantasy] +rhel-8.4 +ubuntu-20.04 diff --git a/tests/auto/gui/text/qglyphrun/BLACKLIST b/tests/auto/gui/text/qglyphrun/BLACKLIST index 57f32c68..bc10b395 100644 --- a/tests/auto/gui/text/qglyphrun/BLACKLIST +++ b/tests/auto/gui/text/qglyphrun/BLACKLIST @@ -1,3 +1,4 @@ [mixedScripts] ubuntu-18.04 +ubuntu-20.04 b2qt diff --git a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp index a61824b5..de128623 100644 --- a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp @@ -200,6 +200,9 @@ private slots: void contentsChangeIndices_data(); void contentsChangeIndices(); + void insertHtmlWithComments_data(); + void insertHtmlWithComments(); + private: void backgroundImage_checkExpectedHtml(const QTextDocument &doc); void buildRegExpData(); @@ -3775,6 +3778,44 @@ void tst_QTextDocument::contentsChangeIndices() QCOMPARE(changeAdded - changeRemoved, 1); } +void tst_QTextDocument::insertHtmlWithComments_data() +{ + QTest::addColumn("html"); + QTest::addColumn("expectedBlocks"); + + QTest::newRow("commentless") << "

first

second

third

" + << QStringList { "first", "second", "third" }; + QTest::newRow("normal") << "

first

third

" + << QStringList { "first", "third" }; + QTest::newRow("nonClosing") << "

first

second

third

" + << QStringList { "first", "second", "third" }; + QTest::newRow("fake") << "

first

second

third

" + << QStringList { "first", "second", "third" }; + QTest::newRow("endingNonExistant") << "

first

-->

second

third

" + << QStringList { "first", "-->", "second", "third" }; +} + +void tst_QTextDocument::insertHtmlWithComments() +{ + QFETCH(QString, html); + QFETCH(QStringList, expectedBlocks); + + QTextDocument doc; + doc.setHtml(html); + + QCOMPARE(doc.blockCount(), expectedBlocks.count()); + + QStringList blockContent; + auto currentBlock = doc.begin(); + while (currentBlock != doc.end()) { + blockContent.append(currentBlock.text()); + currentBlock = currentBlock.next(); + } + + QCOMPARE(blockContent, expectedBlocks); +} QTEST_MAIN(tst_QTextDocument) #include "tst_qtextdocument.moc" diff --git a/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp b/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp index 78cc1da3..2737feba 100644 --- a/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp +++ b/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp @@ -73,6 +73,7 @@ public: Mono = 0x08, Link = 0x10 }; + Q_ENUM(CharFormat) Q_DECLARE_FLAGS(CharFormats, CharFormat) }; @@ -207,6 +208,9 @@ void tst_QTextMarkdownImporter::lists_data() QTest::newRow("numeric lists nested in empty lists") << "- \n 1. a\n 2. b\n- c\n 1.\n + d\n" << 4 << false << "- \n 1. a\n 2. b\n- c 1. + d\n"; + QTest::newRow("styled spans in list items") + << "1. normal text\n2. **bold** text\n3. `code` in the item\n4. *italic* text\n5. _underlined_ text\n" << 5 << false + << "1. normal text\n2. **bold** text\n3. `code` in the item\n4. *italic* text\n5. *underlined* text\n"; } void tst_QTextMarkdownImporter::lists() @@ -218,11 +222,22 @@ void tst_QTextMarkdownImporter::lists() QTextDocument doc; doc.setMarkdown(input); // QTBUG-78870 : don't crash + +#ifdef DEBUG_WRITE_HTML + { + QFile out("/tmp/" + QLatin1String(QTest::currentDataTag()) + ".html"); + out.open(QFile::WriteOnly); + out.write(doc.toHtml().toLatin1()); + out.close(); + } +#endif + QTextFrame::iterator iterator = doc.rootFrame()->begin(); QTextFrame *currentFrame = iterator.currentFrame(); int i = 0; int itemCount = 0; bool emptyItems = true; + QString firstItemFontFamily; while (!iterator.atEnd()) { // There are no child frames QCOMPARE(iterator.currentFrame(), currentFrame); @@ -235,6 +250,21 @@ void tst_QTextMarkdownImporter::lists() } qCDebug(lcTests, "%d %s%s", i, (block.textList() ? "
  • " : "

    "), qPrintable(block.text())); + QTextCharFormat listItemFmt = block.charFormat(); + QFont listItemFont = listItemFmt.font(); + // QTextDocumentLayoutPrivate::drawListItem() uses listItemFont to render numbers in an ordered list. + // We want that to be consistent, regardless whether the list item's text begins with a styled span. + if (firstItemFontFamily.isEmpty()) + firstItemFontFamily = listItemFont.family(); + else + QCOMPARE(listItemFont.family(), firstItemFontFamily); + QCOMPARE(listItemFont.bold(), false); + QCOMPARE(listItemFont.italic(), false); + QCOMPARE(listItemFont.underline(), false); + QCOMPARE(listItemFont.fixedPitch(), false); + QCOMPARE(listItemFmt.fontItalic(), false); + QCOMPARE(listItemFmt.fontUnderline(), false); + QCOMPARE(listItemFmt.fontFixedPitch(), false); ++iterator; ++i; } @@ -324,12 +354,14 @@ void tst_QTextMarkdownImporter::nestedSpans() << "weight" << fmt.fontWeight() << "italic" << fmt.fontItalic() << "strikeout" << fmt.fontStrikeOut() << "anchor" << fmt.isAnchor() << "monospace" << QFontInfo(fmt.font()).fixedPitch() // depends on installed fonts (QTBUG-75649) - << fmt.fontFixedPitch() // returns false even when font family is "monospace" - << fmt.hasProperty(QTextFormat::FontFixedPitch); // works - QCOMPARE(fmt.fontWeight() > 50, expectedFormat.testFlag(Bold)); + << fmt.fontFixedPitch() + << fmt.hasProperty(QTextFormat::FontFixedPitch) + << "expected" << expectedFormat; + QCOMPARE(fmt.fontWeight() > QFont::Normal, expectedFormat.testFlag(Bold)); QCOMPARE(fmt.fontItalic(), expectedFormat.testFlag(Italic)); QCOMPARE(fmt.fontStrikeOut(), expectedFormat.testFlag(Strikeout)); QCOMPARE(fmt.isAnchor(), expectedFormat.testFlag(Link)); + QCOMPARE(fmt.fontFixedPitch(), expectedFormat.testFlag(Mono)); QCOMPARE(fmt.hasProperty(QTextFormat::FontFixedPitch), expectedFormat.testFlag(Mono)); ++iterator; } diff --git a/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp b/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp index 13449299..b60b07ea 100644 --- a/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp +++ b/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp @@ -51,6 +51,7 @@ private slots: void testWriteParagraph(); void testWriteList(); void testWriteEmptyList(); + void testWriteCheckboxListItemEndingWithCode(); void testWriteNestedBulletLists_data(); void testWriteNestedBulletLists(); void testWriteNestedNumericLists(); @@ -133,6 +134,34 @@ void tst_QTextMarkdownWriter::testWriteEmptyList() QCOMPARE(documentToUnixMarkdown(), QString::fromLatin1("- \n")); } +void tst_QTextMarkdownWriter::testWriteCheckboxListItemEndingWithCode() +{ + QTextCursor cursor(document); + QTextList *list = cursor.createList(QTextListFormat::ListDisc); + cursor.insertText("Image.originalSize property (not necessary; PdfDocument.pagePointSize() substitutes)"); + list->add(cursor.block()); + { + auto fmt = cursor.block().blockFormat(); + fmt.setMarker(QTextBlockFormat::MarkerType::Unchecked); + cursor.setBlockFormat(fmt); + } + cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::MoveAnchor, 2); + cursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor); + cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::KeepAnchor, 4); + QCOMPARE(cursor.selectedText(), QString::fromLatin1("PdfDocument.pagePointSize()")); + auto fmt = cursor.charFormat(); + fmt.setFontFixedPitch(true); + cursor.setCharFormat(fmt); + cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::MoveAnchor, 5); + cursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor); + cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::KeepAnchor, 4); + QCOMPARE(cursor.selectedText(), QString::fromLatin1("Image.originalSize")); + cursor.setCharFormat(fmt); + + QCOMPARE(documentToUnixMarkdown(), QString::fromLatin1( + "- [ ] `Image.originalSize` property (not necessary; `PdfDocument.pagePointSize()`\n substitutes)\n")); +} + void tst_QTextMarkdownWriter::testWriteNestedBulletLists_data() { QTest::addColumn("checkbox"); diff --git a/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp b/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp index 4d95345d..a53524e9 100644 --- a/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp +++ b/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp @@ -69,6 +69,10 @@ public slots: } }; +#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0) +# define CAN_IMPLICITLY_UNSET +#endif + void tst_qdesktopservices::handlers() { MyUrlHandler fooHandler; @@ -76,6 +80,12 @@ void tst_qdesktopservices::handlers() QDesktopServices::setUrlHandler(QString("foo"), &fooHandler, "handle"); QDesktopServices::setUrlHandler(QString("bar"), &barHandler, "handle"); +#ifndef CAN_IMPLICITLY_UNSET + const auto unsetHandlers = qScopeGuard([] { + QDesktopServices::unsetUrlHandler(u"bar"_qs); + QDesktopServices::unsetUrlHandler(u"foo"_qs); + }); +#endif QUrl fooUrl("foo://blub/meh"); QUrl barUrl("bar://hmm/hmmmm"); @@ -85,6 +95,15 @@ void tst_qdesktopservices::handlers() QCOMPARE(fooHandler.lastHandledUrl.toString(), fooUrl.toString()); QCOMPARE(barHandler.lastHandledUrl.toString(), barUrl.toString()); + +#ifdef CAN_IMPLICITLY_UNSET + for (int i = 0; i < 2; ++i) + QTest::ignoreMessage(QtWarningMsg, + "Please call QDesktopServices::unsetUrlHandler() before destroying a " + "registered URL handler object.\n" + "Support for destroying a registered URL handler object is deprecated, " + "and will be removed in Qt 6.6."); +#endif } #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) diff --git a/tests/auto/network/access/http2/certs/fluke.cert b/tests/auto/network/access/http2/certs/fluke.cert index ace4e4f0..4cc4d9a5 100644 --- a/tests/auto/network/access/http2/certs/fluke.cert +++ b/tests/auto/network/access/http2/certs/fluke.cert @@ -1,75 +1,34 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 0 (0x0) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=NO, ST=Oslo, L=Nydalen, O=Nokia Corporation and/or its subsidiary(-ies), OU=Development, CN=fluke.troll.no/emailAddress=ahanssen@trolltech.com - Validity - Not Before: Dec 4 01:10:32 2007 GMT - Not After : Apr 21 01:10:32 2035 GMT - Subject: C=NO, ST=Oslo, O=Nokia Corporation and/or its subsidiary(-ies), OU=Development, CN=fluke.troll.no - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - RSA Public Key: (1024 bit) - Modulus (1024 bit): - 00:a7:c8:a0:4a:c4:19:05:1b:66:ba:32:e2:d2:f1: - 1c:6f:17:82:e4:39:2e:01:51:90:db:04:34:32:11: - 21:c2:0d:6f:59:d8:53:90:54:3f:83:8f:a9:d3:b3: - d5:ee:1a:9b:80:ae:c3:25:c9:5e:a5:af:4b:60:05: - aa:a0:d1:91:01:1f:ca:04:83:e3:58:1c:99:32:45: - 84:70:72:58:03:98:4a:63:8b:41:f5:08:49:d2:91: - 02:60:6b:e4:64:fe:dd:a0:aa:74:08:e9:34:4c:91: - 5f:12:3d:37:4d:54:2c:ad:7f:5b:98:60:36:02:8c: - 3b:f6:45:f3:27:6a:9b:94:9d - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 21:85:04:3D:23:01:66:E5:F7:9F:1A:84:24:8A:AF:0A:79:F4:E5:AC - X509v3 Authority Key Identifier: - DirName:/C=NO/ST=Oslo/L=Nydalen/O=Nokia Corporation and/or its subsidiary(-ies)/OU=Development/CN=fluke.troll.no/emailAddress=ahanssen@trolltech.com - serial:8E:A8:B4:E8:91:B7:54:2E - - Signature Algorithm: sha1WithRSAEncryption - 6d:57:5f:d1:05:43:f0:62:05:ec:2a:71:a5:dc:19:08:f2:c4: - a6:bd:bb:25:d9:ca:89:01:0e:e4:cf:1f:c1:8c:c8:24:18:35: - 53:59:7b:c0:43:b4:32:e6:98:b2:a6:ef:15:05:0b:48:5f:e1: - a0:0c:97:a9:a1:77:d8:35:18:30:bc:a9:8f:d3:b7:54:c7:f1: - a9:9e:5d:e6:19:bf:f6:3c:5b:2b:d8:e4:3e:62:18:88:8b:d3: - 24:e1:40:9b:0c:e6:29:16:62:ab:ea:05:24:70:36:aa:55:93: - ef:02:81:1b:23:10:a2:04:eb:56:95:75:fc:f8:94:b1:5d:42: - c5:3f:36:44:85:5d:3a:2e:90:46:8a:a2:b9:6f:87:ae:0c:15: - 40:19:31:90:fc:3b:25:bb:ae:f1:66:13:0d:85:90:d9:49:34: - 8f:f2:5d:f9:7a:db:4d:5d:27:f6:76:9d:35:8c:06:a6:4c:a3: - b1:b2:b6:6f:1d:d7:a3:00:fd:72:eb:9e:ea:44:a1:af:21:34: - 7d:c7:42:e2:49:91:19:8b:c0:ad:ba:82:80:a8:71:70:f4:35: - 31:91:63:84:20:95:e9:60:af:64:8b:cc:ff:3d:8a:76:74:3d: - c8:55:6d:e4:8e:c3:2b:1c:e8:42:18:ae:9f:e6:6b:9c:34:06: - ec:6a:f2:c3 -----BEGIN CERTIFICATE----- -MIIEEzCCAvugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBnDELMAkGA1UEBhMCTk8x -DTALBgNVBAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xs -dGVjaCBBU0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50 -cm9sbC5ubzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbTAe -Fw0wNzEyMDQwMTEwMzJaFw0zNTA0MjEwMTEwMzJaMGMxCzAJBgNVBAYTAk5PMQ0w -CwYDVQQIEwRPc2xvMRYwFAYDVQQKEw1Ucm9sbHRlY2ggQVNBMRQwEgYDVQQLEwtE -ZXZlbG9wbWVudDEXMBUGA1UEAxMOZmx1a2UudHJvbGwubm8wgZ8wDQYJKoZIhvcN -AQEBBQADgY0AMIGJAoGBAKfIoErEGQUbZroy4tLxHG8XguQ5LgFRkNsENDIRIcIN -b1nYU5BUP4OPqdOz1e4am4CuwyXJXqWvS2AFqqDRkQEfygSD41gcmTJFhHByWAOY -SmOLQfUISdKRAmBr5GT+3aCqdAjpNEyRXxI9N01ULK1/W5hgNgKMO/ZF8ydqm5Sd -AgMBAAGjggEaMIIBFjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NM -IEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUIYUEPSMBZuX3nxqEJIqv -Cnn05awwgbsGA1UdIwSBszCBsKGBoqSBnzCBnDELMAkGA1UEBhMCTk8xDTALBgNV -BAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xsdGVjaCBB -U0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50cm9sbC5u -bzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbYIJAI6otOiR -t1QuMA0GCSqGSIb3DQEBBQUAA4IBAQBtV1/RBUPwYgXsKnGl3BkI8sSmvbsl2cqJ -AQ7kzx/BjMgkGDVTWXvAQ7Qy5piypu8VBQtIX+GgDJepoXfYNRgwvKmP07dUx/Gp -nl3mGb/2PFsr2OQ+YhiIi9Mk4UCbDOYpFmKr6gUkcDaqVZPvAoEbIxCiBOtWlXX8 -+JSxXULFPzZEhV06LpBGiqK5b4euDBVAGTGQ/Dslu67xZhMNhZDZSTSP8l35ettN -XSf2dp01jAamTKOxsrZvHdejAP1y657qRKGvITR9x0LiSZEZi8CtuoKAqHFw9DUx -kWOEIJXpYK9ki8z/PYp2dD3IVW3kjsMrHOhCGK6f5mucNAbsavLD +MIIF6zCCA9OgAwIBAgIUfo9amJtJGWqWE6f+SkAO85zkGr4wDQYJKoZIhvcNAQEL +BQAwgYMxCzAJBgNVBAYTAk5PMQ0wCwYDVQQIDARPc2xvMQ0wCwYDVQQHDARPc2xv +MRcwFQYDVQQKDA5UaGUgUXQgQ29tcGFueTEMMAoGA1UECwwDUiZEMRIwEAYDVQQD +DAlIMiBUZXN0ZXIxGzAZBgkqhkiG9w0BCQEWDG1pbmltaUBxdC5pbzAgFw0yMDEw +MjYxMjAxMzFaGA8yMTIwMTAwMjEyMDEzMVowgYMxCzAJBgNVBAYTAk5PMQ0wCwYD +VQQIDARPc2xvMQ0wCwYDVQQHDARPc2xvMRcwFQYDVQQKDA5UaGUgUXQgQ29tcGFu +eTEMMAoGA1UECwwDUiZEMRIwEAYDVQQDDAlIMiBUZXN0ZXIxGzAZBgkqhkiG9w0B +CQEWDG1pbmltaUBxdC5pbzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AOiUp5+E4blouKH7q+rVNR8NoYX2XkBW+q+rpy1zu5ssRSzbqxAjDx9dkht7Qlnf +VlDT00JvpOWdeuPon5915edQRsY4Unl6mKH29ra3OtUa1/yCJXsGVJTKCj7k4Bxb +5mZzb/fTlZntMLdTIBMfUbw62FKir1WjKIcJ9fCoG8JaGeKVO4Rh5p0ezd4UUUId +r1BXl5Nqdqy2vTMsEDnjOsD3egkv8I2SKN4O6n/C3wWYpMOWYZkGoZiKz7rJs/i/ +ez7bsV7JlwdzTlhpJzkcOSVFBP6JlEOxTNNxZ1wtKy7PtZGmsSSATq2e6+bw38Ae +Op0XnzzqcGjtDDofBmT7OFzZWjS9VZS6+DOOe2QHWle1nCHcHyH4ku6IRlsr9xkR +NAIlOfnvHHxqJUenoeaZ4oQDjCBKS1KXygJO/tL7BLTQVn/xK1EmPvKNnjzWk4tR +PnibUhhs5635qpOU/YPqFBh1JjVruZbsWcDAhRcew0uxONXOa9E+4lttQ9ySYa1A +LvWqJuAX7gu2BsBMLyqfm811YnA7CIFMyO+HlqmkLFfv5L/xIRAXR7l26YGO0VwX +CGjMfz4NVPMMke4nB7qa9NkpXQBQKMms3Qzd5JW0Hy9Ruj5O8GPcFZmV0twjd1uJ +PD/cAjkWLaXjdNsJ16QWc2nghQRS6HYqKRX6j+CXOxupAgMBAAGjUzBRMB0GA1Ud +DgQWBBRSCOU58j9NJZkMamt623qyCrhN3TAfBgNVHSMEGDAWgBRSCOU58j9NJZkM +amt623qyCrhN3TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCq +q4jxsWeNDv5Nq14hJtF9HB+ZL64zcZtRjJP1YgNs0QppKICmjPOL2nIMGmI/jKrs +0eGAL/9XXNVHPxm1OPOncvimMMmU6emZfpMdEtTfKP43+Pg9HgKRjLoQp406vGeQ +8ki/mbBhrItVPgEm3tu2AFA02XTYi+YxCI9kRZLGkM3FbgtOuTLPl0Z9y+kiPc9F +uCSC03anBEqv+vDSI8+wODymQ/IJ3Jyz1lxIRDfp4qAekmy0jU2c91VOHHEmOmqq +kqygGFRdwbe99m9yP63r6q0b5K3X2UnJ6bns0hmTwThYwpVPXLU8jdaTddbMukN2 +/Ef96Tsw8nWOEOPMySHOTIPgwyZRp26b0kA9EmhLwOP401SxXVQCmSRmtwNagmtg +jJKmZoYBN+//D45ibK8z6Q0oOm9P+Whf/uUXehcRxBxyV3xz7k0wKGQbHj/ddwcy +IUoIN4lrAlib+lK170kTKN352PDmrpo2gmIzPEsfurKAIMSelDl6H+kih16BtZ8y +Nz6fh9Soqrg3OSAware8pxV7k51crBMoPLN78KoRV8MFCK4K7Fddq4rRISq6hiXq +r1nsjoEPuKM9huprmZVZe9t5YcDa2I+wb3IiE3uwpZbAdaLDyQ5n6F/qpsiIkZXn +gtcF7oqpG5oYrwCcZ53y/ezUgUg7PlSz2XwAGvQtgg== -----END CERTIFICATE----- diff --git a/tests/auto/network/access/http2/certs/fluke.key b/tests/auto/network/access/http2/certs/fluke.key index 9d1664d6..337ce541 100644 --- a/tests/auto/network/access/http2/certs/fluke.key +++ b/tests/auto/network/access/http2/certs/fluke.key @@ -1,15 +1,52 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXAIBAAKBgQCnyKBKxBkFG2a6MuLS8RxvF4LkOS4BUZDbBDQyESHCDW9Z2FOQ -VD+Dj6nTs9XuGpuArsMlyV6lr0tgBaqg0ZEBH8oEg+NYHJkyRYRwclgDmEpji0H1 -CEnSkQJga+Rk/t2gqnQI6TRMkV8SPTdNVCytf1uYYDYCjDv2RfMnapuUnQIDAQAB -AoGANFzLkanTeSGNFM0uttBipFT9F4a00dqHz6JnO7zXAT26I5r8sU1pqQBb6uLz -/+Qz5Zwk8RUAQcsMRgJetuPQUb0JZjF6Duv24hNazqXBCu7AZzUenjafwmKC/8ri -KpX3fTwqzfzi//FKGgbXQ80yykSSliDL3kn/drATxsLCgQECQQDXhEFWLJ0vVZ1s -1Ekf+3NITE+DR16X+LQ4W6vyEHAjTbaNWtcTKdAWLA2l6N4WAAPYSi6awm+zMxx4 -VomVTsjdAkEAx0z+e7natLeFcrrq8pbU+wa6SAP1VfhQWKitxL1e7u/QO90NCpxE -oQYKzMkmmpOOFjQwEMAy1dvFMbm4LHlewQJAC/ksDBaUcQHHqjktCtrUb8rVjAyW -A8lscckeB2fEYyG5J6dJVaY4ClNOOs5yMDS2Afk1F6H/xKvtQ/5CzInA/QJATDub -K+BPU8jO9q+gpuIi3VIZdupssVGmCgObVCHLakG4uO04y9IyPhV9lA9tALtoIf4c -VIvv5fWGXBrZ48kZAQJBAJmVCdzQxd9LZI5vxijUCj5EI4e+x5DRqVUvyP8KCZrC -AiNyoDP85T+hBZaSXK3aYGpVwelyj3bvo1GrTNwNWLw= ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDolKefhOG5aLih ++6vq1TUfDaGF9l5AVvqvq6ctc7ubLEUs26sQIw8fXZIbe0JZ31ZQ09NCb6TlnXrj +6J+fdeXnUEbGOFJ5epih9va2tzrVGtf8giV7BlSUygo+5OAcW+Zmc2/305WZ7TC3 +UyATH1G8OthSoq9VoyiHCfXwqBvCWhnilTuEYeadHs3eFFFCHa9QV5eTanastr0z +LBA54zrA93oJL/CNkijeDup/wt8FmKTDlmGZBqGYis+6ybP4v3s+27FeyZcHc05Y +aSc5HDklRQT+iZRDsUzTcWdcLSsuz7WRprEkgE6tnuvm8N/AHjqdF5886nBo7Qw6 +HwZk+zhc2Vo0vVWUuvgzjntkB1pXtZwh3B8h+JLuiEZbK/cZETQCJTn57xx8aiVH +p6HmmeKEA4wgSktSl8oCTv7S+wS00FZ/8StRJj7yjZ481pOLUT54m1IYbOet+aqT +lP2D6hQYdSY1a7mW7FnAwIUXHsNLsTjVzmvRPuJbbUPckmGtQC71qibgF+4LtgbA +TC8qn5vNdWJwOwiBTMjvh5appCxX7+S/8SEQF0e5dumBjtFcFwhozH8+DVTzDJHu +Jwe6mvTZKV0AUCjJrN0M3eSVtB8vUbo+TvBj3BWZldLcI3dbiTw/3AI5Fi2l43Tb +CdekFnNp4IUEUuh2KikV+o/glzsbqQIDAQABAoICAFw1q6tr5I48vY7DF+rXsuLn +5ZUWE1IQ6fzB4lr72nJv/9EEGnMgYzt9PpMUsD6vdCpBgS2C0+6RHArFzJtNA+RM +iHLIG7K7702veyr/xBx/MwiSlMeMv/XpkFxVI6E6skMGG2s3AMXxKvJTy5CpRx+I +eQFyLG+Ya1X2lgJes/q+/CpAHkOjCOpcLySQC5NZ74q734V7nSdmn+Zs3tYEh+O/ +eiuwTP/j5b38Te5vVTqDxTciJPmljmXLCwa0N100lWlbcpvw8qbqiTI2Jm3XCbUE +AzHjW9vmrF3cRS1fXxKFGShw3SRqlkbxjfeWoi8qDPUBS4m8LOr8qG9Wo5Nfon0z +zLP4bci3zHDvVcaaZrrsUBs/yZbg+Dgka1DmX7ekmeccr2yTdKDFgPupYUyxVbTl +a9ZLJysjFD7rgBv1ZclHonLp6Vbm+ZoTqvteo4ikAy6L9RtBWJ23XEK34PkP/+c5 +2vWZaOrnjSeBHbFce8cdJSxqWpP+eSCI5I9XbDrYFIsQ/gqKgtzDKy2ihJ2Y8STL +yO4hyFPFjxc+Gg4/P2PpmT5CY2ty44M0BWs+JGW96CJPrrplf2lmQUQJj5LZY66X +Z/4C9L7ZYtKZ+bs5SvU46yWugAvQZX22Xm9xLXWyVXRdx3bj+3M3fDnF9di/zdbh +CgLx7oWPNrXc7FCajnn9AoIBAQD5FMYwRpw9NWT9WDxQwx+cSI4Icbd88ByTW63S +LzeRwZA0J9/SfwO+aBRupzc9GkGXCiZcGMw3AGsCtig8yFlw8E5KnzN7KlftDMnM +9NUxxzlR8VwKyLnZfG7sDTl057ZlUujnqhmt/F8F7dIy7FVO1dE/8nngA+FYTCOG +UZdGjwyBDlDM0JJdUWGY3xslutcpCDN5mzSTKjy9drMvImAshRawxRF6WBpn7vr2 +nC6vciqfx1Mzx1vyk0Jm0ilaydDdLMADjt/iL4Nkr0BEs4k+UzQiKDwp8gu7abQ1 +eBfxd9Iar4htQa2I1Ewl6P01G/q+ZYwgHhJ9RVn4AxQXefILAoIBAQDvCouORdQX +C8wsyp7MwXlF/3NQeNN5/+B2mhbxrBOf7PmMCXLnkRWcjwJtzypWFqJ0sqai/2+0 +bqbMcjX5maT8stT2shl3zXe/Ejt2e3TBYpc1tyuses8Kb5BMU8hu6tTd3G2CMXpD +dT6DVemJZCTtwj9aBNIxSizvlgMolJnCpzhPnlfHSI6E+g3m/LTTo3HwbjMSw/Uq +irgjOpI2wSBB6LZPSgjvfcYPRyWUk16L4A5uSX0cADnovDFLa5/h0wJvN/OoCSQg +rLCXG5E18EyL5Wc58BCY1ZvxmjG3lQtgPxYu2Jwc36R/y/JKlxW5suER5ZNpbbD4 +uOyTt2VxMQ2bAoIBAQC5+MzRFqdo/AjfL5Y5JrbfVTzXCTDa09xCGd16ZU60QTWN ++4ed/r+o1sUKqUcRFB2MzEM/2DQBjQpZB/CbEWvWa1XJWXxypXbowveZU+QqOnmN +uQvj8WLyA3o+PNF9e9QvauwCrHpn8VpxbtPWuaYoKnUFreFZZQxHhPGxRBIS2JOZ +eDrT8ZaWnkCkh1AZp5smQ71LOprSlmKrg4jd1GjCVMxQR5N5KXbtyv0OTCZ/UFqK +2aRBsMPyJgkaBChkZPLRcKwc+/wlQRx1fHQb14DNTApMxoXFO7eOwqmOkpAt9iyl +SBIwoS0UUI5ab88+bBmXNvKcuFdNuQ4nowTJUn9pAoIBADMNkILBXSvS5DeIyuO2 +Sp1tkoZUV+5NfPY3sMDK3KIibaW/+t+EOBZo4L7tKQCb8vRzl21mmsfxfgRaPDbj +3r3tv9g0b4YLxxBy52pFscj/soXRai17SS7UZwA2QK+XzgDYbDcLNC6mIsTQG4Gx +dsWk3/zs3KuUSQaehmwrWK+fIUK38c1pLK8v7LoxrLkqxlHwZ04RthHw8KTthH7X +Pnl1J0LF8CSeOyfWLSuPUfkT0GEzptnNHpEbaHfQM6R6eaGhVJPF6AZme4y6YYgg +m2ihhSt1n0XVEWpHYWjxFy3mK2mz75unFC4LM+NEY2p2zuUQoCw7NjnY3QYrfCnx +rRMCggEAXeXsMSLFjjyuoL7iKbAxo52HD/P0fBoy58LyRcwfNVr0lvYan4pYEx+o +KijIh9K16PqXZXKMA9v003B+ulmF8bJ7SddCZ5NGvnFhUTDe4DdTKgp2RuwQ3Bsc +3skPIDbhVETyOLCtys34USHrq8U/0DlGY3eLRfxw9GnbKxSBGa/KEu/qQLPNUo50 +7xHZDg7GKeC3kqNJeqKM9rkp0VzIGkEnaD9127LeNDmERDfftxJzFoC/THvUBLfU +6Sus2ZYwRE8VFvKC30Q45t/c54X3IuhYvAuiCuTmyfE4ruyzyOwKzhUkeeLq1APX +g0veFbyfzlJ0q8qzD/iffqqIa2ZSmQ== +-----END PRIVATE KEY----- diff --git a/tests/auto/network/access/http2/http2srv.cpp b/tests/auto/network/access/http2/http2srv.cpp index e2f039e2..ab760dd2 100644 --- a/tests/auto/network/access/http2/http2srv.cpp +++ b/tests/auto/network/access/http2/http2srv.cpp @@ -125,6 +125,12 @@ void Http2Server::setAuthenticationHeader(const QByteArray &authentication) authenticationHeader = authentication; } +void Http2Server::setRedirect(const QByteArray &url, int count) +{ + redirectUrl = url; + redirectCount = count; +} + void Http2Server::emulateGOAWAY(int timeout) { Q_ASSERT(timeout >= 0); @@ -855,7 +861,10 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody) const QString url("%1://localhost:%2/"); header.push_back({"location", url.arg(isClearText() ? QStringLiteral("http") : QStringLiteral("https"), QString::number(targetPort)).toLatin1()}); - + } else if (redirectCount > 0) { // Not redirecting while reading, unlike above + --redirectCount; + header.push_back({":status", "308"}); + header.push_back({"location", redirectUrl}); } else if (!authenticationHeader.isEmpty() && !hasAuth) { header.push_back({ ":status", "401" }); header.push_back(HPack::HeaderField("www-authenticate", authenticationHeader)); diff --git a/tests/auto/network/access/http2/http2srv.h b/tests/auto/network/access/http2/http2srv.h index 013af86c..5f8c5aa7 100644 --- a/tests/auto/network/access/http2/http2srv.h +++ b/tests/auto/network/access/http2/http2srv.h @@ -88,6 +88,9 @@ public: void setResponseBody(const QByteArray &body); // No authentication data is generated for the method, the full header value must be set void setAuthenticationHeader(const QByteArray &authentication); + // Set the redirect URL and count. The server will return a redirect response with the url + // 'count' amount of times + void setRedirect(const QByteArray &redirectUrl, int count); void emulateGOAWAY(int timeout); void redirectOpenStream(quint16 targetPort); @@ -219,6 +222,9 @@ private: QAtomicInt interrupted; QByteArray authenticationHeader; + + QByteArray redirectUrl; + int redirectCount = 0; protected slots: void ignoreErrorSlot(); }; diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp index 0610d0a3..bf8c7799 100644 --- a/tests/auto/network/access/http2/tst_http2.cpp +++ b/tests/auto/network/access/http2/tst_http2.cpp @@ -115,6 +115,9 @@ private slots: void authenticationRequired_data(); void authenticationRequired(); + void redirect_data(); + void redirect(); + protected slots: // Slots to listen to our in-process server: void serverStarted(quint16 port); @@ -955,6 +958,72 @@ void tst_Http2::authenticationRequired() QTRY_VERIFY(serverGotSettingsACK); } +void tst_Http2::redirect_data() +{ + QTest::addColumn("maxRedirects"); + QTest::addColumn("redirectCount"); + QTest::addColumn("success"); + + QTest::addRow("1-redirects-none-allowed-failure") << 0 << 1 << false; + QTest::addRow("1-redirects-success") << 1 << 1 << true; + QTest::addRow("2-redirects-1-allowed-failure") << 1 << 2 << false; +} + +void tst_Http2::redirect() +{ + QFETCH(const int, maxRedirects); + QFETCH(const int, redirectCount); + QFETCH(const bool, success); + const QByteArray redirectUrl = "/b.html"; + + clearHTTP2State(); + serverPort = 0; + + ServerPtr targetServer(newServer(defaultServerSettings, defaultConnectionType())); + targetServer->setRedirect(redirectUrl, redirectCount); + + QMetaObject::invokeMethod(targetServer.data(), "startServer", Qt::QueuedConnection); + runEventLoop(); + + QVERIFY(serverPort != 0); + + nRequests = 1 + maxRedirects; + + auto originalUrl = requestUrl(defaultConnectionType()); + auto url = originalUrl; + url.setPath("/index.html"); + QNetworkRequest request(url); + request.setAttribute(QNetworkRequest::Http2AllowedAttribute, QVariant(true)); + request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); + request.setMaximumRedirectsAllowed(maxRedirects); + + QScopedPointer reply; + reply.reset(manager->get(request)); + + if (success) { + connect(reply.get(), &QNetworkReply::finished, this, &tst_Http2::replyFinished); + } else { + connect(reply.get(), &QNetworkReply::errorOccurred, this, + &tst_Http2::replyFinishedWithError); + } + + // Since we're using self-signed certificates, + // ignore SSL errors: + reply->ignoreSslErrors(); + + runEventLoop(); + STOP_ON_FAILURE + + if (success) { + QCOMPARE(reply->error(), QNetworkReply::NoError); + QCOMPARE(reply->url().toString(), + originalUrl.resolved(QString::fromLatin1(redirectUrl)).toString()); + } else if (maxRedirects < redirectCount) { + QCOMPARE(reply->error(), QNetworkReply::TooManyRedirectsError); + } + QTRY_VERIFY(serverGotSettingsACK); +} + void tst_Http2::serverStarted(quint16 port) { serverPort = port; diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 3d4a094c..278139f2 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -9279,9 +9279,16 @@ void tst_QNetworkReply::autoDeleteRepliesAttribute_data() { QTest::addColumn("destination"); - QTest::newRow("http") << QUrl("http://QInvalidDomain.qt/test"); - QTest::newRow("https") << QUrl("https://QInvalidDomain.qt/test"); - QTest::newRow("ftp") << QUrl("ftp://QInvalidDomain.qt/test"); + QUrl webServerUrl = QtNetworkSettings::httpServerIp().toString(); + webServerUrl.setPath("/notfound"); + webServerUrl.setScheme("http"); + QTest::newRow("http") << webServerUrl; + webServerUrl.setScheme("https"); + QTest::newRow("https") << webServerUrl; + QUrl ftpServerUrl = QtNetworkSettings::ftpServerName(); + ftpServerUrl.setScheme("ftp"); + ftpServerUrl.setPath("/test/notfound"); + QTest::newRow("ftp") << ftpServerUrl; QTest::newRow("file") << QUrl("file:///thisfolderdoesn'texist/probably.txt"); #ifdef Q_OS_WIN // Only supported on windows. diff --git a/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp b/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp index 6637be01..654dc159 100644 --- a/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp +++ b/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. @@ -26,9 +26,11 @@ ** ****************************************************************************/ - -#include +#include #include +#if QT_CONFIG(timezone) +# include +#endif #include #include @@ -236,12 +238,28 @@ void tst_QNetworkRequest::setHeader_data() << QVariant(QDate(2007, 11, 01)) << true << "Last-Modified" << "Thu, 01 Nov 2007 00:00:00 GMT"; - QTest::newRow("Last-Modified-DateTime") << QNetworkRequest::LastModifiedHeader - << QVariant(QDateTime(QDate(2007, 11, 01), - QTime(18, 8, 30), - Qt::UTC)) - << true << "Last-Modified" - << "Thu, 01 Nov 2007 18:08:30 GMT"; + QTest::newRow("Last-Modified-DateTime-UTC") + << QNetworkRequest::LastModifiedHeader + << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), Qt::UTC)) + << true << "Last-Modified" << "Thu, 01 Nov 2007 18:08:30 GMT"; + // QTBUG-80666: format dates correctly (as GMT) even if the date passed in isn't in UTC: + QTest::newRow("Last-Modified-DateTime-Local") + << QNetworkRequest::LastModifiedHeader + << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), Qt::UTC).toLocalTime()) + << true << "Last-Modified" << "Thu, 01 Nov 2007 18:08:30 GMT"; + QTest::newRow("Last-Modified-DateTime-Offset") + << QNetworkRequest::LastModifiedHeader + << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), Qt::UTC).toOffsetFromUtc(3600)) + << true << "Last-Modified" << "Thu, 01 Nov 2007 18:08:30 GMT"; +#if QT_CONFIG(timezone) + QTimeZone cet("Europe/Oslo"); + if (cet.isValid()) { + QTest::newRow("Last-Modified-DateTime-CET") + << QNetworkRequest::LastModifiedHeader + << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), Qt::UTC).toTimeZone(cet)) + << true << "Last-Modified" << "Thu, 01 Nov 2007 18:08:30 GMT"; + } +#endif QTest::newRow("If-Modified-Since-Date") << QNetworkRequest::IfModifiedSinceHeader << QVariant(QDate(2017, 7, 01)) diff --git a/tests/auto/network/socket/qsocks5socketengine/BLACKLIST b/tests/auto/network/socket/qsocks5socketengine/BLACKLIST index 930d4b1a..74a73fcb 100644 --- a/tests/auto/network/socket/qsocks5socketengine/BLACKLIST +++ b/tests/auto/network/socket/qsocks5socketengine/BLACKLIST @@ -2,6 +2,7 @@ * [passwordAuth] ubuntu-18.04 +ubuntu-20.04 # QTBUG-74162 [passwordAuth2] ubuntu diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp index e397e80f..0a58a5cf 100644 --- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp @@ -2093,31 +2093,50 @@ void tst_QTcpSocket::nestedEventLoopInErrorSlot() void tst_QTcpSocket::connectToHostError_data() { QTest::addColumn("host"); - QTest::addColumn("port"); + QTest::addColumn("port"); QTest::addColumn("expectedError"); - QTest::newRow("localhost no service") << QStringLiteral("localhost") << 31415 << QAbstractSocket::ConnectionRefusedError; - QTest::newRow("unreachable") << QStringLiteral("0.0.0.1") << 65000 << QAbstractSocket::NetworkError; + QTest::newRow("localhost no service") << QStringLiteral("localhost") << quint16(31415) << QAbstractSocket::ConnectionRefusedError; + QTest::newRow("unreachable") << QStringLiteral("0.0.0.1") << quint16(65000) << QAbstractSocket::NetworkError; } void tst_QTcpSocket::connectToHostError() { + // We are aware of at least one OS in our CI, that would fail + // the test due to timeout - it's Ubuntu 20.04 and 'connect' + // to 0.0.0.1 there return EINPROGRESS, with no other error + // ever received, so only our own internal 30 s. timer can + // detect a connection timeout. + std::unique_ptr socket(newSocket()); QAbstractSocket::SocketError error = QAbstractSocket::UnknownSocketError; - QFETCH(QString, host); - QFETCH(int, port); + QFETCH(const QString, host); + QFETCH(const quint16, port); QFETCH(QAbstractSocket::SocketError, expectedError); - connect(socket.get(), &QAbstractSocket::errorOccurred, [&](QAbstractSocket::SocketError socketError){ + QTestEventLoop eventLoop; + connect(socket.get(), &QAbstractSocket::errorOccurred, socket.get(), + [&](QAbstractSocket::SocketError socketError) { error = socketError; + QTimer::singleShot(0, &eventLoop, [&]{eventLoop.exitLoop();}); }); - socket->connectToHost(host, port); // no service running here, one suspects - QTRY_COMPARE_WITH_TIMEOUT(socket->state(), QTcpSocket::UnconnectedState, 7000); + + socket->connectToHost(host, port); + eventLoop.enterLoopMSecs(7000); + if (eventLoop.timeout() && port == 65000) { + // Let's at least verify it's not in connected state: + QVERIFY(socket->state() != QAbstractSocket::ConnectedState); + QSKIP("Connection to unreachable host timed out, skipping the rest of the test"); + } + + QCOMPARE(socket->state(), QTcpSocket::UnconnectedState); + if (error != expectedError && error == QAbstractSocket::ConnectionRefusedError) QEXPECT_FAIL("unreachable", "CI firewall interfers with this test", Continue); + QCOMPARE(error, expectedError); } @@ -2201,7 +2220,7 @@ public slots: #if defined(Q_OS_MAC) pthread_yield_np(); #elif defined Q_OS_LINUX && !defined Q_OS_ANDROID - pthread_yield(); + sched_yield(); #endif if (!sock->waitForConnected()) { networkTimeout = true; diff --git a/tests/auto/network/ssl/qsslsocket/certs/fluke.cert b/tests/auto/network/ssl/qsslsocket/certs/fluke.cert index 069fa6b3..4cc4d9a5 100644 --- a/tests/auto/network/ssl/qsslsocket/certs/fluke.cert +++ b/tests/auto/network/ssl/qsslsocket/certs/fluke.cert @@ -1,75 +1,34 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 0 (0x0) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=NO, ST=Oslo, L=Nydalen, O=Nokia Corporation and/or its subsidiary(-ies), OU=Development, CN=fluke.troll.no/emailAddress=ahanssen@trolltech.com - Validity - Not Before: Dec 4 01:10:32 2007 GMT - Not After : Apr 21 01:10:32 2035 GMT - Subject: C=NO, ST=Oslo, O=Nokia Corporation and/or its subsidiary(-ies), OU=Development, CN=fluke.troll.no - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - RSA Public Key: (1024 bit) - Modulus (1024 bit): - 00:a7:c8:a0:4a:c4:19:05:1b:66:ba:32:e2:d2:f1: - 1c:6f:17:82:e4:39:2e:01:51:90:db:04:34:32:11: - 21:c2:0d:6f:59:d8:53:90:54:3f:83:8f:a9:d3:b3: - d5:ee:1a:9b:80:ae:c3:25:c9:5e:a5:af:4b:60:05: - aa:a0:d1:91:01:1f:ca:04:83:e3:58:1c:99:32:45: - 84:70:72:58:03:98:4a:63:8b:41:f5:08:49:d2:91: - 02:60:6b:e4:64:fe:dd:a0:aa:74:08:e9:34:4c:91: - 5f:12:3d:37:4d:54:2c:ad:7f:5b:98:60:36:02:8c: - 3b:f6:45:f3:27:6a:9b:94:9d - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 21:85:04:3D:23:01:66:E5:F7:9F:1A:84:24:8A:AF:0A:79:F4:E5:AC - X509v3 Authority Key Identifier: - DirName:/C=NO/ST=Oslo/L=Nydalen/O=Nokia Corporation and/or its subsidiary(-ies)/OU=Development/CN=fluke.troll.no/emailAddress=ahanssen@trolltech.com - serial:8E:A8:B4:E8:91:B7:54:2E - - Signature Algorithm: sha1WithRSAEncryption - 6d:57:5f:d1:05:43:f0:62:05:ec:2a:71:a5:dc:19:08:f2:c4: - a6:bd:bb:25:d9:ca:89:01:0e:e4:cf:1f:c1:8c:c8:24:18:35: - 53:59:7b:c0:43:b4:32:e6:98:b2:a6:ef:15:05:0b:48:5f:e1: - a0:0c:97:a9:a1:77:d8:35:18:30:bc:a9:8f:d3:b7:54:c7:f1: - a9:9e:5d:e6:19:bf:f6:3c:5b:2b:d8:e4:3e:62:18:88:8b:d3: - 24:e1:40:9b:0c:e6:29:16:62:ab:ea:05:24:70:36:aa:55:93: - ef:02:81:1b:23:10:a2:04:eb:56:95:75:fc:f8:94:b1:5d:42: - c5:3f:36:44:85:5d:3a:2e:90:46:8a:a2:b9:6f:87:ae:0c:15: - 40:19:31:90:fc:3b:25:bb:ae:f1:66:13:0d:85:90:d9:49:34: - 8f:f2:5d:f9:7a:db:4d:5d:27:f6:76:9d:35:8c:06:a6:4c:a3: - b1:b2:b6:6f:1d:d7:a3:00:fd:72:eb:9e:ea:44:a1:af:21:34: - 7d:c7:42:e2:49:91:19:8b:c0:ad:ba:82:80:a8:71:70:f4:35: - 31:91:63:84:20:95:e9:60:af:64:8b:cc:ff:3d:8a:76:74:3d: - c8:55:6d:e4:8e:c3:2b:1c:e8:42:18:ae:9f:e6:6b:9c:34:06: - ec:6a:f2:c3 -----BEGIN CERTIFICATE----- -MIIEEzCCAvugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBnDELMAkGA1UEBhMCTk8x -DTALBgNVBAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xs -dGVjaCBBU0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50 -cm9sbC5ubzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbTAe -Fw0wNzEyMDQwMTEwMzJaFw0zNTA0MjEwMTEwMzJaMGMxCzAJBgNVBAYTAk5PMQ0w -CwYDVQQIEwRPc2xvMRYwFAYDVQQKEw1Ucm9sbHRlY2ggQVNBMRQwEgYDVQQLEwtE -ZXZlbG9wbWVudDEXMBUGA1UEAxMOZmx1a2UudHJvbGwubm8wgZ8wDQYJKoZIhvcN -AQEBBQADgY0AMIGJAoGBAKfIoErEGQUbZroy4tLxHG8XguQ5LgFRkNsENDIRIcIN -b1nYU5BUP4OPqdOz1e4am4CuwyXJXqWvS2AFqqDRkQEfygSD41gcmTJFhHByWAOY -SmOLQfUISdKRAmBr5GT+3aCqdAjpNEyRXxI9N01ULK1/W5hgNgKMO/ZF8ydqm5Sd -AgMBAAGjggEaMIIBFjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NM -IEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUIYUEPSMBZuX3nxqEJIqv -Cnn05awwgbsGA1UdIwSBszCBsKGBoqSBnzCBnDELMAkGA1UEBhMCTk8xDTALBgNV -BAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xsdGVjaCBB -U0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50cm9sbC5u -bzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbYIJAI6otOiR -t1QuMA0GCSqGSIb3DQEBBQUAA4IBAQBtV1/RBUPwYgXsKnGl3BkI8sSmvbsl2cqJ -AQ7kzx/BjMgkGDVTWXvAQ7Qy5piypu8VBQtIX+GgDJepoXfYNRgwvKmP07dUx/Gp -nl3mGb/2PFsr2OQ+YhiIi9Mk4UCbDOYpFmKr6gUkcDaqVZPvAoEbIxCiBOtWlXX8 -+JSxXULFPzZEhV06LpBGiqK5b4euDBVAGTGQ/Dslu67xZhMNhZDZSTSP8l35ettN -XSf2dp01jAamTKOxsrZvHdejAP1y657qRKGvITR9x0LiSZEZi8CtuoKAqHFw9DUx -kWOEIJXpYK9ki8z/PYp2dD3IVW3kjsMrHOhCGK6f5mucNAbsavLD +MIIF6zCCA9OgAwIBAgIUfo9amJtJGWqWE6f+SkAO85zkGr4wDQYJKoZIhvcNAQEL +BQAwgYMxCzAJBgNVBAYTAk5PMQ0wCwYDVQQIDARPc2xvMQ0wCwYDVQQHDARPc2xv +MRcwFQYDVQQKDA5UaGUgUXQgQ29tcGFueTEMMAoGA1UECwwDUiZEMRIwEAYDVQQD +DAlIMiBUZXN0ZXIxGzAZBgkqhkiG9w0BCQEWDG1pbmltaUBxdC5pbzAgFw0yMDEw +MjYxMjAxMzFaGA8yMTIwMTAwMjEyMDEzMVowgYMxCzAJBgNVBAYTAk5PMQ0wCwYD +VQQIDARPc2xvMQ0wCwYDVQQHDARPc2xvMRcwFQYDVQQKDA5UaGUgUXQgQ29tcGFu +eTEMMAoGA1UECwwDUiZEMRIwEAYDVQQDDAlIMiBUZXN0ZXIxGzAZBgkqhkiG9w0B +CQEWDG1pbmltaUBxdC5pbzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AOiUp5+E4blouKH7q+rVNR8NoYX2XkBW+q+rpy1zu5ssRSzbqxAjDx9dkht7Qlnf +VlDT00JvpOWdeuPon5915edQRsY4Unl6mKH29ra3OtUa1/yCJXsGVJTKCj7k4Bxb +5mZzb/fTlZntMLdTIBMfUbw62FKir1WjKIcJ9fCoG8JaGeKVO4Rh5p0ezd4UUUId +r1BXl5Nqdqy2vTMsEDnjOsD3egkv8I2SKN4O6n/C3wWYpMOWYZkGoZiKz7rJs/i/ +ez7bsV7JlwdzTlhpJzkcOSVFBP6JlEOxTNNxZ1wtKy7PtZGmsSSATq2e6+bw38Ae +Op0XnzzqcGjtDDofBmT7OFzZWjS9VZS6+DOOe2QHWle1nCHcHyH4ku6IRlsr9xkR +NAIlOfnvHHxqJUenoeaZ4oQDjCBKS1KXygJO/tL7BLTQVn/xK1EmPvKNnjzWk4tR +PnibUhhs5635qpOU/YPqFBh1JjVruZbsWcDAhRcew0uxONXOa9E+4lttQ9ySYa1A +LvWqJuAX7gu2BsBMLyqfm811YnA7CIFMyO+HlqmkLFfv5L/xIRAXR7l26YGO0VwX +CGjMfz4NVPMMke4nB7qa9NkpXQBQKMms3Qzd5JW0Hy9Ruj5O8GPcFZmV0twjd1uJ +PD/cAjkWLaXjdNsJ16QWc2nghQRS6HYqKRX6j+CXOxupAgMBAAGjUzBRMB0GA1Ud +DgQWBBRSCOU58j9NJZkMamt623qyCrhN3TAfBgNVHSMEGDAWgBRSCOU58j9NJZkM +amt623qyCrhN3TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCq +q4jxsWeNDv5Nq14hJtF9HB+ZL64zcZtRjJP1YgNs0QppKICmjPOL2nIMGmI/jKrs +0eGAL/9XXNVHPxm1OPOncvimMMmU6emZfpMdEtTfKP43+Pg9HgKRjLoQp406vGeQ +8ki/mbBhrItVPgEm3tu2AFA02XTYi+YxCI9kRZLGkM3FbgtOuTLPl0Z9y+kiPc9F +uCSC03anBEqv+vDSI8+wODymQ/IJ3Jyz1lxIRDfp4qAekmy0jU2c91VOHHEmOmqq +kqygGFRdwbe99m9yP63r6q0b5K3X2UnJ6bns0hmTwThYwpVPXLU8jdaTddbMukN2 +/Ef96Tsw8nWOEOPMySHOTIPgwyZRp26b0kA9EmhLwOP401SxXVQCmSRmtwNagmtg +jJKmZoYBN+//D45ibK8z6Q0oOm9P+Whf/uUXehcRxBxyV3xz7k0wKGQbHj/ddwcy +IUoIN4lrAlib+lK170kTKN352PDmrpo2gmIzPEsfurKAIMSelDl6H+kih16BtZ8y +Nz6fh9Soqrg3OSAware8pxV7k51crBMoPLN78KoRV8MFCK4K7Fddq4rRISq6hiXq +r1nsjoEPuKM9huprmZVZe9t5YcDa2I+wb3IiE3uwpZbAdaLDyQ5n6F/qpsiIkZXn +gtcF7oqpG5oYrwCcZ53y/ezUgUg7PlSz2XwAGvQtgg== -----END CERTIFICATE----- diff --git a/tests/auto/network/ssl/qsslsocket/certs/fluke.key b/tests/auto/network/ssl/qsslsocket/certs/fluke.key index 9d1664d6..337ce541 100644 --- a/tests/auto/network/ssl/qsslsocket/certs/fluke.key +++ b/tests/auto/network/ssl/qsslsocket/certs/fluke.key @@ -1,15 +1,52 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXAIBAAKBgQCnyKBKxBkFG2a6MuLS8RxvF4LkOS4BUZDbBDQyESHCDW9Z2FOQ -VD+Dj6nTs9XuGpuArsMlyV6lr0tgBaqg0ZEBH8oEg+NYHJkyRYRwclgDmEpji0H1 -CEnSkQJga+Rk/t2gqnQI6TRMkV8SPTdNVCytf1uYYDYCjDv2RfMnapuUnQIDAQAB -AoGANFzLkanTeSGNFM0uttBipFT9F4a00dqHz6JnO7zXAT26I5r8sU1pqQBb6uLz -/+Qz5Zwk8RUAQcsMRgJetuPQUb0JZjF6Duv24hNazqXBCu7AZzUenjafwmKC/8ri -KpX3fTwqzfzi//FKGgbXQ80yykSSliDL3kn/drATxsLCgQECQQDXhEFWLJ0vVZ1s -1Ekf+3NITE+DR16X+LQ4W6vyEHAjTbaNWtcTKdAWLA2l6N4WAAPYSi6awm+zMxx4 -VomVTsjdAkEAx0z+e7natLeFcrrq8pbU+wa6SAP1VfhQWKitxL1e7u/QO90NCpxE -oQYKzMkmmpOOFjQwEMAy1dvFMbm4LHlewQJAC/ksDBaUcQHHqjktCtrUb8rVjAyW -A8lscckeB2fEYyG5J6dJVaY4ClNOOs5yMDS2Afk1F6H/xKvtQ/5CzInA/QJATDub -K+BPU8jO9q+gpuIi3VIZdupssVGmCgObVCHLakG4uO04y9IyPhV9lA9tALtoIf4c -VIvv5fWGXBrZ48kZAQJBAJmVCdzQxd9LZI5vxijUCj5EI4e+x5DRqVUvyP8KCZrC -AiNyoDP85T+hBZaSXK3aYGpVwelyj3bvo1GrTNwNWLw= ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDolKefhOG5aLih ++6vq1TUfDaGF9l5AVvqvq6ctc7ubLEUs26sQIw8fXZIbe0JZ31ZQ09NCb6TlnXrj +6J+fdeXnUEbGOFJ5epih9va2tzrVGtf8giV7BlSUygo+5OAcW+Zmc2/305WZ7TC3 +UyATH1G8OthSoq9VoyiHCfXwqBvCWhnilTuEYeadHs3eFFFCHa9QV5eTanastr0z +LBA54zrA93oJL/CNkijeDup/wt8FmKTDlmGZBqGYis+6ybP4v3s+27FeyZcHc05Y +aSc5HDklRQT+iZRDsUzTcWdcLSsuz7WRprEkgE6tnuvm8N/AHjqdF5886nBo7Qw6 +HwZk+zhc2Vo0vVWUuvgzjntkB1pXtZwh3B8h+JLuiEZbK/cZETQCJTn57xx8aiVH +p6HmmeKEA4wgSktSl8oCTv7S+wS00FZ/8StRJj7yjZ481pOLUT54m1IYbOet+aqT +lP2D6hQYdSY1a7mW7FnAwIUXHsNLsTjVzmvRPuJbbUPckmGtQC71qibgF+4LtgbA +TC8qn5vNdWJwOwiBTMjvh5appCxX7+S/8SEQF0e5dumBjtFcFwhozH8+DVTzDJHu +Jwe6mvTZKV0AUCjJrN0M3eSVtB8vUbo+TvBj3BWZldLcI3dbiTw/3AI5Fi2l43Tb +CdekFnNp4IUEUuh2KikV+o/glzsbqQIDAQABAoICAFw1q6tr5I48vY7DF+rXsuLn +5ZUWE1IQ6fzB4lr72nJv/9EEGnMgYzt9PpMUsD6vdCpBgS2C0+6RHArFzJtNA+RM +iHLIG7K7702veyr/xBx/MwiSlMeMv/XpkFxVI6E6skMGG2s3AMXxKvJTy5CpRx+I +eQFyLG+Ya1X2lgJes/q+/CpAHkOjCOpcLySQC5NZ74q734V7nSdmn+Zs3tYEh+O/ +eiuwTP/j5b38Te5vVTqDxTciJPmljmXLCwa0N100lWlbcpvw8qbqiTI2Jm3XCbUE +AzHjW9vmrF3cRS1fXxKFGShw3SRqlkbxjfeWoi8qDPUBS4m8LOr8qG9Wo5Nfon0z +zLP4bci3zHDvVcaaZrrsUBs/yZbg+Dgka1DmX7ekmeccr2yTdKDFgPupYUyxVbTl +a9ZLJysjFD7rgBv1ZclHonLp6Vbm+ZoTqvteo4ikAy6L9RtBWJ23XEK34PkP/+c5 +2vWZaOrnjSeBHbFce8cdJSxqWpP+eSCI5I9XbDrYFIsQ/gqKgtzDKy2ihJ2Y8STL +yO4hyFPFjxc+Gg4/P2PpmT5CY2ty44M0BWs+JGW96CJPrrplf2lmQUQJj5LZY66X +Z/4C9L7ZYtKZ+bs5SvU46yWugAvQZX22Xm9xLXWyVXRdx3bj+3M3fDnF9di/zdbh +CgLx7oWPNrXc7FCajnn9AoIBAQD5FMYwRpw9NWT9WDxQwx+cSI4Icbd88ByTW63S +LzeRwZA0J9/SfwO+aBRupzc9GkGXCiZcGMw3AGsCtig8yFlw8E5KnzN7KlftDMnM +9NUxxzlR8VwKyLnZfG7sDTl057ZlUujnqhmt/F8F7dIy7FVO1dE/8nngA+FYTCOG +UZdGjwyBDlDM0JJdUWGY3xslutcpCDN5mzSTKjy9drMvImAshRawxRF6WBpn7vr2 +nC6vciqfx1Mzx1vyk0Jm0ilaydDdLMADjt/iL4Nkr0BEs4k+UzQiKDwp8gu7abQ1 +eBfxd9Iar4htQa2I1Ewl6P01G/q+ZYwgHhJ9RVn4AxQXefILAoIBAQDvCouORdQX +C8wsyp7MwXlF/3NQeNN5/+B2mhbxrBOf7PmMCXLnkRWcjwJtzypWFqJ0sqai/2+0 +bqbMcjX5maT8stT2shl3zXe/Ejt2e3TBYpc1tyuses8Kb5BMU8hu6tTd3G2CMXpD +dT6DVemJZCTtwj9aBNIxSizvlgMolJnCpzhPnlfHSI6E+g3m/LTTo3HwbjMSw/Uq +irgjOpI2wSBB6LZPSgjvfcYPRyWUk16L4A5uSX0cADnovDFLa5/h0wJvN/OoCSQg +rLCXG5E18EyL5Wc58BCY1ZvxmjG3lQtgPxYu2Jwc36R/y/JKlxW5suER5ZNpbbD4 +uOyTt2VxMQ2bAoIBAQC5+MzRFqdo/AjfL5Y5JrbfVTzXCTDa09xCGd16ZU60QTWN ++4ed/r+o1sUKqUcRFB2MzEM/2DQBjQpZB/CbEWvWa1XJWXxypXbowveZU+QqOnmN +uQvj8WLyA3o+PNF9e9QvauwCrHpn8VpxbtPWuaYoKnUFreFZZQxHhPGxRBIS2JOZ +eDrT8ZaWnkCkh1AZp5smQ71LOprSlmKrg4jd1GjCVMxQR5N5KXbtyv0OTCZ/UFqK +2aRBsMPyJgkaBChkZPLRcKwc+/wlQRx1fHQb14DNTApMxoXFO7eOwqmOkpAt9iyl +SBIwoS0UUI5ab88+bBmXNvKcuFdNuQ4nowTJUn9pAoIBADMNkILBXSvS5DeIyuO2 +Sp1tkoZUV+5NfPY3sMDK3KIibaW/+t+EOBZo4L7tKQCb8vRzl21mmsfxfgRaPDbj +3r3tv9g0b4YLxxBy52pFscj/soXRai17SS7UZwA2QK+XzgDYbDcLNC6mIsTQG4Gx +dsWk3/zs3KuUSQaehmwrWK+fIUK38c1pLK8v7LoxrLkqxlHwZ04RthHw8KTthH7X +Pnl1J0LF8CSeOyfWLSuPUfkT0GEzptnNHpEbaHfQM6R6eaGhVJPF6AZme4y6YYgg +m2ihhSt1n0XVEWpHYWjxFy3mK2mz75unFC4LM+NEY2p2zuUQoCw7NjnY3QYrfCnx +rRMCggEAXeXsMSLFjjyuoL7iKbAxo52HD/P0fBoy58LyRcwfNVr0lvYan4pYEx+o +KijIh9K16PqXZXKMA9v003B+ulmF8bJ7SddCZ5NGvnFhUTDe4DdTKgp2RuwQ3Bsc +3skPIDbhVETyOLCtys34USHrq8U/0DlGY3eLRfxw9GnbKxSBGa/KEu/qQLPNUo50 +7xHZDg7GKeC3kqNJeqKM9rkp0VzIGkEnaD9127LeNDmERDfftxJzFoC/THvUBLfU +6Sus2ZYwRE8VFvKC30Q45t/c54X3IuhYvAuiCuTmyfE4ruyzyOwKzhUkeeLq1APX +g0veFbyfzlJ0q8qzD/iffqqIa2ZSmQ== +-----END PRIVATE KEY----- diff --git a/tests/auto/other/gestures/BLACKLIST b/tests/auto/other/gestures/BLACKLIST index 480b5a3a..0e35fb37 100644 --- a/tests/auto/other/gestures/BLACKLIST +++ b/tests/auto/other/gestures/BLACKLIST @@ -3,6 +3,7 @@ rhel-7.4 rhel-7.6 ubuntu-18.04 sles-15 +rhel-8.4 [customGesture] opensuse-leap # QTBUG-67254 @@ -12,6 +13,7 @@ ubuntu-18.04 rhel-7.4 rhel-7.6 sles-15 +rhel-8.4 [graphicsItemTreeGesture] ubuntu-18.04 [graphicsView] @@ -19,14 +21,17 @@ ubuntu-18.04 rhel-7.4 rhel-7.6 sles-15 +rhel-8.4 [explicitGraphicsObjectTarget] ubuntu-18.04 rhel-7.4 rhel-7.6 sles-15 +rhel-8.4 [autoCancelGestures2] ubuntu-18.04 rhel-7.4 rhel-7.6 sles-15 +rhel-8.4 diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp index 2a2ccfbf..97ffafc9 100644 --- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp +++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp @@ -38,6 +38,7 @@ # include #endif #include +#include #include #include #include @@ -4079,6 +4080,124 @@ void tst_QAccessibility::focusChild() delete tabBar; QTestAccessibility::clearEvents(); } + + { + QMainWindow mainWindow; + QTableWidget *tableView = new QTableWidget(3, 3); + + QSignalSpy spy(tableView, SIGNAL(currentCellChanged(int,int,int,int))); + + tableView->setColumnCount(3); + QStringList hHeader; + hHeader << "h1" << "h2" << "h3"; + tableView->setHorizontalHeaderLabels(hHeader); + + QStringList vHeader; + vHeader << "v1" << "v2" << "v3"; + tableView->setVerticalHeaderLabels(vHeader); + + for (int i = 0; i < 9; ++i) { + QTableWidgetItem *item = new QTableWidgetItem; + item->setText(QString::number(i/3) + QString(".") + QString::number(i%3)); + tableView->setItem(i/3, i%3, item); + } + + mainWindow.setCentralWidget(tableView); + mainWindow.resize(600, 600); + mainWindow.show(); + + QVERIFY(QTest::qWaitForWindowExposed(tableView)); + + tableView->setFocus(); + + QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(tableView); + QVERIFY(iface); + + spy.clear(); + tableView->setCurrentCell(2, 1); + QTRY_COMPARE(spy.count(), 1); + + QAccessibleInterface *child = iface->focusChild(); + QVERIFY(child); + QCOMPARE(child->text(QAccessible::Name), QStringLiteral("2.1")); + + spy.clear(); + tableView->setCurrentCell(1, 2); + QTRY_COMPARE(spy.count(), 1); + + child = iface->focusChild(); + QVERIFY(child); + QCOMPARE(child->text(QAccessible::Name), QStringLiteral("1.2")); + + delete tableView; + QTestAccessibility::clearEvents(); + } + + { + QMainWindow mainWindow; + QTreeWidget *treeView = new QTreeWidget(); + + QSignalSpy spy(treeView, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*))); + + treeView->setColumnCount(2); + QTreeWidgetItem *header = new QTreeWidgetItem; + header->setText(0, "Artist"); + header->setText(1, "Work"); + treeView->setHeaderItem(header); + + QTreeWidgetItem *root1 = new QTreeWidgetItem; + root1->setText(0, "Spain"); + treeView->addTopLevelItem(root1); + + QTreeWidgetItem *item1 = new QTreeWidgetItem; + item1->setText(0, "Picasso"); + item1->setText(1, "Guernica"); + root1->addChild(item1); + + QTreeWidgetItem *item2 = new QTreeWidgetItem; + item2->setText(0, "Tapies"); + item2->setText(1, "Ambrosia"); + root1->addChild(item2); + + QTreeWidgetItem *root2 = new QTreeWidgetItem; + root2->setText(0, "Austria"); + treeView->addTopLevelItem(root2); + + QTreeWidgetItem *item3 = new QTreeWidgetItem; + item3->setText(0, "Klimt"); + item3->setText(1, "The Kiss"); + root2->addChild(item3); + + mainWindow.setCentralWidget(treeView); + mainWindow.resize(600, 600); + mainWindow.show(); + + QVERIFY(QTest::qWaitForWindowExposed(treeView)); + + treeView->setFocus(); + + QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(treeView); + QVERIFY(iface); + + spy.clear(); + treeView->setCurrentItem(item2); + QTRY_COMPARE(spy.count(), 1); + + QAccessibleInterface *child = iface->focusChild(); + QVERIFY(child); + QCOMPARE(child->text(QAccessible::Name), QStringLiteral("Tapies")); + + spy.clear(); + treeView->setCurrentItem(item3); + QTRY_COMPARE(spy.count(), 1); + + child = iface->focusChild(); + QVERIFY(child); + QCOMPARE(child->text(QAccessible::Name), QStringLiteral("Klimt")); + + delete treeView; + QTestAccessibility::clearEvents(); + } } diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp index 76df61c8..6d6d65b7 100644 --- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. @@ -68,6 +68,8 @@ private slots: void query_exec(); void execErrorRecovery_data() { generic_data(); } void execErrorRecovery(); + void prematureExec_data() { generic_data(); } + void prematureExec(); void first_data() { generic_data(); } void first(); void next_data() { generic_data(); } @@ -2770,6 +2772,35 @@ void tst_QSqlQuery::execErrorRecovery() QVERIFY_SQL( q, exec() ); } +void tst_QSqlQuery::prematureExec() +{ + QFETCH(QString, dbName); + // We only want the engine name, for addDatabase(): + int cut = dbName.indexOf(QChar('@')); + if (cut < 0) + QSKIP("Failed to parse database type out of name"); + dbName.truncate(cut); + cut = dbName.indexOf(QChar('_')); + if (cut >= 0) + dbName = dbName.mid(cut + 1); + + auto db = QSqlDatabase::addDatabase(dbName); + QSqlQuery q(db); + + QTest::ignoreMessage(QtWarningMsg, + "QSqlDatabasePrivate::removeDatabase: connection " + "'qt_sql_default_connection' is still in use, all " + "queries will cease to work."); + QTest::ignoreMessage(QtWarningMsg, + "QSqlDatabasePrivate::addDatabase: duplicate connection name " + "'qt_sql_default_connection', old connection removed."); + auto otherDb = QSqlDatabase::addDatabase(dbName); + + QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::exec: called before driver has been set up"); + // QTBUG-100037: shouldn't crash ! + QVERIFY(!q.exec("select stuff from TheVoid")); +} + void tst_QSqlQuery::lastInsertId() { QFETCH( QString, dbName ); diff --git a/tests/auto/testlib/selftests/expected_float.junitxml b/tests/auto/testlib/selftests/expected_float.junitxml deleted file mode 100644 index 51a711ef..00000000 --- a/tests/auto/testlib/selftests/expected_float.junitxml +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/auto/testlib/selftests/expected_float.lightxml b/tests/auto/testlib/selftests/expected_float.lightxml deleted file mode 100644 index cf82929f..00000000 --- a/tests/auto/testlib/selftests/expected_float.lightxml +++ /dev/null @@ -1,665 +0,0 @@ - - @INSERT_QT_VERSION_HERE@ - - @INSERT_QT_VERSION_HERE@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/auto/testlib/selftests/expected_float.tap b/tests/auto/testlib/selftests/expected_float.tap deleted file mode 100644 index f5249b8b..00000000 --- a/tests/auto/testlib/selftests/expected_float.tap +++ /dev/null @@ -1,1181 +0,0 @@ -TAP version 13 -# tst_float -ok 1 - initTestCase() -not ok 2 - doubleComparisons(should FAIL 1) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 3 (operandRight) - found: 1 (operandLeft) - expected: 3 (operandRight) - actual: 1 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -ok 3 - doubleComparisons(should PASS 1) -not ok 4 - doubleComparisons(should FAIL 2) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 3e-07 (operandRight) - found: 1e-07 (operandLeft) - expected: 3e-07 (operandRight) - actual: 1e-07 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -ok 5 - doubleComparisons(should PASS 2) -not ok 6 - doubleComparisons(should FAIL 3) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 999999999998 (operandRight) - found: 999999999999 (operandLeft) - expected: 999999999998 (operandRight) - actual: 999999999999 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -ok 7 - doubleComparisons(should PASS 3) -not ok 8 - doubleComparisons(should FAIL 4) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 9.99999999999e-13 (operandRight) - found: 1e-12 (operandLeft) - expected: 9.99999999999e-13 (operandRight) - actual: 1e-12 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -ok 9 - doubleComparisons(should PASS 4) -not ok 10 - doubleComparisons(should FAIL 5) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 9.99999999997e+306 (operandRight) - found: 9.99999999999e+306 (operandLeft) - expected: 9.99999999997e+306 (operandRight) - actual: 9.99999999999e+306 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -ok 11 - doubleComparisons(should PASS: NaN == NaN) -not ok 12 - doubleComparisons(should FAIL: NaN != 0) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 0 (operandRight) - found: nan (operandLeft) - expected: 0 (operandRight) - actual: nan (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 13 - doubleComparisons(should FAIL: 0 != NaN) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: nan (operandRight) - found: 0 (operandLeft) - expected: nan (operandRight) - actual: 0 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 14 - doubleComparisons(should FAIL: NaN != 1) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 1 (operandRight) - found: nan (operandLeft) - expected: 1 (operandRight) - actual: nan (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 15 - doubleComparisons(should FAIL: 1 != NaN) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: nan (operandRight) - found: 1 (operandLeft) - expected: nan (operandRight) - actual: 1 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -ok 16 - doubleComparisons(should PASS: inf == inf) -ok 17 - doubleComparisons(should PASS: -inf == -inf) -not ok 18 - doubleComparisons(should FAIL: inf != -inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: inf (operandLeft) - expected: -inf (operandRight) - actual: inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 19 - doubleComparisons(should FAIL: -inf != inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: inf (operandRight) - found: -inf (operandLeft) - expected: inf (operandRight) - actual: -inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 20 - doubleComparisons(should FAIL: inf != nan) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: nan (operandRight) - found: inf (operandLeft) - expected: nan (operandRight) - actual: inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 21 - doubleComparisons(should FAIL: nan != inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: inf (operandRight) - found: nan (operandLeft) - expected: inf (operandRight) - actual: nan (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 22 - doubleComparisons(should FAIL: -inf != nan) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: nan (operandRight) - found: -inf (operandLeft) - expected: nan (operandRight) - actual: -inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 23 - doubleComparisons(should FAIL: nan != -inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: nan (operandLeft) - expected: -inf (operandRight) - actual: nan (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 24 - doubleComparisons(should FAIL: inf != 0) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 0 (operandRight) - found: inf (operandLeft) - expected: 0 (operandRight) - actual: inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 25 - doubleComparisons(should FAIL: 0 != inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: inf (operandRight) - found: 0 (operandLeft) - expected: inf (operandRight) - actual: 0 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 26 - doubleComparisons(should FAIL: -inf != 0) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 0 (operandRight) - found: -inf (operandLeft) - expected: 0 (operandRight) - actual: -inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 27 - doubleComparisons(should FAIL: 0 != -inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: 0 (operandLeft) - expected: -inf (operandRight) - actual: 0 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 28 - doubleComparisons(should FAIL: inf != 1) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 1 (operandRight) - found: inf (operandLeft) - expected: 1 (operandRight) - actual: inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 29 - doubleComparisons(should FAIL: 1 != inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: inf (operandRight) - found: 1 (operandLeft) - expected: inf (operandRight) - actual: 1 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 30 - doubleComparisons(should FAIL: -inf != 1) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 1 (operandRight) - found: -inf (operandLeft) - expected: 1 (operandRight) - actual: -inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 31 - doubleComparisons(should FAIL: 1 != -inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: 1 (operandLeft) - expected: -inf (operandRight) - actual: 1 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 32 - doubleComparisons(should FAIL: inf != max) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 1.79769313486e+308 (operandRight) - found: inf (operandLeft) - expected: 1.79769313486e+308 (operandRight) - actual: inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 33 - doubleComparisons(should FAIL: inf != -max) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: -1.79769313486e+308 (operandRight) - found: inf (operandLeft) - expected: -1.79769313486e+308 (operandRight) - actual: inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 34 - doubleComparisons(should FAIL: max != inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: inf (operandRight) - found: 1.79769313486e+308 (operandLeft) - expected: inf (operandRight) - actual: 1.79769313486e+308 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 35 - doubleComparisons(should FAIL: -max != inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: inf (operandRight) - found: -1.79769313486e+308 (operandLeft) - expected: inf (operandRight) - actual: -1.79769313486e+308 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 36 - doubleComparisons(should FAIL: -inf != max) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: 1.79769313486e+308 (operandRight) - found: -inf (operandLeft) - expected: 1.79769313486e+308 (operandRight) - actual: -inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 37 - doubleComparisons(should FAIL: -inf != -max) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: -1.79769313486e+308 (operandRight) - found: -inf (operandLeft) - expected: -1.79769313486e+308 (operandRight) - actual: -inf (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 38 - doubleComparisons(should FAIL: max != -inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: 1.79769313486e+308 (operandLeft) - expected: -inf (operandRight) - actual: 1.79769313486e+308 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 39 - doubleComparisons(should FAIL: -max != -inf) - --- - type: QCOMPARE - message: Compared doubles are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: -1.79769313486e+308 (operandLeft) - expected: -inf (operandRight) - actual: -1.79769313486e+308 (operandLeft) - at: tst_float::doubleComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:103) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 103 - ... -not ok 40 - floatComparisons(should FAIL 1) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 3 (operandRight) - found: 1 (operandLeft) - expected: 3 (operandRight) - actual: 1 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -ok 41 - floatComparisons(should PASS 1) -not ok 42 - floatComparisons(should FAIL 2) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 3e-05 (operandRight) - found: 1e-05 (operandLeft) - expected: 3e-05 (operandRight) - actual: 1e-05 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -ok 43 - floatComparisons(should PASS 2) -not ok 44 - floatComparisons(should FAIL 3) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 99998 (operandRight) - found: 99999 (operandLeft) - expected: 99998 (operandRight) - actual: 99999 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -ok 45 - floatComparisons(should PASS 3) -not ok 46 - floatComparisons(should FAIL 4) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 9.9999e-06 (operandRight) - found: 1.00001e-05 (operandLeft) - expected: 9.9999e-06 (operandRight) - actual: 1.00001e-05 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -ok 47 - floatComparisons(should PASS 4) -not ok 48 - floatComparisons(should FAIL 5) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 9.9997e+37 (operandRight) - found: 9.9999e+37 (operandLeft) - expected: 9.9997e+37 (operandRight) - actual: 9.9999e+37 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -ok 49 - floatComparisons(should PASS: NaN == NaN) -not ok 50 - floatComparisons(should FAIL: NaN != 0) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 0 (operandRight) - found: nan (operandLeft) - expected: 0 (operandRight) - actual: nan (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 51 - floatComparisons(should FAIL: 0 != NaN) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: nan (operandRight) - found: 0 (operandLeft) - expected: nan (operandRight) - actual: 0 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 52 - floatComparisons(should FAIL: NaN != 1) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 1 (operandRight) - found: nan (operandLeft) - expected: 1 (operandRight) - actual: nan (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 53 - floatComparisons(should FAIL: 1 != NaN) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: nan (operandRight) - found: 1 (operandLeft) - expected: nan (operandRight) - actual: 1 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -ok 54 - floatComparisons(should PASS: inf == inf) -ok 55 - floatComparisons(should PASS: -inf == -inf) -not ok 56 - floatComparisons(should FAIL: inf != -inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: inf (operandLeft) - expected: -inf (operandRight) - actual: inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 57 - floatComparisons(should FAIL: -inf != inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: inf (operandRight) - found: -inf (operandLeft) - expected: inf (operandRight) - actual: -inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 58 - floatComparisons(should FAIL: inf != nan) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: nan (operandRight) - found: inf (operandLeft) - expected: nan (operandRight) - actual: inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 59 - floatComparisons(should FAIL: nan != inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: inf (operandRight) - found: nan (operandLeft) - expected: inf (operandRight) - actual: nan (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 60 - floatComparisons(should FAIL: -inf != nan) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: nan (operandRight) - found: -inf (operandLeft) - expected: nan (operandRight) - actual: -inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 61 - floatComparisons(should FAIL: nan != -inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: nan (operandLeft) - expected: -inf (operandRight) - actual: nan (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 62 - floatComparisons(should FAIL: inf != 0) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 0 (operandRight) - found: inf (operandLeft) - expected: 0 (operandRight) - actual: inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 63 - floatComparisons(should FAIL: 0 != inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: inf (operandRight) - found: 0 (operandLeft) - expected: inf (operandRight) - actual: 0 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 64 - floatComparisons(should FAIL: -inf != 0) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 0 (operandRight) - found: -inf (operandLeft) - expected: 0 (operandRight) - actual: -inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 65 - floatComparisons(should FAIL: 0 != -inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: 0 (operandLeft) - expected: -inf (operandRight) - actual: 0 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 66 - floatComparisons(should FAIL: inf != 1) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 1 (operandRight) - found: inf (operandLeft) - expected: 1 (operandRight) - actual: inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 67 - floatComparisons(should FAIL: 1 != inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: inf (operandRight) - found: 1 (operandLeft) - expected: inf (operandRight) - actual: 1 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 68 - floatComparisons(should FAIL: -inf != 1) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 1 (operandRight) - found: -inf (operandLeft) - expected: 1 (operandRight) - actual: -inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 69 - floatComparisons(should FAIL: 1 != -inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: 1 (operandLeft) - expected: -inf (operandRight) - actual: 1 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 70 - floatComparisons(should FAIL: inf != max) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 3.40282e+38 (operandRight) - found: inf (operandLeft) - expected: 3.40282e+38 (operandRight) - actual: inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 71 - floatComparisons(should FAIL: inf != -max) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: -3.40282e+38 (operandRight) - found: inf (operandLeft) - expected: -3.40282e+38 (operandRight) - actual: inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 72 - floatComparisons(should FAIL: max != inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: inf (operandRight) - found: 3.40282e+38 (operandLeft) - expected: inf (operandRight) - actual: 3.40282e+38 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 73 - floatComparisons(should FAIL: -max != inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: inf (operandRight) - found: -3.40282e+38 (operandLeft) - expected: inf (operandRight) - actual: -3.40282e+38 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 74 - floatComparisons(should FAIL: -inf != max) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 3.40282e+38 (operandRight) - found: -inf (operandLeft) - expected: 3.40282e+38 (operandRight) - actual: -inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 75 - floatComparisons(should FAIL: -inf != -max) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: -3.40282e+38 (operandRight) - found: -inf (operandLeft) - expected: -3.40282e+38 (operandRight) - actual: -inf (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 76 - floatComparisons(should FAIL: max != -inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: 3.40282e+38 (operandLeft) - expected: -inf (operandRight) - actual: 3.40282e+38 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 77 - floatComparisons(should FAIL: -max != -inf) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: -3.40282e+38 (operandLeft) - expected: -inf (operandRight) - actual: -3.40282e+38 (operandLeft) - at: tst_float::floatComparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:139) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 139 - ... -not ok 78 - float16Comparisons(should FAIL 1) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 3 (operandRight) - found: 1 (operandLeft) - expected: 3 (operandRight) - actual: 1 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -ok 79 - float16Comparisons(should PASS 1) -not ok 80 - float16Comparisons(should FAIL 2) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 0.003 (operandRight) - found: 0.000999 (operandLeft) - expected: 0.003 (operandRight) - actual: 0.000999 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -ok 81 - float16Comparisons(should PASS 2) -not ok 82 - float16Comparisons(should FAIL 3) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 99 (operandRight) - found: 98 (operandLeft) - expected: 99 (operandRight) - actual: 98 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -ok 83 - float16Comparisons(should PASS 3) -not ok 84 - float16Comparisons(should FAIL 4) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 0.00099 (operandRight) - found: 0.00101 (operandLeft) - expected: 0.00099 (operandRight) - actual: 0.00101 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -ok 85 - float16Comparisons(should PASS 4) -not ok 86 - float16Comparisons(should FAIL 5) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 5.88e+04 (operandRight) - found: 5.94e+04 (operandLeft) - expected: 5.88e+04 (operandRight) - actual: 5.94e+04 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -ok 87 - float16Comparisons(should PASS: NaN == NaN) -not ok 88 - float16Comparisons(should FAIL: NaN != 0) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 0 (operandRight) - found: nan (operandLeft) - expected: 0 (operandRight) - actual: nan (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 89 - float16Comparisons(should FAIL: 0 != NaN) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: nan (operandRight) - found: 0 (operandLeft) - expected: nan (operandRight) - actual: 0 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 90 - float16Comparisons(should FAIL: NaN != 1) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 1 (operandRight) - found: nan (operandLeft) - expected: 1 (operandRight) - actual: nan (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 91 - float16Comparisons(should FAIL: 1 != NaN) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: nan (operandRight) - found: 1 (operandLeft) - expected: nan (operandRight) - actual: 1 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -ok 92 - float16Comparisons(should PASS: inf == inf) -ok 93 - float16Comparisons(should PASS: -inf == -inf) -not ok 94 - float16Comparisons(should FAIL: inf != -inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: inf (operandLeft) - expected: -inf (operandRight) - actual: inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 95 - float16Comparisons(should FAIL: -inf != inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: inf (operandRight) - found: -inf (operandLeft) - expected: inf (operandRight) - actual: -inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 96 - float16Comparisons(should FAIL: inf != nan) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: nan (operandRight) - found: inf (operandLeft) - expected: nan (operandRight) - actual: inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 97 - float16Comparisons(should FAIL: nan != inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: inf (operandRight) - found: nan (operandLeft) - expected: inf (operandRight) - actual: nan (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 98 - float16Comparisons(should FAIL: -inf != nan) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: nan (operandRight) - found: -inf (operandLeft) - expected: nan (operandRight) - actual: -inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 99 - float16Comparisons(should FAIL: nan != -inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: nan (operandLeft) - expected: -inf (operandRight) - actual: nan (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 100 - float16Comparisons(should FAIL: inf != 0) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 0 (operandRight) - found: inf (operandLeft) - expected: 0 (operandRight) - actual: inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 101 - float16Comparisons(should FAIL: 0 != inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: inf (operandRight) - found: 0 (operandLeft) - expected: inf (operandRight) - actual: 0 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 102 - float16Comparisons(should FAIL: -inf != 0) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 0 (operandRight) - found: -inf (operandLeft) - expected: 0 (operandRight) - actual: -inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 103 - float16Comparisons(should FAIL: 0 != -inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: 0 (operandLeft) - expected: -inf (operandRight) - actual: 0 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 104 - float16Comparisons(should FAIL: inf != 1) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 1 (operandRight) - found: inf (operandLeft) - expected: 1 (operandRight) - actual: inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 105 - float16Comparisons(should FAIL: 1 != inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: inf (operandRight) - found: 1 (operandLeft) - expected: inf (operandRight) - actual: 1 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 106 - float16Comparisons(should FAIL: -inf != 1) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 1 (operandRight) - found: -inf (operandLeft) - expected: 1 (operandRight) - actual: -inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 107 - float16Comparisons(should FAIL: 1 != -inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: 1 (operandLeft) - expected: -inf (operandRight) - actual: 1 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 108 - float16Comparisons(should FAIL: inf != max) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 6.55e+04 (operandRight) - found: inf (operandLeft) - expected: 6.55e+04 (operandRight) - actual: inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 109 - float16Comparisons(should FAIL: inf != -max) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: -6.55e+04 (operandRight) - found: inf (operandLeft) - expected: -6.55e+04 (operandRight) - actual: inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 110 - float16Comparisons(should FAIL: max != inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: inf (operandRight) - found: 6.55e+04 (operandLeft) - expected: inf (operandRight) - actual: 6.55e+04 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 111 - float16Comparisons(should FAIL: -max != inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: inf (operandRight) - found: -6.55e+04 (operandLeft) - expected: inf (operandRight) - actual: -6.55e+04 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 112 - float16Comparisons(should FAIL: -inf != max) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: 6.55e+04 (operandRight) - found: -inf (operandLeft) - expected: 6.55e+04 (operandRight) - actual: -inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 113 - float16Comparisons(should FAIL: -inf != -max) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: -6.55e+04 (operandRight) - found: -inf (operandLeft) - expected: -6.55e+04 (operandRight) - actual: -inf (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 114 - float16Comparisons(should FAIL: max != -inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: 6.55e+04 (operandLeft) - expected: -inf (operandRight) - actual: 6.55e+04 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 115 - float16Comparisons(should FAIL: -max != -inf) - --- - type: QCOMPARE - message: Compared qfloat16s are not the same (fuzzy compare) - wanted: -inf (operandRight) - found: -6.55e+04 (operandLeft) - expected: -inf (operandRight) - actual: -6.55e+04 (operandLeft) - at: tst_float::float16Comparisons() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:174) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 174 - ... -not ok 116 - compareFloatTests(1e0) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 3 (t3) - found: 1 (t1) - expected: 3 (t3) - actual: 1 (t1) - at: tst_float::compareFloatTests() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:215) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 215 - ... -not ok 117 - compareFloatTests(1e-5) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 3e-05 (t3) - found: 1e-05 (t1) - expected: 3e-05 (t3) - actual: 1e-05 (t1) - at: tst_float::compareFloatTests() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:215) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 215 - ... -not ok 118 - compareFloatTests(1e+7) - --- - type: QCOMPARE - message: Compared floats are not the same (fuzzy compare) - wanted: 3e+07 (t3) - found: 1e+07 (t1) - expected: 3e+07 (t3) - actual: 1e+07 (t1) - at: tst_float::compareFloatTests() (qtbase/tests/auto/testlib/selftests/float/tst_float.cpp:215) - file: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp - line: 215 - ... -ok 119 - cleanupTestCase() -1..119 -# tests 119 -# pass 23 -# fail 96 diff --git a/tests/auto/testlib/selftests/expected_float.teamcity b/tests/auto/testlib/selftests/expected_float.teamcity deleted file mode 100644 index f8d65a71..00000000 --- a/tests/auto/testlib/selftests/expected_float.teamcity +++ /dev/null @@ -1,336 +0,0 @@ -##teamcity[testSuiteStarted name='tst_float' flowId='tst_float'] -##teamcity[testStarted name='initTestCase()' flowId='tst_float'] -##teamcity[testFinished name='initTestCase()' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL 1)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): 3' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL 1)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should PASS 1)' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should PASS 1)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL 2)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 1e-07|n Expected (operandRight): 3e-07' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL 2)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should PASS 2)' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should PASS 2)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL 3)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL 3)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 999999999999|n Expected (operandRight): 999999999998' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL 3)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should PASS 3)' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should PASS 3)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL 4)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL 4)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 1e-12|n Expected (operandRight): 9.99999999999e-13' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL 4)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should PASS 4)' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should PASS 4)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL 5)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL 5)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 9.99999999999e+306|n Expected (operandRight): 9.99999999997e+306' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL 5)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should PASS: NaN == NaN)' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should PASS: NaN == NaN)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: NaN != 0)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: NaN != 0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): 0' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: NaN != 0)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: 0 != NaN)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: 0 != NaN)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 0|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: 0 != NaN)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: NaN != 1)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: NaN != 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): 1' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: NaN != 1)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: 1 != NaN)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: 1 != NaN)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: 1 != NaN)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should PASS: inf == inf)' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should PASS: inf == inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should PASS: -inf == -inf)' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should PASS: -inf == -inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: inf != -inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: inf != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: inf != -inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: -inf != inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: -inf != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: -inf != inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: inf != nan)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: inf != nan)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: inf != nan)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: nan != inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: nan != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: nan != inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: -inf != nan)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: -inf != nan)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: -inf != nan)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: nan != -inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: nan != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: nan != -inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: inf != 0)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: inf != 0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): 0' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: inf != 0)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: 0 != inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: 0 != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 0|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: 0 != inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: -inf != 0)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: -inf != 0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): 0' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: -inf != 0)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: 0 != -inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: 0 != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 0|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: 0 != -inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: inf != 1)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: inf != 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): 1' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: inf != 1)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: 1 != inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: 1 != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: 1 != inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: -inf != 1)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: -inf != 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): 1' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: -inf != 1)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: 1 != -inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: 1 != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: 1 != -inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: inf != max)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: inf != max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): 1.79769313486e+308' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: inf != max)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: inf != -max)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: inf != -max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): -1.79769313486e+308' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: inf != -max)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: max != inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: max != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 1.79769313486e+308|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: max != inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: -max != inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: -max != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : -1.79769313486e+308|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: -max != inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: -inf != max)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: -inf != max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): 1.79769313486e+308' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: -inf != max)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: -inf != -max)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: -inf != -max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): -1.79769313486e+308' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: -inf != -max)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: max != -inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: max != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : 1.79769313486e+308|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: max != -inf)' flowId='tst_float'] -##teamcity[testStarted name='doubleComparisons(should FAIL: -max != -inf)' flowId='tst_float'] -##teamcity[testFailed name='doubleComparisons(should FAIL: -max != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared doubles are not the same (fuzzy compare)|n Actual (operandLeft) : -1.79769313486e+308|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='doubleComparisons(should FAIL: -max != -inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL 1)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): 3' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL 1)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should PASS 1)' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should PASS 1)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL 2)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 1e-05|n Expected (operandRight): 3e-05' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL 2)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should PASS 2)' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should PASS 2)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL 3)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL 3)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 99999|n Expected (operandRight): 99998' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL 3)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should PASS 3)' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should PASS 3)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL 4)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL 4)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 1.00001e-05|n Expected (operandRight): 9.9999e-06' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL 4)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should PASS 4)' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should PASS 4)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL 5)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL 5)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 9.9999e+37|n Expected (operandRight): 9.9997e+37' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL 5)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should PASS: NaN == NaN)' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should PASS: NaN == NaN)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: NaN != 0)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: NaN != 0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): 0' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: NaN != 0)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: 0 != NaN)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: 0 != NaN)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 0|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: 0 != NaN)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: NaN != 1)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: NaN != 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): 1' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: NaN != 1)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: 1 != NaN)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: 1 != NaN)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: 1 != NaN)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should PASS: inf == inf)' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should PASS: inf == inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should PASS: -inf == -inf)' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should PASS: -inf == -inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: inf != -inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: inf != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: inf != -inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: -inf != inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: -inf != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: -inf != inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: inf != nan)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: inf != nan)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: inf != nan)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: nan != inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: nan != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: nan != inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: -inf != nan)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: -inf != nan)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: -inf != nan)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: nan != -inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: nan != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: nan != -inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: inf != 0)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: inf != 0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): 0' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: inf != 0)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: 0 != inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: 0 != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 0|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: 0 != inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: -inf != 0)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: -inf != 0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): 0' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: -inf != 0)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: 0 != -inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: 0 != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 0|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: 0 != -inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: inf != 1)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: inf != 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): 1' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: inf != 1)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: 1 != inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: 1 != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: 1 != inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: -inf != 1)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: -inf != 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): 1' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: -inf != 1)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: 1 != -inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: 1 != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: 1 != -inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: inf != max)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: inf != max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): 3.40282e+38' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: inf != max)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: inf != -max)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: inf != -max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): -3.40282e+38' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: inf != -max)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: max != inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: max != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 3.40282e+38|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: max != inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: -max != inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: -max != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : -3.40282e+38|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: -max != inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: -inf != max)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: -inf != max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): 3.40282e+38' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: -inf != max)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: -inf != -max)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: -inf != -max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): -3.40282e+38' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: -inf != -max)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: max != -inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: max != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 3.40282e+38|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: max != -inf)' flowId='tst_float'] -##teamcity[testStarted name='floatComparisons(should FAIL: -max != -inf)' flowId='tst_float'] -##teamcity[testFailed name='floatComparisons(should FAIL: -max != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : -3.40282e+38|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='floatComparisons(should FAIL: -max != -inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL 1)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): 3' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL 1)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should PASS 1)' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should PASS 1)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL 2)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 0.000999|n Expected (operandRight): 0.003' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL 2)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should PASS 2)' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should PASS 2)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL 3)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL 3)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 98|n Expected (operandRight): 99' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL 3)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should PASS 3)' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should PASS 3)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL 4)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL 4)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 0.00101|n Expected (operandRight): 0.00099' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL 4)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should PASS 4)' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should PASS 4)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL 5)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL 5)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 5.94e+04|n Expected (operandRight): 5.88e+04' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL 5)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should PASS: NaN == NaN)' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should PASS: NaN == NaN)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: NaN != 0)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: NaN != 0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): 0' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: NaN != 0)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: 0 != NaN)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: 0 != NaN)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 0|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: 0 != NaN)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: NaN != 1)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: NaN != 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): 1' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: NaN != 1)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: 1 != NaN)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: 1 != NaN)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: 1 != NaN)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should PASS: inf == inf)' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should PASS: inf == inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should PASS: -inf == -inf)' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should PASS: -inf == -inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: inf != -inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: inf != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: inf != -inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: -inf != inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: -inf != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: -inf != inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: inf != nan)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: inf != nan)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: inf != nan)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: nan != inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: nan != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: nan != inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: -inf != nan)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: -inf != nan)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): nan' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: -inf != nan)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: nan != -inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: nan != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : nan|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: nan != -inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: inf != 0)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: inf != 0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): 0' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: inf != 0)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: 0 != inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: 0 != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 0|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: 0 != inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: -inf != 0)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: -inf != 0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): 0' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: -inf != 0)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: 0 != -inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: 0 != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 0|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: 0 != -inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: inf != 1)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: inf != 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): 1' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: inf != 1)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: 1 != inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: 1 != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: 1 != inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: -inf != 1)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: -inf != 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): 1' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: -inf != 1)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: 1 != -inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: 1 != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: 1 != -inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: inf != max)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: inf != max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): 6.55e+04' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: inf != max)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: inf != -max)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: inf != -max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : inf|n Expected (operandRight): -6.55e+04' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: inf != -max)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: max != inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: max != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 6.55e+04|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: max != inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: -max != inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: -max != inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : -6.55e+04|n Expected (operandRight): inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: -max != inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: -inf != max)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: -inf != max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): 6.55e+04' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: -inf != max)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: -inf != -max)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: -inf != -max)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : -inf|n Expected (operandRight): -6.55e+04' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: -inf != -max)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: max != -inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: max != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : 6.55e+04|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: max != -inf)' flowId='tst_float'] -##teamcity[testStarted name='float16Comparisons(should FAIL: -max != -inf)' flowId='tst_float'] -##teamcity[testFailed name='float16Comparisons(should FAIL: -max != -inf)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared qfloat16s are not the same (fuzzy compare)|n Actual (operandLeft) : -6.55e+04|n Expected (operandRight): -inf' flowId='tst_float'] -##teamcity[testFinished name='float16Comparisons(should FAIL: -max != -inf)' flowId='tst_float'] -##teamcity[testStarted name='compareFloatTests(1e0)' flowId='tst_float'] -##teamcity[testFailed name='compareFloatTests(1e0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (t1): 1|n Expected (t3): 3' flowId='tst_float'] -##teamcity[testFinished name='compareFloatTests(1e0)' flowId='tst_float'] -##teamcity[testStarted name='compareFloatTests(1e-5)' flowId='tst_float'] -##teamcity[testFailed name='compareFloatTests(1e-5)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (t1): 1e-05|n Expected (t3): 3e-05' flowId='tst_float'] -##teamcity[testFinished name='compareFloatTests(1e-5)' flowId='tst_float'] -##teamcity[testStarted name='compareFloatTests(1e+7)' flowId='tst_float'] -##teamcity[testFailed name='compareFloatTests(1e+7)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (t1): 1e+07|n Expected (t3): 3e+07' flowId='tst_float'] -##teamcity[testFinished name='compareFloatTests(1e+7)' flowId='tst_float'] -##teamcity[testStarted name='cleanupTestCase()' flowId='tst_float'] -##teamcity[testFinished name='cleanupTestCase()' flowId='tst_float'] -##teamcity[testSuiteFinished name='tst_float' flowId='tst_float'] diff --git a/tests/auto/testlib/selftests/expected_float.txt b/tests/auto/testlib/selftests/expected_float.txt index 25c8c6b6..a0a2d184 100644 --- a/tests/auto/testlib/selftests/expected_float.txt +++ b/tests/auto/testlib/selftests/expected_float.txt @@ -269,7 +269,7 @@ FAIL! : tst_float::float16Comparisons(should FAIL 1) Compared qfloat16s are not Loc: [qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)] PASS : tst_float::float16Comparisons(should PASS 1) FAIL! : tst_float::float16Comparisons(should FAIL 2) Compared qfloat16s are not the same (fuzzy compare) - Actual (operandLeft) : 0.000999 + Actual (operandLeft) : 0.00781 Expected (operandRight): 0.003 Loc: [qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)] PASS : tst_float::float16Comparisons(should PASS 2) diff --git a/tests/auto/testlib/selftests/expected_float.xml b/tests/auto/testlib/selftests/expected_float.xml deleted file mode 100644 index 8ddc72a9..00000000 --- a/tests/auto/testlib/selftests/expected_float.xml +++ /dev/null @@ -1,668 +0,0 @@ - - - - @INSERT_QT_VERSION_HERE@ - - @INSERT_QT_VERSION_HERE@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/auto/testlib/selftests/float/tst_float.cpp b/tests/auto/testlib/selftests/float/tst_float.cpp index 823495f8..bc9ea001 100644 --- a/tests/auto/testlib/selftests/float/tst_float.cpp +++ b/tests/auto/testlib/selftests/float/tst_float.cpp @@ -31,8 +31,6 @@ #include #include -#include "emulationdetector.h" - // Test proper handling of floating-point types class tst_float: public QObject { @@ -182,11 +180,11 @@ void tst_float::float16Comparisons_data() const QTest::addColumn("operandLeft"); QTest::addColumn("operandRight"); const qfloat16 zero(0), one(1); - const qfloat16 tiny(EmulationDetector::isRunningArmOnX86() ? 0.00099f : 0.001f); + const qfloat16 tiny(0.00099f); QTest::newRow("should FAIL 1") << one << qfloat16(3); QTest::newRow("should PASS 1") << zero << zero; - QTest::newRow("should FAIL 2") << qfloat16(1e-3f) << qfloat16(3e-3f); + QTest::newRow("should FAIL 2") << qfloat16(1.f/128.f) << qfloat16(3e-3f); // QCOMPARE for uses qFuzzyCompare(), which ignores differences of one part // in 102.5 and considers any two qFuzzyIsNull() values, i.e. values smaller diff --git a/tests/auto/testlib/selftests/generate_expected_output.py b/tests/auto/testlib/selftests/generate_expected_output.py index 96fab444..e4a02176 100755 --- a/tests/auto/testlib/selftests/generate_expected_output.py +++ b/tests/auto/testlib/selftests/generate_expected_output.py @@ -308,6 +308,13 @@ def generateTestData(testname, clean, print("Warning: directory", testname, "contains no test executable") return + # See TestLogger::shouldIgnoreTest() in tst_selftest.cpp for these + # single-format tests: + if testname == 'junit': + formats = ( 'junitxml', ) if 'junitxml' in formats else () + elif testname == 'float': + formats = ( 'txt', ) if 'txt' in formats else () + # Prepare environment in which to run tests: env = testEnv(testname) diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp index 829a79c0..66e7ca5b 100644 --- a/tests/auto/testlib/selftests/tst_selftests.cpp +++ b/tests/auto/testlib/selftests/tst_selftests.cpp @@ -822,6 +822,8 @@ bool tst_Selftests::compareOutput(const QString &logger, const QString &subdir, continue; if (actualLineBA.endsWith(" : failure location")) continue; + if (actualLineBA.endsWith(" : message location")) + continue; if (actualLineBA.startsWith("Config: Using QtTest library") // Text build string || actualLineBA.startsWith(" indexOfSlot("a()") != -1); QVERIFY(mobj->indexOfSlot("b()") != -1); QVERIFY(mobj->indexOfSlot("c()") != -1); - QVERIFY(mobj->indexOfSlot("d()") != -1); - QVERIFY(mobj->indexOfSlot("e()") != -1); } void tst_Moc::warnOnPropertyWithoutREAD() diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp index afb24bc5..45515929 100644 --- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp @@ -137,6 +137,7 @@ private slots: void clearLineEdit(); void enableChooseButton(); void selectedFilesWithoutWidgets(); + void selectedFileWithDefaultSuffix(); void trailingDotsAndSpaces(); #ifdef Q_OS_UNIX #ifdef QT_BUILD_INTERNAL @@ -1475,6 +1476,21 @@ void tst_QFiledialog::selectedFilesWithoutWidgets() QVERIFY(fd.selectedFiles().size() >= 0); } +void tst_QFiledialog::selectedFileWithDefaultSuffix() +{ + // QTBUG-59401: dot in file path should not prevent default suffix from being added + QTemporaryDir tempDir(QDir::tempPath() + "/abcXXXXXX.def"); + QVERIFY2(tempDir.isValid(), qPrintable(tempDir.errorString())); + + QFileDialog fd; + fd.setDirectory(tempDir.path()); + fd.setDefaultSuffix(".txt"); + fd.selectFile("xxx"); + const auto selectedFiles = fd.selectedFiles(); + QCOMPARE(selectedFiles.size(), 1); + QVERIFY(selectedFiles.first().endsWith(".txt")); +} + void tst_QFiledialog::trailingDotsAndSpaces() { #ifndef Q_OS_WIN diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST new file mode 100644 index 00000000..75401450 --- /dev/null +++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST @@ -0,0 +1,4 @@ +[scrollUpdate] +android +[forwardTouchEvent] +android diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp index eaa00d91..f1efeebd 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp @@ -3541,10 +3541,10 @@ void tst_QGraphicsView::embeddedViewsWithFocus() void focusOutEvent(QFocusEvent *) override { --focusCount; } }; - QGraphicsScene *innerScene = new QGraphicsScene; + QGraphicsScene innerScene; FocusWidget *innerWidget = new FocusWidget; - innerScene->addWidget(innerWidget); - QGraphicsView *innerView = new QGraphicsView(innerScene); + innerScene.addWidget(innerWidget); + QGraphicsView *innerView = new QGraphicsView(&innerScene); QGraphicsScene outerScene; FocusWidget *outerWidget = new FocusWidget; @@ -3562,7 +3562,7 @@ void tst_QGraphicsView::embeddedViewsWithFocus() QCOMPARE(outerView.itemAt(outerCenter), outerProxy); QCOMPARE(outerView.itemAt(innerCenter), nestedProxy); QVERIFY(outerScene.isActive()); - QVERIFY(innerScene->isActive()); + QVERIFY(innerScene.isActive()); QCOMPARE(outerWidget->focusCount, 0); QCOMPARE(innerWidget->focusCount, 0); diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp index c355ee96..88c09de8 100644 --- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp @@ -251,6 +251,7 @@ private slots: void testResetCachedSizeHint(); void statusTips(); void testRemovingColumnsViaLayoutChanged(); + void testModelMovingColumns(); protected: void setupTestData(bool use_reset_model = false); @@ -360,6 +361,12 @@ public: endRemoveColumns(); } + void moveColumn(int from, int to) + { + beginMoveColumns(QModelIndex(), from, from, QModelIndex(), to); + endMoveColumns(); + } + void cleanup() { emit layoutAboutToBeChanged(); @@ -3627,5 +3634,18 @@ void tst_QHeaderView::testRemovingColumnsViaLayoutChanged() // The main point of this test is that the section-size restoring code didn't go out of bounds. } +void tst_QHeaderView::testModelMovingColumns() +{ + QtTestModel model(10, 10); + QHeaderView hv(Qt::Horizontal); + hv.setModel(&model); + hv.resizeSections(QHeaderView::ResizeToContents); + hv.show(); + + QPersistentModelIndex index3 = model.index(0, 3); + model.moveColumn(3, 1); + QCOMPARE(index3.column(), 1); +} + QTEST_MAIN(tst_QHeaderView) #include "tst_qheaderview.moc" diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp index 875b2c08..b0382456 100644 --- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp +++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp @@ -166,6 +166,7 @@ private slots: void taskQTBUG_7232_AllowUserToControlSingleStep(); void taskQTBUG_51086_skippingIndexesInSelectedIndexes(); void taskQTBUG_47694_indexOutOfBoundBatchLayout(); + void moveLastRow(); void itemAlignment(); void internalDragDropMove_data(); void internalDragDropMove(); @@ -2514,6 +2515,222 @@ void tst_QListView::taskQTBUG_47694_indexOutOfBoundBatchLayout() view.scrollTo(model.index(batchSize - 1, 0)); } +class TstMoveItem +{ + friend class TstMoveModel; +public: + TstMoveItem(TstMoveItem *parent = nullptr) + : parentItem(parent) + { + if (parentItem) + parentItem->childItems.append(this); + } + + ~TstMoveItem() + { + QList delItms; + delItms.swap(childItems); + qDeleteAll(delItms); + + if (parentItem) + parentItem->childItems.removeAll(this); + } + + int row() + { + if (parentItem) + return parentItem->childItems.indexOf(this); + return -1; + } + +public: + TstMoveItem *parentItem = nullptr; + QList childItems; + QHash data; +}; + +/*! + Test that removing the last row in an IconView mode QListView + doesn't crash. The model is specifically crafted to provoke a + stale QBspTree by returning a 0 column count for indexes without + children, which changes the column count after moving the last row. + + See QTBUG_95463. +*/ +class TstMoveModel : public QAbstractItemModel +{ + Q_OBJECT +public: + TstMoveModel(QObject *parent = nullptr) + : QAbstractItemModel(parent) + { + rootItem = new TstMoveItem; + rootItem->data.insert(Qt::DisplayRole, "root"); + + TstMoveItem *itm = new TstMoveItem(rootItem); + itm->data.insert(Qt::DisplayRole, "parentItem1"); + + TstMoveItem *itmCh = new TstMoveItem(itm); + itmCh->data.insert(Qt::DisplayRole, "childItem"); + + itm = new TstMoveItem(rootItem); + itm->data.insert(Qt::DisplayRole, "parentItem2"); + } + + ~TstMoveModel() + { + delete rootItem; + } + + QModelIndex index(int row, int column, const QModelIndex &idxPar = QModelIndex()) const override + { + QModelIndex idx; + if (hasIndex(row, column, idxPar)) { + TstMoveItem *parentItem = nullptr; + if (idxPar.isValid()) + parentItem = static_cast(idxPar.internalPointer()); + else + parentItem = rootItem; + + Q_ASSERT(parentItem); + TstMoveItem *childItem = parentItem->childItems.at(row); + if (childItem) + idx = createIndex(row, column, childItem); + } + return idx; + } + + QModelIndex parent(const QModelIndex &index) const override + { + QModelIndex idxPar; + if (index.isValid()) { + TstMoveItem *childItem = static_cast(index.internalPointer()); + TstMoveItem *parentItem = childItem->parentItem; + if (parentItem != rootItem) + idxPar = createIndex(parentItem->row(), 0, parentItem); + } + return idxPar; + } + + int columnCount(const QModelIndex &idxPar = QModelIndex()) const override + { + int cnt = 0; + if (idxPar.isValid()) { + TstMoveItem *parentItem = static_cast(idxPar.internalPointer()); + Q_ASSERT(parentItem); + cnt = parentItem->childItems.isEmpty() ? 0 : 1; + } else { + cnt = rootItem->childItems.isEmpty() ? 0 : 1; + } + return cnt; + } + + int rowCount(const QModelIndex &idxPar = QModelIndex()) const override + { + int cnt = 0; + if (idxPar.isValid()) { + TstMoveItem *parentItem = static_cast(idxPar.internalPointer()); + Q_ASSERT(parentItem); + cnt = parentItem->childItems.count(); + } else { + cnt = rootItem->childItems.count(); + } + return cnt; + } + + Qt::ItemFlags flags(const QModelIndex &index) const override + { + Q_UNUSED(index) + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; + } + + bool hasChildren(const QModelIndex &parent = QModelIndex()) const override + { + bool ret = false; + if (parent.isValid()) { + TstMoveItem *parentItem = static_cast(parent.internalPointer()); + Q_ASSERT(parentItem); + ret = parentItem->childItems.count() > 0; + } else { + ret = rootItem->childItems.count() > 0; + } + return ret; + } + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override + { + QVariant dt; + if (index.isValid()) { + TstMoveItem *item = static_cast(index.internalPointer()); + if (item) + dt = item->data.value(role); + } + return dt; + } + + bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild) override + { + TstMoveItem *itmSrcParent = itemAt(sourceParent); + TstMoveItem *itmDestParent = itemAt(destinationParent); + + if (itmSrcParent && sourceRow >= 0 + && sourceRow + count <= itmSrcParent->childItems.count() + && itmDestParent && destinationChild <= itmDestParent->childItems.count()) { + beginMoveRows(sourceParent, sourceRow, sourceRow + count - 1, + destinationParent, destinationChild); + QList itemsToMove; + for (int i = 0; i < count; ++i) { + TstMoveItem *itm = itmSrcParent->childItems.at(sourceRow+i); + itemsToMove.append(itm); + } + for (int i = itemsToMove.count() -1; i >= 0; --i) { + TstMoveItem *itm = itemsToMove.at(i); + itm->parentItem->childItems.removeAll(itm); + itm->parentItem = itmDestParent; + itmDestParent->childItems.insert(destinationChild, itm); + } + endMoveRows(); + return true; + } + return false; + } + +private: + TstMoveItem *itemAt(const QModelIndex &index) const + { + TstMoveItem *item = nullptr; + if (index.isValid()) { + Q_ASSERT(index.model() == this); + item = static_cast(index.internalPointer()); + } else { + item = rootItem; + } + return item; + } + +private: + TstMoveItem *rootItem = nullptr; +}; + +void tst_QListView::moveLastRow() +{ + TstMoveModel model; + QListView view; + view.setModel(&model); + view.setRootIndex(model.index(0, 0, QModelIndex())); + view.setViewMode(QListView::IconMode); + view.show(); + + QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowActive(&view)); + + QModelIndex sourceParent = model.index(0, 0); + QModelIndex destinationParent = model.index(1, 0); + // must not crash when paint event is processed + model.moveRow(sourceParent, 0, destinationParent, 0); + QTest::qWait(100); +} + void tst_QListView::itemAlignment() { auto item1 = new QStandardItem("111"); diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp index a3b8ef78..60259f6b 100644 --- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp +++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp @@ -1498,6 +1498,17 @@ void tst_QApplication::desktopSettingsAware() environment += QLatin1String("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM=1"); testProcess.setEnvironment(environment); #endif + // Add the executable's directory to path so that we can find the test helper next to it + // in a cross-platform way. We must do this because the CWD is not pointing to this directory + // in debug-and-release builds. + int argc = 0; + QApplication app(argc, nullptr); + QByteArray path = qgetenv("PATH"); + qputenv("PATH", + path + QDir::listSeparator().toLatin1() + + QCoreApplication::applicationDirPath().toLocal8Bit()); + auto restore = qScopeGuard([&] { qputenv("PATH", path); }); + testProcess.start("desktopsettingsaware_helper"); QVERIFY2(testProcess.waitForStarted(), qPrintable(QString::fromLatin1("Cannot start 'desktopsettingsaware_helper': %1").arg(testProcess.errorString()))); @@ -2452,6 +2463,17 @@ void tst_QApplication::qtbug_12673() #if QT_CONFIG(process) QProcess testProcess; QStringList arguments; + // Add the executable's directory to path so that we can find the test helper next to it + // in a cross-platform way. We must do this because the CWD is not pointing to this directory + // in debug-and-release builds. + int argc = 0; + QApplication app(argc, nullptr); + QByteArray path = qgetenv("PATH"); + qputenv("PATH", + path + QDir::listSeparator().toLatin1() + + QCoreApplication::applicationDirPath().toLocal8Bit()); + auto restore = qScopeGuard([&] { qputenv("PATH", path); }); + testProcess.start("modal_helper", arguments); QVERIFY2(testProcess.waitForStarted(), qPrintable(QString::fromLatin1("Cannot start 'modal_helper': %1").arg(testProcess.errorString()))); diff --git a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp index 26868a76..45b3b879 100644 --- a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp +++ b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp @@ -94,6 +94,7 @@ private slots: void layoutSpacing(); #endif void qproperty(); + void qproperty_styleSheet(); void palettePropagation_data(); void palettePropagation(); void fontPropagation_data(); @@ -127,6 +128,8 @@ private slots: void QTBUG36933_brokenPseudoClassLookup(); void styleSheetChangeBeforePolish(); void placeholderColor(); + void enumPropertySelector_data(); + void enumPropertySelector(); //at the end because it mess with the style. void widgetStyle(); void appStyle(); @@ -678,6 +681,23 @@ void tst_QStyleSheetStyle::qproperty() QCOMPARE(pb.isChecked(), false); } +void tst_QStyleSheetStyle::qproperty_styleSheet() +{ + QWidget w; + auto checkBox = new QCheckBox("check", &w); + QString sheet = R"(QCheckBox { qproperty-styleSheet: "QCheckBox { qproperty-text: foobar; }"; })"; + + QVERIFY(w.property("styleSheet").toString().isEmpty()); + + w.setStyleSheet(sheet); + QCOMPARE(checkBox->text(), "check"); + + //recursion crash + w.ensurePolished(); + QCOMPARE(w.property("styleSheet").toString(), sheet); + QCOMPARE(checkBox->text(), "foobar"); +} + namespace ns { class PushButton1 : public QPushButton { Q_OBJECT @@ -2245,6 +2265,42 @@ void tst_QStyleSheetStyle::placeholderColor() QCOMPARE(le2.palette().placeholderText(), red); } +void tst_QStyleSheetStyle::enumPropertySelector_data() +{ + QTest::addColumn("styleSheet"); + + QTest::addRow("Enum value") << R"(QToolButton[popupMode=MenuButtonPopup] { padding-right: 40px; })"; + QTest::addRow("Int value") << R"(QToolButton[popupMode="1"] { padding-right: 40px; })"; +} + +void tst_QStyleSheetStyle::enumPropertySelector() +{ + QFETCH(QString, styleSheet); + + QToolButton button; + QMenu menu; + menu.addAction("Action1"); + QPixmap pm(50, 50); + pm.fill(Qt::red); + button.setIcon(pm); + button.setMenu(&menu); + button.setPopupMode(QToolButton::MenuButtonPopup); + + button.show(); + const QSize unstyledSizeHint = button.sizeHint(); + + qApp->setStyleSheet(styleSheet); + const QSize styledSizeHint = button.sizeHint(); + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QEXPECT_FAIL("Enum value", "In Qt 5, style sheet selectors have to use integer enum values", Continue); +#else + QEXPECT_FAIL("Int value", "In Qt 6, style sheet selectors must use the enum value name", Continue); +#endif + + QVERIFY(styledSizeHint.width() > unstyledSizeHint.width()); +} + QTEST_MAIN(tst_QStyleSheetStyle) #include "tst_qstylesheetstyle.moc" diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp index 32437050..7af60ed7 100644 --- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp @@ -1682,6 +1682,16 @@ void tst_QComboBox::setModel() QCOMPARE(box.rootModelIndex(), rootModelIndex); box.setModel(box.model()); QCOMPARE(box.rootModelIndex(), rootModelIndex); + + // check that setting the same model as the completer's doesn't crash + QCompleter *completer = new QCompleter(&box); + box.setEditable(true); + box.setCompleter(completer); + auto *listModel = new QStringListModel({ "one", "two" }, completer); + completer->setModel(listModel); + QCOMPARE(listModel->rowCount(), 2); // make sure it wasn't deleted + box.setModel(listModel); + QCOMPARE(listModel->rowCount(), 2); // make sure it wasn't deleted } void tst_QComboBox::setCustomModelAndView() diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index 7c2203de..2f1a095f 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -4959,7 +4959,7 @@ void tst_QLineEdit::testQuickSelectionWithMouse() QVERIFY(lineEdit.selectedText().endsWith(suffix)); QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, 0)); qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); -#ifdef Q_PROCESSOR_ARM +#if defined(Q_PROCESSOR_ARM) && !defined(Q_OS_MACOS) QEXPECT_FAIL("", "Currently fails on gcc-armv7, needs investigation.", Continue); #endif QCOMPARE(lineEdit.selectedText(), partialSelection); diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index a86784f2..64c709d7 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -148,7 +148,7 @@ private slots: void layoutAfterMultiLineRemove(); void undoCommandRemovesAndReinsertsBlock(); void taskQTBUG_43562_lineCountCrash(); -#ifndef QT_NO_CONTEXTMENU +#if !defined(QT_NO_CONTEXTMENU) && !defined(QT_NO_CLIPBOARD) void contextMenu(); #endif void inputMethodCursorRect(); @@ -1740,7 +1740,7 @@ void tst_QPlainTextEdit::taskQTBUG_43562_lineCountCrash() disconnect(ed->document(), SIGNAL(contentsChange(int, int, int)), 0, 0); } -#ifndef QT_NO_CONTEXTMENU +#if !defined(QT_NO_CONTEXTMENU) && !defined(QT_NO_CLIPBOARD) void tst_QPlainTextEdit::contextMenu() { ed->appendHtml(QStringLiteral("Hello Qt")); @@ -1774,7 +1774,7 @@ void tst_QPlainTextEdit::contextMenu() delete menu; QVERIFY(!ed->findChild(QStringLiteral("link-copy"))); } -#endif // QT_NO_CONTEXTMENU +#endif // QT_NO_CONTEXTMENU && QT_NO_CLIPBOARD // QTBUG-51923: Verify that the cursor rectangle returned by the input // method query correctly reflects the viewport offset. diff --git a/tests/benchmarks/gui/painting/qtransform/tst_qtransform.cpp b/tests/benchmarks/gui/painting/qtransform/tst_qtransform.cpp index d28f9502..9c3cef0e 100644 --- a/tests/benchmarks/gui/painting/qtransform/tst_qtransform.cpp +++ b/tests/benchmarks/gui/painting/qtransform/tst_qtransform.cpp @@ -335,7 +335,7 @@ void tst_QTransform::operatorMultiplyEqualScalar() QFETCH(QTransform, transform); QTransform x = transform; QBENCHMARK { - x * 3; + x *= 3; } } diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp index 56b34fff..b9bbda76 100644 --- a/tests/benchmarks/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/benchmarks/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp @@ -57,6 +57,7 @@ private slots: void scale(); void shear(); void translate(); + void createTextItem(); }; tst_QGraphicsItem::tst_QGraphicsItem() @@ -230,5 +231,15 @@ void tst_QGraphicsItem::translate() } } +void tst_QGraphicsItem::createTextItem() +{ + // Ensure QFontDatabase loaded the font beforehand + QFontInfo(qApp->font()).family(); + const QString text = "This is some text"; + QBENCHMARK { + QGraphicsTextItem item(text); + } +} + QTEST_MAIN(tst_QGraphicsItem) #include "tst_qgraphicsitem.moc"